Python 实现Ridge Regression教程

本文介绍如何使用岭回归解决多重线性回归中的多重共线性问题,通过引入收缩惩罚来稳定系数估计并降低方差。以mtcars数据集为例,展示了如何使用Python和sklearn库实现岭回归。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一般多重线性回归,使用p个预测变量和一个响应变量拟合模型,形式如下:

Y = β0+β1X1+β2X2+…+βpXp+ε{β_0 + β_1X_1 + β_2X_2 + … + β_pX_p + ε}β0+β1X1+β2X2++βpXp+ε

参数解释如下:

  • Y: 响应变量
  • Xj{X_j}Xj: 第j个预测变量
  • βj{β_j}βj: 在保持所有其他预测不变的情况下,Xj{X_j}Xj增加一个单位对Y的平均影响
  • ε: 误差项

用最小二乘法选择β0、β1、B2、…、βp{β_0、β_1、B_2、…、β_p}β0β1B2βp的值,以最小化残差平方和(RSS):

RSS = Σ(yi–y^i)2{Σ(y_i – ŷ_i)^2}Σ(yiy^i)2

解释参数如下:

  • Σ: 求和符号
  • yi{y_i}yi: 第i个观测记录的响应值
  • y^i{ŷ_i}y^i: 使用多重线性回归模型基于第i个观测记录的预测值

但是当预测变量高度相关,则会产生多重共线问题,可能导致模型系数估计不可靠、方差较高。

在不删除预测变量的情况下,解决这类问题的一种方法是使用岭回归,它试图使得下面误差最小:

RSS + λΣβj2{λΣβ_j^2}λΣβj2

当j范围从1到p,并且λ ≥ 0; 其中第二项被称为收缩惩罚。当λ = 0时惩罚项没有影响,岭回归与最小二乘法效果一样。然而当λ 变大,收缩惩罚影响加大和岭回归系数估计接近零,使得模型中影响最小的预测变量会以最快的速度趋近于零。

示例

首先导入执行岭回归需要的包:

import pandas as pd
from numpy import arange
from sklearn.linear_model import Ridge
from sklearn.linear_model import RidgeCV
from sklearn.model_selection import RepeatedKFold

加载数据

我们示例数据mtcars,包括33个不同品牌汽车信息,我们使用下面预测变量,hp作为响应变量:

  • mpg
  • wt
  • drat
  • qsec

下面代码加载数据:


# read in data
data_full = pd.read_csv("data/mtcars.csv")

# select subset of data
data = data_full[["mpg", "wt", "drat", "qsec", "hp"]]

# view first six rows of data
data[0:6]

拟合模型

下面使用sklearn包中 RidgeCV() 拟合岭回归模型,并使用 RepeatedKFold() 执行k折交叉验证,发现最佳惩罚项中的λ值。

示例中使用k=10,重复交叉验证3次。RidgeCV() 中定义λ值范围:0~1,每次增加0.01:

# define predictor and response variables
X = data[["mpg", "wt", "drat", "qsec"]]
y = data["hp"]

# define cross-validation method to evaluate model
cv = RepeatedKFold(n_splits=10, n_repeats=3, random_state=1)

# define model
model = RidgeCV(alphas=arange(0, 1, 0.01), cv=cv, scoring='neg_mean_absolute_error')

# fit model
model.fit(X, y)

# display lambda that produced the lowest test MSE
print(model.alpha_)

## 输出0.99

测试MSE的最小化值是0.99

使用模型进行预测

最后使用上面的模型进行预测,预测数据如下:

  • mpg: 24
  • wt: 2.5
  • drat: 3.5
  • qsec: 18.5

下面代码使用岭回归模型预测hp的值:

# define new observation
new = [24, 2.5, 3.5, 18.5]

# predict hp value using ridge regression model
model.predict([new])

# array([104.16398018])

根据输入值,模型预测这辆车的HP值为104.16398018。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值