ISLR-python项目解析:线性模型选择与正则化技术实践

ISLR-python项目解析:线性模型选择与正则化技术实践

ISLR-python An Introduction to Statistical Learning (James, Witten, Hastie, Tibshirani, 2013): Python code ISLR-python 项目地址: https://gitcode.com/gh_mirrors/is/ISLR-python

前言

本文基于ISLR-python项目中的第六章内容,深入探讨线性模型选择与正则化技术在实际数据分析中的应用。我们将通过棒球运动员薪资预测案例,系统讲解Ridge回归、Lasso回归、主成分回归和偏最小二乘回归等方法的Python实现。

数据集介绍

我们使用的数据集包含263名棒球运动员的20个特征指标,包括:

  • 打击数据:AtBat(打数)、Hits(安打数)、HmRun(本垒打)等
  • 跑垒数据:Runs(得分)、RBI(打点)、Walks(保送)等
  • 防守数据:PutOuts(刺杀)、Assists(助杀)、Errors(失误)等
  • 个人信息:Years(职业年限)、Salary(薪资)等
  • 分类变量:League(联盟)、Division(分区)等
df = pd.read_csv('Data/Hitters.csv', index_col=0).dropna()
df.info()

数据预处理

1. 分类变量处理

对于League、Division和NewLeague三个分类变量,我们使用独热编码(One-Hot Encoding)进行转换:

dummies = pd.get_dummies(df[['League', 'Division', 'NewLeague']])

2. 特征工程

构建最终的特征矩阵X和目标变量y:

y = df.Salary
X_ = df.drop(['Salary', 'League', 'Division', 'NewLeague'], axis=1).astype('float64')
X = pd.concat([X_, dummies[['League_N', 'Division_W', 'NewLeague_N']]], axis=1)

正则化回归方法

1. Ridge回归(岭回归)

Ridge回归通过在损失函数中加入L2正则项来解决线性回归中的过拟合问题:

from sklearn.linear_model import Ridge, RidgeCV

# 设置lambda参数范围
alphas = 10**np.linspace(10,-2,100)*0.5

# 交叉验证选择最佳alpha
ridge_cv = RidgeCV(alphas=alphas, scoring='neg_mean_squared_error')
ridge_cv.fit(X, y)
Ridge回归特点:
  • 保留所有特征变量
  • 通过收缩系数减少模型复杂度
  • 适合特征间存在多重共线性的情况

2. Lasso回归(最小绝对收缩选择算子)

Lasso回归使用L1正则项,可以实现特征选择:

from sklearn.linear_model import Lasso, LassoCV

# Lasso交叉验证
lasso_cv = LassoCV(alphas=alphas, max_iter=10000)
lasso_cv.fit(X, y)
Lasso回归特点:
  • 可以将不重要特征的系数压缩为零
  • 实现自动特征选择
  • 生成更稀疏的模型

降维回归方法

1. 主成分回归(PCR)

PCR先对数据进行主成分分析(PCA),然后对主成分进行回归:

from sklearn.decomposition import PCA
from sklearn.linear_model import LinearRegression

# PCA降维
pca = PCA()
X_pca = pca.fit_transform(scale(X))

# 主成分回归
regr = LinearRegression()
regr.fit(X_pca[:,:10], y)
PCR特点:
  • 解决多重共线性问题
  • 降维减少噪声影响
  • 可能丢失与响应变量相关的信息

2. 偏最小二乘回归(PLS)

PLS在降维时同时考虑自变量和响应变量的关系:

from sklearn.cross_decomposition import PLSRegression

# PLS回归
pls = PLSRegression(n_components=5)
pls.fit(scale(X), y)
PLS特点:
  • 结合PCA和多元回归优点
  • 寻找与响应变量相关性最强的方向
  • 通常比PCR需要更少的主成分

模型评估与比较

使用交叉验证评估各模型性能:

from sklearn.model_selection import KFold
from sklearn.metrics import mean_squared_error

# 10折交叉验证
kf = KFold(n_splits=10, shuffle=True, random_state=1)

# 计算各模型MSE
mse = []
for model in [ridge_cv, lasso_cv, pcr, pls]:
    scores = cross_val_score(model, X, y, cv=kf, scoring='neg_mean_squared_error')
    mse.append(-scores.mean())

实际应用建议

  1. 数据预处理:标准化处理对正则化方法至关重要
  2. 参数调优:通过交叉验证选择最佳正则化参数
  3. 模型选择
    • 特征数量多且相关性强 → Ridge回归
    • 希望自动特征选择 → Lasso回归
    • 高维数据且关注解释性 → PCR/PLS

总结

本文通过ISLR-python项目中的案例,系统介绍了线性模型选择与正则化技术的Python实现。这些方法为解决实际数据分析中的过拟合、特征选择和降维等问题提供了有力工具。理解各种方法的优缺点,根据具体问题选择合适的模型,是提高预测性能的关键。

ISLR-python An Introduction to Statistical Learning (James, Witten, Hastie, Tibshirani, 2013): Python code ISLR-python 项目地址: https://gitcode.com/gh_mirrors/is/ISLR-python

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纪亚钧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值