我尝试使用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 是否使用一些不同的算法?
你可以尝试
Ridge regression
,即LinearRegression
加上L2正则化。 L2 正则化意味着它不仅最小化到目标的平方距离,而且还尝试保持系数较小。这使得它对于共线数据集更加稳定。
来自文档:
岭回归解决了普通最小数的一些问题 通过对系数的大小施加惩罚来求平方。这 岭系数最小化惩罚残差平方和:
复杂度参数控制收缩量: 的值越大,收缩量越大,因此 系数对于共线性变得更加稳健。
参见 https://scikit-learn.org/stable/modules/linear_model.html#ridge-regression 和 https://scikit-learn.org/stable/modules/ generated/sklearn.linear_model.Ridge.html
我不同意
Antoine Dubuis:线性回归使用最小二乘,因此 需要有一个可逆的 X.T @ X.
也许不是这个意思,但从技术上来说,你必须有一个可逆协方差矩阵才能做到这一点并不正确
linear regression/least squares
。例如。您可以使用 QR 分解来完成。我猜他的意思是这对于 scikit-learn
中的实施是必要的。但我认为进行某种正则化是明智的。这样想:如果您的问题是有很多解决方案(这就是共线性的含义),您想如何解决它?您想选择任何解决方案还是想提出一个标准来说明哪个解决方案是最好的,例如最规律?