sklearn.linear_model.LinearRegression如何在多共线数据集中仍然找到解?

问题描述 投票:0回答:2

我尝试使用extend_boston数据集训练线性回归模型:

from mglearn.datasets import load_extended_boston
X, y = load_extended_boston()

from sklearn.linear_model import LinearRegression
linearReg = LinearRegression()
linearReg.fit(X, y)

对于

X
中的每个特征,
LinearRegression
给出了相应的系数。

但是,X^TX 不是可逆的。因此,当我将这个线性模型拟合到

R
中时,程序会自动删除一个特征来寻找解决方案。

sklearn.linear_model.LinearRegression 是否使用一些不同的算法?

python scikit-learn
2个回答
0
投票

你可以尝试

Ridge regression
,即
LinearRegression
加上L2正则化。 L2 正则化意味着它不仅最小化到目标的平方距离,而且还尝试保持系数较小。这使得它对于共线数据集更加稳定。

来自文档:

岭回归解决了普通最小数的一些问题 通过对系数的大小施加惩罚来求平方。这 岭系数最小化惩罚残差平方和:

复杂度参数控制收缩量: 的值越大,收缩量越大,因此 系数对于共线性变得更加稳健。

参见 https://scikit-learn.org/stable/modules/linear_model.html#ridge-regressionhttps://scikit-learn.org/stable/modules/ generated/sklearn.linear_model.Ridge.html

我不同意

Antoine Dubuis:线性回归使用最小二乘,因此 需要有一个可逆的 X.T @ X.

也许不是这个意思,但从技术上来说,你必须有一个可逆协方差矩阵才能做到这一点并不正确

linear regression/least squares
。例如。您可以使用 QR 分解来完成。我猜他的意思是这对于
scikit-learn
中的实施是必要的。但我认为进行某种正则化是明智的。这样想:如果您的问题是有很多解决方案(这就是共线性的含义),您想如何解决它?您想选择任何解决方案还是想提出一个标准来说明哪个解决方案是最好的,例如最规律?


0
投票

添加答案,因为我不允许发表评论,而且这个问题还没有得到解答。

简短的答案是 scikit-learn 中的

LinearRegression
使用伪逆。请参阅此答案了解详细说明。

© www.soinside.com 2019 - 2024. All rights reserved.