Python 中的岭回归(一步一步)
岭回归是当数据中存在多重共线性时我们可以用来拟合回归模型的方法。
简而言之,最小二乘回归试图找到最小化残差平方和 (RSS) 的系数估计:
RSS = Σ(y i – ŷ i )2
金子:
- Σ :希腊符号,意思是和
- y i :第 i 个观测值的实际响应值
- ŷ i :基于多元线性回归模型的预测响应值
相反,岭回归旨在最小化以下因素:
RSS + λΣβ j 2
其中j从 1 到p 个预测变量且 λ ≥ 0。
等式中的第二项称为提款罚金。在岭回归中,我们选择产生尽可能最低的 MSE 检验(均方误差)的 λ 值。
本教程提供了如何在 Python 中执行岭回归的分步示例。
第1步:导入必要的包
首先,我们将导入必要的包以在 Python 中执行岭回归:
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
第2步:加载数据
在此示例中,我们将使用名为mtcars的数据集,其中包含 33 辆不同汽车的信息。我们将使用hp作为响应变量,并使用以下变量作为预测变量:
- 英里/加仑
- 重量
- 拉屎
- 快秒
以下代码展示了如何加载和显示此数据集:
#define URL where data is located
url = "https://raw.githubusercontent.com/Statorials/Python-Guides/main/mtcars.csv"
#read in data
data_full = pd. read_csv (url)
#select subset of data
data = data_full[["mpg", "wt", "drat", "qsec", "hp"]]
#view first six rows of data
data[0:6]
mpg wt drat qsec hp
0 21.0 2.620 3.90 16.46 110
1 21.0 2.875 3.90 17.02 110
2 22.8 2.320 3.85 18.61 93
3 21.4 3.215 3.08 19.44 110
4 18.7 3,440 3.15 17.02 175
5 18.1 3.460 2.76 20.22 105
步骤 3:拟合岭回归模型
接下来,我们将使用 sklearn 的RidgeCV()函数来拟合岭回归模型,并使用RepeatedKFold()函数执行 k 折交叉验证,以找到用于惩罚项的最佳 alpha 值。
注意: Python 中使用术语“alpha”代替“lambda”。
对于此示例,我们将选择 k = 10 倍并重复交叉验证过程 3 次。
另请注意,RidgeCV() 默认情况下仅测试 alpha 值 0、1、1 和 10。但是,我们可以将自己的 alpha 范围设置为 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 的 lambda 值为0.99 。
第 4 步:使用模型进行预测
最后,我们可以使用最终的岭回归模型来对新的观测结果进行预测。例如,以下代码显示如何定义具有以下属性的新车:
- 英里/加仑:24
- 重量:2.5
- 价格:3.5
- 秒: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])
根据输入的值,模型预测这辆车的马力值为104.16398018 。
您可以在此处找到本示例中使用的完整 Python 代码。