在机器学习的回归问题中,我们常常需要找到一个合适的模型来拟合数据,并且希望这个模型具有良好的泛化能力。普通最小二乘法(OLS)是一种常用的线性回归方法,但它有时会出现过拟合的问题,特别是当特征数量较多时。为了解决这个问题,正则化方法应运而生,Lasso 回归就是其中一种非常有效的带约束的回归算法。
普通线性回归的目标是最小化残差平方和(RSS),其数学表达式为:
[RSS(\beta)=\sum{i = 1}^{n}(y_i-\beta_0-\sum{j = 1}^{p}\betajx{ij})^2]
其中,(n) 是样本数量,(p) 是特征数量,(yi) 是第 (i) 个样本的真实值,(\beta_j) 是第 (j) 个特征的系数,(x{ij}) 是第 (i) 个样本的第 (j) 个特征值。
Lasso 回归在普通线性回归的基础上加入了 (L1) 正则化项,其目标函数为:
[L(\beta)=\sum{i = 1}^{n}(y_i-\beta_0-\sum{j = 1}^{p}\betajx{ij})^2+\lambda\sum_{j = 1}^{p}|\beta_j|]
其中,(\lambda) 是正则化参数,用于控制正则化的强度。(L1) 正则化项的作用是使得一些特征的系数变为 0,从而实现特征选择的目的。
与 (L2) 正则化(如 Ridge 回归)不同,(L1) 正则化具有使某些系数严格为 0 的特性。这是因为 (L1) 正则化的约束区域是一个菱形,在求解最优解时,最优解更容易落在坐标轴上,从而使得对应的特征系数为 0。
下面我们使用 Python 的 scikit-learn
库来演示 Lasso 回归的使用。
import numpy as np
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.linear_model import Lasso
from sklearn.metrics import mean_squared_error
# 生成数据集
X, y = make_regression(n_samples=100, n_features=10, noise=0.5, random_state=42)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建 Lasso 回归模型
lasso = Lasso(alpha=0.1) # alpha 相当于正则化参数 lambda
# 训练模型
lasso.fit(X_train, y_train)
# 预测
y_pred = lasso.predict(X_test)
# 计算均方误差
mse = mean_squared_error(y_test, y_pred)
print(f"均方误差: {mse}")
# 查看系数
print("模型系数:", lasso.coef_)
正则化参数 (\lambda)(在 scikit-learn
中用 alpha
表示)的选择对 Lasso 回归的性能至关重要。我们可以使用交叉验证来选择最优的 (\lambda) 值。
from sklearn.linear_model import LassoCV
# 创建 LassoCV 模型,使用 5 折交叉验证
lasso_cv = LassoCV(alphas=np.logspace(-4, 4, 100), cv=5)
# 训练模型
lasso_cv.fit(X_train, y_train)
# 输出最优的 alpha 值
print("最优的 alpha 值:", lasso_cv.alpha_)
# 预测
y_pred_cv = lasso_cv.predict(X_test)
# 计算均方误差
mse_cv = mean_squared_error(y_test, y_pred_cv)
print(f"交叉验证后的均方误差: {mse_cv}")
算法 | 目标函数 | 特征选择 | 处理多重共线性 | 参数调优 |
---|---|---|---|---|
普通线性回归 | 最小化残差平方和 | 无 | 差 | 无 |
Lasso 回归 | 残差平方和 + (L1) 正则化项 | 有 | 差 | 需要选择合适的 (\lambda) |
Lasso 回归是一种非常实用的回归算法,它通过加入 (L1) 正则化项,实现了特征选择的目的,提高了模型的可解释性和泛化能力。在实际应用中,我们需要根据具体问题选择合适的正则化参数 (\lambda),以获得最优的模型性能。