Понимание линейной регрессии Склеарна - PullRequest
0 голосов
/ 26 марта 2020

Я испытываю трудности с получением массива весов в линейной регрессии sklearn, чтобы повлиять на вывод.

Вот пример без взвешивания.

import numpy as np
import seaborn as sns
from sklearn import linear_model

x = np.arange(0,100.)
y = (x**2.0)

xr = np.array(x).reshape(-1, 1)
yr = np.array(y).reshape(-1, 1)

regr = linear_model.LinearRegression()
regr.fit(xr, yr)
y_pred = regr.predict(xr)

sns.scatterplot(x=x, y = y)
sns.lineplot(x=x, y = y_pred.T[0].tolist())

enter image description here

Теперь при добавлении весов я получаю ту же самую линию наилучшего соответствия. Я ожидал увидеть регресс в пользу более крутой части кривой. Что я делаю не так?

w = [p**2 for p in x.reshape(-1)]
wregr = linear_model.LinearRegression()
wregr.fit(xr,yr, sample_weight=w)
yw_pred = regr.predict(xr)

wregr = linear_model.LinearRegression(fit_intercept=True)
wregr.fit(xr,yr, sample_weight=w)
yw_pred = regr.predict(xr)

sns.scatterplot(x=x, y = y)                      #plot curve
sns.lineplot(x=x, y = y_pred.T[0].tolist())      #plot non-weighted best fit line
sns.lineplot(x=x, y = yw_pred.T[0].tolist())     #plot weighted best fit line

enter image description here

1 Ответ

1 голос
/ 30 марта 2020

Это связано с ошибкой в ​​вашем коде. Подгонка вашей взвешенной модели должна быть:

yw_pred = wregr.predict(xr)

, а не

yw_pred = regr.predict(xr)

С этим вы получите:

enter image description here

...