Линейная регрессия минимизирует ошибки только выше линейной - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть набор данных, который похож на данные, созданные в MWE ниже:

from matplotlib import pyplot as plt
import numpy as np

sz=100
x = np.linspace(-1, 1, sz)
mean = -np.sign(x)
noise = np.random.randn(*x.shape)
K = -2

y_true = K*x
y = y_true + mean + noise

plt.scatter(x, y, label="Data with error")
plt.plot(x, y_true, "-", label="True line")
plt.grid()

enter image description here

То есть ошибки вокруг строки Iхочу, чтобы в основном отрицательные для х> 0 и в основном положительные для х <0.То, что я ищу, - это способ оценить коэффициент K (который в данном случае равен -2). </p>

На самом деле я думаю, что способ сделать это - минимизировать ошибку только точек, которые падаютвыше линии для x <0 и ниже линии для x> 0, но я не уверен, как эффективно это сделать в Python, поскольку все, что я могу придумать, включает в себя итерационные процессы, которые в Python медленны.

1 Ответ

0 голосов
/ 25 сентября 2019

По сути, вы хотите включить что-то, что может учитывать переменную mean, в вашу модель генерации данных.Вы можете сделать это, смоделировав разрыв в точке x = 0, включив переменную в вашу модель, которая равна 0, где x <0 и 1, где x> 0.

Мы можем даже просто включить «среднее»Переменная сама и получим ту же модель (с другой интерпретацией для второго коэффициента).Вот линейная модель, которая восстанавливает правильное значение для наклона этой прерывистой линии.Обратите внимание, что это предполагает, что угол наклона на правой стороне 0 совпадает с левой стороной.

from sklearn.linear_model import LinearRegression

X = np.array([x, mean]).T
reg = LinearRegression().fit(X, y)
print(reg.coef_)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...