fit_intercept 参数如何通过 scikit learn 影响线性回归

Far*_*suf 5 statistics regression linear-regression python-3.x scikit-learn

我正在尝试拟合线性模型,并且我的数据集被归一化,其中每个特征除以最大可能值。所以值的范围是 0-1。现在我从我之前的帖子中了解到当参数设置为 false时,scikit learn中 Python线性回归中的线性回归与封闭形式普通最小二乘法产生与封闭形式 OLS 相同的结果fit_intercept。我不太明白是如何fit_intercept工作的。

对于任何线性问题,如果 y 是预测值。

y(w, x) = w_0 + w_1 x_1 + ... + w_p x_p
Run Code Online (Sandbox Code Playgroud)

在整个模块中,向量 w = (w_1, ..., w_p) 表示为 coef_,w_0 表示为intercept_

在封闭形式的 OLS 中,我们也有 w_0 的偏差值,我们在计算点积之前引入向量 X_0=[1...1],并使用矩阵乘法和逆矩阵求解。

w = np.dot(X.T, X) 
w1 = np.dot(np.linalg.pinv(w), np.dot(X.T, Y))
Run Code Online (Sandbox Code Playgroud)

fit_intercept为 True 时,如果 y 是预测值,则 scikit-learn 线性回归可以解决问题。

y(w, x) = w_0 + w_1 x_1 + ... + w_p x_p + b 其中 b 是截取项。

fit_intercept在模型中使用有何不同以及何时应将其设置为 True/False。我试图查看源代码,似乎系数按某种比例进行了归一化。

if self.fit_intercept:
    self.coef_ = self.coef_ / X_scale
    self.intercept_ = y_offset - np.dot(X_offset, self.coef_.T)
else:
    self.intercept_ = 0
Run Code Online (Sandbox Code Playgroud)

这种缩放到底做了什么。我想解释两种方法中的系数(线性回归,闭合形式 OLS),但由于仅设置fit_interceptTrue/False 会为线性回归提供不同的结果,我无法完全确定它们背后的直觉。哪个更好,为什么?

小智 2

无需深入数学公式的细节,当拟合截距设置为 false 时,估计器会故意将截距设置为零,这反过来会影响其他回归器,因为误差减少的“责任”落在这些因素上。因此,如果对截距项的存在敏感,则两种情况下的结果都可能非常不同。缩放改变了原点,从而允许对截距和无截距模型使用相同的闭环解决方案。