Lasso回归、岭回归和弹性网络回归

本文介绍了正则化在机器学习中的重要性,特别是Lasso回归(L1正则化)通过设置一些特征权重为零实现变量选择;岭回归(L2正则化)通过减小共线性影响提供稳定性;弹性网络结合两者,平衡稀疏性和正则化。实例演示了如何在Python中使用这些方法进行数据建模。

逻辑回归正则化一文中,我们详细解释了正则化的原理及作用:当有很多个特征X时,有些特征往往不重要,所以需要降低其的权重。而正则化则是为每个特征修改权重从而提升训练效果。

正则化在线性回归中也是相同的原理,我们还记得正则化分成了两种:L1正则化和L2正则化,两者的区别就是L1将某些特征的权重设为了0,而L2中则以一个极小的权重保留了特征。

在线性回归中,添加正则化有具体的回归名称分别是:Lasso回归(L1)、岭回归(L2)和弹性网络回归(L1和L2中和)。

Lasso回归(L1正则化)

Lasso回归,即最小绝对收缩和选择算子,是另一种使用收缩的线性回归方法。Lasso过程鼓励简单、稀疏的模型(即,参数更少的模型)。

通过引入一个惩罚项到OLS方程,该惩罚项限制了系数绝对值的和:
Lasso回归 : min ⁡ β { ∑ i = 1 n ( y i − ∑ j = 1 p x i j β j ) 2 + λ ∑ j = 1 p ∣ β j ∣ } \text{Lasso回归} : \min_{\beta} \{ \sum_{i=1}^{n}(y_i - \sum_{j=1}^{p}x_{ij}\beta_j)^2 + \lambda\sum_{j=1}^{p}|\beta_j| \} Lasso回归:βmin{i=1n(yij=1pxijβj)2+λj=1pβj}
Lasso惩罚的效果是在调节参数 λ \lambda λ足够大时,强制某些系数估计值精确地为零。这意味着Lasso也可以进行变量选择,并能产生更易于解释的模型。

岭回归(L2正则化)

岭回归也被称为Tikhonov正则化,它是用于分析存在多重共线性的多元回归数据的技术。当存在多重共线性时,最小二乘估计是无偏的,但它们的方差很大,因此可能会远离真实值。通过对回归估计添加一定程度的偏差,岭回归可以减小标准误差。

岭回归的关键在于向普通最小二乘(OLS)方程添加一个惩罚项:
岭回归 : min ⁡ β { ∑ i = 1 n ( y i − ∑ j = 1 p x i j β j ) 2 + λ ∑ j = 1 p β j 2 } \text{岭回归} : \min_{\beta} \{ \sum_{i=1}^{n}(y_i - \sum_{j=1}^{p}x_{ij}\beta_j)^2 + \lambda\sum_{j=1}^{p}\beta_j^2 \} 岭回归:βmin{i=1n(yij=1pxijβj)2+λj=1pβj2}

这里, λ \lambda λ是调节参数,决定了我们希望对模型的灵活性进行多大程度的惩罚。当 λ \lambda λ的值越大时,缩减作用越强,因此系数对共线性的鲁棒性就越强。

弹性网络回归

弹性网络是岭回归和Lasso回归的折中。它在多个特征彼此相关时特别有用。

弹性网络旨在保持L2和L1惩罚项的正则化属性:
弹性网络 : min ⁡ β { ∑ i = 1 n ( y i − ∑ j = 1 p x i j β j ) 2 + λ 1 ∑ j = 1 p β j 2 + λ 2 ∑ j = 1 p ∣ β j ∣ } \text{弹性网络} : \min_{\beta} \{ \sum_{i=1}^{n}(y_i - \sum_{j=1}^{p}x_{ij}\beta_j)^2 + \lambda_1\sum_{j=1}^{p}\beta_j^2 + \lambda_2\sum_{j=1}^{p}|\beta_j| \} 弹性网络:βmin{i=1n(yij=1pxijβj)2+λ1j=1pβj2+λ2j=1pβj}
该模型建立在L1和L2惩罚项之间的平衡之上,由 λ 1 \lambda_1 λ1 λ 2 \lambda_2 λ2调节。这种平衡允许学习一个像Lasso那样的稀疏模型,同时还保持了岭回归的正则化属性。

这里整理一下三个回归的代码,数据使用天池工业蒸汽量预测,得分仅针对本数据参考,不代表算法优劣:

Lasso回归score:1.0877
from sklearn.linear_model import Lasso
import numpy as np

# Load the datasets
train_data = pd.read_csv('zhengqi_train.txt', sep='\t')
test_data = pd.read_csv('zhengqi_test.txt', sep='\t')

