web-dev-qa-db-fra.com

Dans la méthode LinearRegression de sklearn, que fait exactement le paramètre fit_intercept?

Dans le sklearn.linear_model.LinearRegression méthode, il existe un paramètre qui est fit_intercept = TRUE ou fit_intercept = FALSE. Je me demande si nous le définissons sur VRAI, cela ajoute-t-il une colonne d'interception supplémentaire de tous les 1 à votre ensemble de données? Si j'ai déjà un ensemble de données avec une colonne de 1, fit_intercept = FALSE en tient compte ou l'oblige-t-il à s'adapter à un modèle d'interception nulle?

Mise à jour: Il semble que les gens ne comprennent pas ma question. La question est essentiellement ce que SI j'avais déjà une colonne de 1 dans mon ensemble de données de prédicteurs (les 1 sont pour l'interception). ENSUITE,

1) si j'utilise fit_intercept = FALSE, supprimera-t-il la colonne des 1?

2) si j'utilise fit_intercept = TRUE, ajoutera-t-il une colonne EXTRA de 1?

15
user321627

fit_intercept=False définit l'ordonnée à l'origine sur 0. Si fit_intercept=True, l'ordonnée à l'origine sera déterminée par la ligne de meilleur ajustement.

from sklearn.linear_model import LinearRegression
from sklearn.datasets import make_regression
import numpy as np
import matplotlib.pyplot as plt

bias = 100

X = np.arange(1000).reshape(-1,1)
y_true = np.ravel(X.dot(0.3) + bias)
noise = np.random.normal(0, 60, 1000)
y = y_true + noise

lr_fi_true = LinearRegression(fit_intercept=True)
lr_fi_false = LinearRegression(fit_intercept=False)

lr_fi_true.fit(X, y)
lr_fi_false.fit(X, y)

print('Intercept when fit_intercept=True : {:.5f}'.format(lr_fi_true.intercept_))
print('Intercept when fit_intercept=False : {:.5f}'.format(lr_fi_false.intercept_))

lr_fi_true_yhat = np.dot(X, lr_fi_true.coef_) + lr_fi_true.intercept_
lr_fi_false_yhat = np.dot(X, lr_fi_false.coef_) + lr_fi_false.intercept_

plt.scatter(X, y, label='Actual points')
plt.plot(X, lr_fi_true_yhat, 'r--', label='fit_intercept=True')
plt.plot(X, lr_fi_false_yhat, 'r-', label='fit_intercept=False')
plt.legend()

plt.vlines(0, 0, y.max())
plt.hlines(bias, X.min(), X.max())
plt.hlines(0, X.min(), X.max())

plt.show()

Cet exemple imprime:

Intercept when fit_intercept=True : 100.32210
Intercept when fit_intercept=False : 0.00000

Visuellement, il devient clair ce que fit_intercept Est-ce que. Quand fit_intercept=True, la ligne de meilleur ajustement est autorisée à "s'adapter" à l'axe des y (près de 100 dans cet exemple). Quand fit_intercept=False, l'ordonnée à l'origine est forcée à l'origine (0, 0).

fit_intercept in sklearn


Que se passe-t-il si j'inclus une colonne de uns ou de zéros et que je définis fit_intercept à Vrai ou Faux?

Ci-dessous montre un exemple de la façon d'inspecter cela.

from sklearn.linear_model import LinearRegression
from sklearn.datasets import make_regression
import numpy as np
import matplotlib.pyplot as plt

np.random.seed(1)
bias = 100

X = np.arange(1000).reshape(-1,1)
y_true = np.ravel(X.dot(0.3) + bias)
noise = np.random.normal(0, 60, 1000)
y = y_true + noise

# with column of ones
X_with_ones = np.hstack((np.ones((X.shape[0], 1)), X))

for b,data in ((True, X), (False, X), (True, X_with_ones), (False, X_with_ones)):
  lr = LinearRegression(fit_intercept=b)
  lr.fit(data, y)

  print(lr.intercept_, lr.coef_)

À emporter:

# fit_intercept=True, no column of zeros or ones
104.156765787 [ 0.29634031]
# fit_intercept=False, no column of zeros or ones
0.0 [ 0.45265361]
# fit_intercept=True, column of zeros or ones
104.156765787 [ 0.          0.29634031]
# fit_intercept=False, column of zeros or ones
0.0 [ 104.15676579    0.29634031]
21
Jarad