使用 Python 进行 Lasso 回归:简单问题

Posted

技术标签:

【中文标题】使用 Python 进行 Lasso 回归:简单问题【英文标题】:Lasso Regression with Python: Simple Question 【发布时间】:2019-06-17 09:51:30 【问题描述】:

假设我有一个值表:

df = pd.DataFrame('Y1':[1, 2, 3, 4, 5, 6], 'X1':[1, 2, 3, 4, 5, 6], 'X2':[1, 1, 2, 1, 1, 1], 
              'X3':[6, 6, 6, 5, 6, 4], 'X4':[6, 5, 4, 3, 2, 1])

我想使用所有这些值作为我的测试集进行简单的 Lasso 回归,其中 Y1 是因变量,所有 X1...X4 都是自变量。我试过使用以下方法:

from sklearn.linear_model import Lasso
Lasso(alpha = 0.0001).fit(df, df['Y1'])

但它没有给我想要的系数。我该如何执行这个简单的任务?谢谢。

【问题讨论】:

如果结果不是您想要的,您可能需要对模型进行超调?代码中似乎没有任何错误。我希望你使用model = Lasso(alpha = 0.0001).fit(df, df['Y1']) 然后model.coef_ 来查看系数。 这就是我正在做的,但我仍然没有得到我期望的结果。我希望系数为 [1, 1, 0, 0,-1],但我只是得到 [1, 0, -0, -0, -0] 【参考方案1】:

我认为您不完全理解系数的含义。首先,您不应该在所有变量上回归'Y1'(包括'Y1')。不要在自变量中包含'Y1'

Lasso(alpha = 0.0001).fit(df[['X1','X2','X3','X4']], df['Y1'])

套索只是一种“缩小”线性模型的自变量集的方法(通过尝试找到能够很好地预测因变量的自变量子集)。您需要了解的是线性回归在做什么。请记住,线性回归的目标是创建可用于预测因变量值的线性模型。您可能会提出以下模型(这是您在进行线性回归时要解决的问题 - 特别是您正在解决系数):

Y1 = b1*X1 + b2*X2 + b3*X3 + b4*X4

现在,如果我们使用您建议的系数(留下'Y1'),那么模型将是:

Y1 = Y1 + X1 - X4

但是你很明显可以看出这并不能很好地预测'Y1'。我们可以将模型更改为:

Y1 = Y1

'Y1' 完美地预测了'Y1' (duh)。这就是为什么你的系数输出是[ 1, 0, -0, -0, -0]。但是,这不是我们在运行回归时想要的。就像我之前说的,你想把'Y1' 排除在回归之外。因此,使用您建议的系数并忽略'Y1',您的模型将是:

Y1 = X1 - X4

再次注意,这并不能很好地预测'Y1'(您可以从数据集中测试一些点)。相反,您可以使用以下模型来完美预测'Y1'

Y1 = X1

因此,如果你对'X1','X2','X3','X4' 进行套索回归'Y1',你应该得到[1, 0, 0, 0] 的系数。

【讨论】:

以上是关于使用 Python 进行 Lasso 回归:简单问题的主要内容,如果未能解决你的问题,请参考以下文章

python实现Lasso回归分析(特征筛选建模预测)

手写算法-python代码实现Lasso回归

Python使用sklearn构建lasso回归模型并指定样本权重:即构建带样本权重(sample_weight)的回归模型

使用 Iris 数据集使用 Python 在 R 中重现 LASSO / Logistic 回归结果

sklearn—LinearRegression,Ridge,RidgeCV,Lasso线性回归模型简单使用

用Python实现岭回归算法与Lasso回归算法并处理Iris数据集