sklearn.linear_model.LinearRegression
メソッドには、fit_intercept = TRUE
またはfit_intercept = FALSE
であるパラメーターがあります。 TRUEに設定すると、データセットにすべて1のインターセプト列が追加されますか?すでに1の列を持つデータセットがある場合、fit_intercept = FALSE
はそれを考慮しますか、それとも強制的にゼロインターセプトモデルに適合させますか?
更新:人々は私の質問を受け取らないようです。質問は基本的に、予測子のデータセットにすでに1の列があった場合(1は切片用)です。その後、
1)fit_intercept = FALSE
を使用すると、1の列が削除されますか?
2)fit_intercept = TRUE
を使用する場合、1のEXTRA列が追加されますか?
fit_intercept=False
はy切片を0に設定します。fit_intercept=True
の場合、y切片は最適な線によって決定されます。
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()
この例は印刷します:
Intercept when fit_intercept=True : 100.32210
Intercept when fit_intercept=False : 0.00000
視覚的にfit_intercept
が何をするかが明らかになります。 fit_intercept=True
の場合、最適な線はy軸に「適合する」ことが許可されます(この例では100に近い)。 fit_intercept=False
の場合、インターセプトはオリジン(0、0)に強制されます。
1または0の列を含め、
fit_intercept
をTrueまたはFalseに設定するとどうなりますか?
以下に、これを検査する方法の例を示します。
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_)
取り除く:
# 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]