怎么在Python中执行套索和岭回归

发布时间:2021-12-22 16:13:49 作者:柒染
来源:亿速云 阅读:250
# 怎么在Python中执行套索和岭回归

在机器学习中,**正则化回归**(如套索回归和岭回归)是处理过拟合和特征选择的重要技术。本文将详细介绍如何在Python中使用`scikit-learn`库实现这两种方法。

## 1. 理解套索回归与岭回归

### 1.1 岭回归 (Ridge Regression)
岭回归通过L2正则化(权重平方和)惩罚模型复杂度,其损失函数为:

Loss = MSE + α * Σ(θ_i²)

其中`α`是控制正则化强度的超参数。

### 1.2 套索回归 (Lasso Regression)
套索回归使用L1正则化(权重绝对值之和),能够产生稀疏解(部分系数归零):

Loss = MSE + α * Σ|θ_i|


## 2. Python实现步骤

### 2.1 环境准备
```python
import numpy as np
import pandas as pd
from sklearn.linear_model import Ridge, Lasso
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.preprocessing import StandardScaler

2.2 数据准备

# 示例数据(波士顿房价数据集)
from sklearn.datasets import load_boston
boston = load_boston()
X, y = boston.data, boston.target

# 数据标准化(正则化对尺度敏感)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 划分训练集/测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.3)

2.3 岭回归实现

# 初始化模型(alpha=1.0为默认值)
ridge = Ridge(alpha=1.0)

# 训练模型
ridge.fit(X_train, y_train)

# 预测与评估
y_pred = ridge.predict(X_test)
print(f"Ridge MSE: {mean_squared_error(y_test, y_pred):.2f}")
print(f"Coefficients: {ridge.coef_}")

2.4 套索回归实现

# 初始化模型(可设置tol参数提高收敛精度)
lasso = Lasso(alpha=0.1, max_iter=10000)

# 训练模型
lasso.fit(X_train, y_train)

# 结果分析
print(f"Lasso MSE: {mean_squared_error(y_test, lasso.predict(X_test)):.2f}")
print(f"Non-zero coefficients: {np.sum(lasso.coef_ != 0)}/{len(lasso.coef_)}")

3. 关键参数调优

3.1 交叉验证选择α

from sklearn.linear_model import RidgeCV, LassoCV

# 自动测试多个alpha值
ridge_cv = RidgeCV(alphas=[0.01, 0.1, 1.0, 10.0])
ridge_cv.fit(X_train, y_train)
print(f"Best alpha (Ridge): {ridge_cv.alpha_}")

lasso_cv = LassoCV(alphas=np.logspace(-4, 0, 100), cv=5)
lasso_cv.fit(X_train, y_train)
print(f"Best alpha (Lasso): {lasso_cv.alpha_}")

3.2 正则化路径分析

import matplotlib.pyplot as plt

alphas = np.logspace(-4, 2, 100)
coefs = []

for a in alphas:
    lasso = Lasso(alpha=a)
    lasso.fit(X_scaled, y)
    coefs.append(lasso.coef_)

plt.figure(figsize=(10,6))
plt.plot(alphas, coefs)
plt.xscale('log')
plt.xlabel('Alpha')
plt.ylabel('Coefficients')
plt.title('Lasso Regularization Path')
plt.show()

4. 实际应用建议

  1. 数据预处理

    • 必须进行特征标准化(使用StandardScaler
    • 处理多重共线性问题
  2. 模型选择

    • 需要特征选择时优先使用Lasso
    • 当所有特征都可能相关时使用Ridge
  3. 高级技巧

    • 组合L1/L2正则化的ElasticNet
    • 使用Pipeline构建完整工作流
from sklearn.linear_model import ElasticNet
from sklearn.pipeline import make_pipeline

pipe = make_pipeline(
    StandardScaler(),
    ElasticNet(alpha=0.1, l1_ratio=0.5)  # l1_ratio=1时为纯Lasso
)

5. 总结

通过本文我们学习了: - 两种正则化回归的数学原理差异 - 使用scikit-learn的完整实现流程 - 超参数调优和结果分析方法 - 实际工程中的注意事项

正则化回归是机器学习工程师工具箱中的基础但强大的工具,合理使用可以显著提升模型性能。 “`

注:实际运行时需要安装相关库(pip install numpy scikit-learn matplotlib),示例数据在scikit-learn 1.2+版本中已替换为fetch_california_housing()

推荐阅读:
  1. Python代码怎么在Cloud Studio中执行
  2. 怎么在python中执行精确的小数计算

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python

上一篇:.net core如何集成autofac

下一篇:mysql中出现1053错误怎么办

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》