Python 中的套索回归(一步一步)
当数据中存在多重共线性时,套索回归是一种可以用来拟合回归模型的方法。
简而言之,最小二乘回归试图找到最小化残差平方和 (RSS) 的系数估计:
RSS = Σ(y i – ŷ i )2
金子:
- Σ :希腊符号,意思是和
- y i :第 i 个观测值的实际响应值
- ŷ i :基于多元线性回归模型的预测响应值
相反,套索回归旨在最小化以下因素:
RSS + λΣ|β j |
其中j从 1 到p 个预测变量且 λ ≥ 0。
等式中的第二项称为提款罚金。在套索回归中,我们选择产生尽可能最低的 MSE(均方误差)测试的 λ 值。
本教程提供了如何在 Python 中执行套索回归的分步示例。
第1步:导入必要的包
首先,我们将导入必要的包以在 Python 中执行 lasso 回归:
import pandas as pd
from numpy import arange
from sklearn. linear_model import LassoCV
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 的LassoCV()函数来拟合 lasso 回归模型,并使用RepeatedKFold()函数执行 k 折交叉验证,以找到用于惩罚项的最佳 alpha 值。
注意: Python 中使用术语“alpha”代替“lambda”。
对于此示例,我们将选择 k = 10 倍并重复交叉验证过程 3 次。
另请注意,LassoCV() 默认情况下仅测试 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 = LassoCV(alphas= arange (0, 1, 0.01), cv=cv, n_jobs= -1 ) #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 lasso regression model
model. predict ([new])
array([105.63442071])
根据输入的值,模型预测这辆车的马力值为105.63442071 。
您可以在此处找到本示例中使用的完整 Python 代码。