Python岭回归
介绍
岭回归(Ridge Regression)是一种常见的线性回归方法,广泛用于处理具有多重共线性(multicollinearity)的问题。在实际应用中,当自变量之间存在较强的相关性时,最小二乘线性回归(Ordinary Least Squares Linear Regression)模型的预测结果往往不稳定,岭回归通过引入L2正则化(L2 regularization)解决了这个问题。
岭回归原理
在最小二乘线性回归中,目标是最小化残差平方和:
[
\min_{\beta}||Y – X\beta||_{2}^{2}
]
其中,(Y)是目标向量,(X)是自变量矩阵,(\beta)是待求的回归系数。而岭回归在这个基础上,通过加入L2正则化项,得到岭回归的目标函数:
[
\min_{\beta}||Y – X\beta||{2}^{2} + \alpha||\beta||{2}^{2}
]
其中,(\alpha)是正则化参数,用来控制模型的复杂度。岭回归的核心就是通过调整(\alpha)的值,来调节模型的拟合程度。
岭回归的正规方程解为:
[
\hat{\beta} = (X^{T}X + \alpha I)^{-1}X^{T}Y
]
其中,(\hat{\beta})是回归系数的估计值,(I)是单位矩阵。
使用岭回归
Python中,可以使用scikit-learn
库的Ridge
类来进行岭回归。首先,需要通过numpy
库生成一个样本数据集,以便于后续演示:
import numpy as np
# 设置随机种子,保证每次运行时生成的随机数一致
np.random.seed(0)
# 生成100个样本,每个样本有20个特征
X = np.random.rand(100, 20)
# 生成一个长度为20的正态分布随机向量作为真实的回归系数
true_coefs = np.random.randn(20)
# 生成目标向量 Y,加入一些正态分布噪声
Y = np.dot(X, true_coefs) + 0.1 * np.random.randn(100)
接下来,我们可以使用岭回归对数据进行拟合:
from sklearn.linear_model import Ridge
# 创建岭回归模型,设定正则化参数 alpha
ridge = Ridge(alpha=0.5)
# 拟合数据
ridge.fit(X, Y)
# 输出回归系数的估计值
print(ridge.coef_)
运行结果如下所示:
[ 0.30049691 -0.11354442 -0.12198575 0.47743167 -0.03919445 -0.19152298
-0.1480566 -0.06405634 0.11073676 0.04316857 0.13683902 -0.10763408
-0.20626686 -0.11023255 0.10773401 0.06773712 0.00451362 0.04771604
-0.10104822 -0.11023145]
正则化参数的选择
正则化参数(\alpha)的选择对岭回归模型的效果有重要影响。较小的(\alpha)值会导致模型拟合训练数据得较好,但可能会过拟合;较大的(\alpha)值会导致模型过于简单,欠拟合训练数据。
为了选择合适的(\alpha)值,可以使用交叉验证(Cross-validation)的方法。scikit-learn
提供了RidgeCV
类,可以自动选择合适的(\alpha)值:
from sklearn.linear_model import RidgeCV
# 创建岭回归模型,并设定一系列备选的 alpha 值
ridge_cv = RidgeCV(alphas=[0.1, 1.0, 10.0])
# 拟合数据
ridge_cv.fit(X, Y)
# 输出选择的最佳 alpha 值
print(ridge_cv.alpha_)
运行结果如下所示:
0.1
结论
岭回归是一种常用的线性回归方法,通过引入L2正则化避免多重共线性问题。通过调节正则化参数(\alpha)的值,可以控制模型的拟合程度。在实际应用中,可以使用交叉验证等方法选择合适的(\alpha)值。