Линейное соответствие ограничено, чтобы пройти через первую точку в Python - PullRequest
0 голосов
/ 24 октября 2019

У меня есть два numpy 1-го массива равной длины, x и переменная ответа y. Я хотел бы сделать подбор по методу наименьших квадратов, чтобы полученная линия проходила через точку (x_0, y_0). Какой самый простой способ это осуществить?

Примечание: были предложены некоторые решения по оптимизации. Это хорошо в теории, но линия должна проходить точно через точку - даже если подгонка к остальным точкам хуже.

1 Ответ

2 голосов
/ 24 октября 2019

Один из способов сделать это - центрировать ваши данные на (x_0, y_0), выполнить линейную регрессию (без указания перехвата), а затем преобразовать прогнозы обратно в исходный масштаб.

Вот пример:

import numpy as np
import matplotlib.pyplot as plt

x = np.random.randn(100)
y = np.random.randn(100)  +  x

plt.plot(x, y, "o")
plt.plot(x[0], y[0], "o") # x_0, y_0 is the orange dot

input data

Далее, используйте линейную регрессию без пересечения, чтобы соответствовать линии, проходящей черезпреобразованные данные.

from sklearn.linear_model import LinearRegression

lm = LinearRegression(fit_intercept = False)

# center data on x_0, y_0
y2 = y - y[0]
x2 = x - x[0]

# fit model
lm.fit(x2.reshape(-1, 1), y2)

Наконец, прогнозируем линию и строим ее обратно в исходном масштабе

# predict line
preds = lm.predict(np.arange(-5, 5, 0.1).reshape(-1,1))
# plot on original scale
plt.plot(x, y, "o")
plt.plot(x[0], y[0], "o")
# add x_0 and y_0 back to the predictions
plt.plot(np.arange(-5, 5, 0.1) + x[0], preds  + y[0])

enter image description here

...