# Split the training data into features and target
X_train = train_data.drop(columns=['target'])
y_train = train_data['target']

# 创建Lasso回归模型实例
lasso_model = Lasso(alpha=1.0)  # alpha 参数就是λ

# 拟合模型
lasso_model.fit(X_train, y_train)

# 预测新数据
predictions = lasso_model.predict(test_data)

output_path = 'zhengqi_gb_predictions.txt'
pd.DataFrame(predictions).to_csv(output_path, index=False, header=False)
Ridge回归(岭回归)score:2.8139
from sklearn.linear_model import Ridge
import numpy as np

# Load the datasets
train_data = pd.read_csv('zhengqi_train.txt', sep='\t')
test_data = pd.read_csv('zhengqi_test.txt', sep='\t')

# Split the training data into features and target
X_train = train_data.drop(columns=['target'])
y_train = train_data['target']

# 创建岭回归模型实例
ridge_model = Ridge(alpha=1.0)  # alpha 参数就是λ

# 拟合模型
ridge_model.fit(X_train, y_train)

# 预测新数据
predictions = ridge_model.predict(test_data)

# Save the predictions to a text file
output_path = 'zhengqi_gb_predictions.txt'
pd.DataFrame(predictions).to_csv(output_path, index=False, header=False)

弹性网络回归score:0.5922
from sklearn.linear_model import ElasticNet
import numpy as np

# Load the datasets
train_data = pd.read_csv('zhengqi_train.txt', sep='\t')
test_data = pd.read_csv('zhengqi_test.txt', sep='\t')

# Split the training data into features and target
X_train = train_data.drop(columns=['target'])
y_train = train_data['target']

# 创建弹性网络回归模型实例
elastic_model = ElasticNet(alpha=1.0, l1_ratio=0.5)  # alpha 参数是λ,l1_ratio 是 L1 正则化比例

# 拟合模型
elastic_model.fit(X_train, y_train)

# 预测新数据
predictions = elastic_model.predict(test_data)

output_path = 'zhengqi_gb_predictions.txt'
pd.DataFrame(predictions).to_csv(output_path, index=False, header=False)
### Lasso 回归岭回归的区别及应用场景 #### 定义与目标 Lasso 回归(Least Absolute Shrinkage and Selection Operator)岭回归(Ridge Regression)都属于正则化方法,旨在解决多重共线性过拟合问题。然而,它们的核心区别在于如何处理特征权重。 - 岭回归通过向损失函数添加 \(L_2\) 正则项来缩小系数的大小[^1]。这有助于减少模型复杂度并提高泛化能力。 - Lasso 回归则是通过引入 \(L_1\) 正则项实现稀疏解,即某些特征的系数会被直接缩减至零。 #### 数学表达形式 两种方法都可以看作是对标准最小二乘法的一种扩展: 对于岭回归,其优化目标可以表示为: \[ \min_{w} \left( \|Xw - y\|_2^2 + \lambda \|w\|_2^2 \right) \] 而对于 Lasso 回归,则有: \[ \min_{w} \left( \|Xw - y\|_2^2 + \lambda \|w\|_1 \right) \] 其中,\(X\) 是数据矩阵,\(y\) 是标签向量,\(w\) 表示参数向量,而 \(\lambda\) 控制着正则化的强度[^2]。 #### 特征选择的能力 由于采用不同的范数约束方式,在实际应用中两者表现出显著差异: - **Lasso** 更适合于高维数据集中的自动特征选择场景,因为它能够有效地将不重要变量对应的权值设为0。 - 相较之下,尽管 **Ridge** 可以降低所有系数绝对值从而缓解多共线性影响,但它不会完全消除任何单一维度的影响。 #### 应用案例分析 当面临具体任务时需考虑如下因素决定选用哪种技术更佳: - 如果预期只有少数几个强相关因子主导输出变化趋势的话,Lasso可能是更好的选项因为它的特性允许构建简洁明了易于解释的模型结构. - 对那些存在广泛相互作用或者几乎所有输入都有贡献程度各异的情况来说,Ridge往往表现得更为稳健可靠一些. 另外值得注意的是,有时候也可以尝试组合这两种策略形成弹性网络(Elastic Net),它综合了两者的优点既保留了一定水平上的压缩效果又具备一定程度的选择功能. ```python from sklearn.linear_model import Ridge, Lasso import numpy as np # Example usage of Ridge Regression ridge = Ridge(alpha=1.0) ridge.fit(X_train, y_train) # Example usage of Lasso Regression lasso = Lasso(alpha=0.1) lasso.fit(X_train, y_train) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值