您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 怎么在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
# 示例数据(波士顿房价数据集)
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)
# 初始化模型(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_}")
# 初始化模型(可设置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_)}")
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_}")
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()
数据预处理:
StandardScaler
)模型选择:
高级技巧:
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
)
通过本文我们学习了: - 两种正则化回归的数学原理差异 - 使用scikit-learn的完整实现流程 - 超参数调优和结果分析方法 - 实际工程中的注意事项
正则化回归是机器学习工程师工具箱中的基础但强大的工具,合理使用可以显著提升模型性能。 “`
注:实际运行时需要安装相关库(pip install numpy scikit-learn matplotlib
),示例数据在scikit-learn 1.2+版本中已替换为fetch_california_housing()
。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。