【问题标题】:Why does sklearn's Lasso coefficients not equal to Linear Regression ones?为什么 sklearn 的 Lasso 系数不等于线性回归系数?
【发布时间】:2021-02-18 11:31:32
【问题描述】:

我正在尝试在我的代码中实现 sklearn 的套索。为了测试它,我决定使用alpha = 0 进行测试。根据定义,这应该产生与LinearRegression 相同的结果,但事实并非如此。
代码如下:

import pandas as pd
from sklearn.linear_model import Lasso
from sklearn.linear_model import LinearRegression

# Don't worry about this. It is made so that we can work with the same dataset.
df = pd.read_csv('http://web.stanford.edu/~oleg2/hse/Credit.csv').dropna()
df['Asian'] = df.Ethnicity=='Asian'
df['Caucasian'] = df.Ethnicity=='Caucasian'
df['African American'] = df.Ethnicity=='African American'
df = df.drop(['Ethnicity'],axis=1).replace(['Yes','No','Male','Female',True,False],[1,0,1,0,1,0])
# End of unimportant part

ft = Lasso(alpha=0).fit(x, df.Balance)
print(ft.intercept_)
ft = LinearRegression().fit(x, df.Balance)
print(ft.intercept_)

输出:

-485.3744897927978
-480.89071679937786

coef_s 也各不相同。

我做错了什么?

【问题讨论】:

    标签: python machine-learning scikit-learn lasso-regression


    【解决方案1】:

    确实,这似乎产生了不同的结果。但是,运行您的代码,也会产生以下警告:

    ft = Lasso(alpha=0).fit(X, y)
    print(ft.intercept_)
    ft = LinearRegression().fit(X, y)
    print(ft.intercept_)
    
    -485.3744897927984
    -480.89071679937854 
    

    用户警告:当 alpha=0 时,此算法不能很好地收敛。建议您使用 LinearRegression 估计器

    这让您知道,由于alpha=0,这意味着我们只剩下一个普通的线性回归,算法不会很好地收敛。这就是为什么您会看到截距有所不同,并且可能是指标恶化的原因。

    【讨论】:

    • 你能告诉我们套索中使用的“坐标下降”是什么吗?
    • 不确定套索中使用的实际优化算法是什么,没有@sergey
    • 它们是不同的,因为 LinearRegression 是最小二乘矩阵代数,而 Lasso 是坐标下降。这就是为什么他们建议在 α=0 时使用线性回归(出于数值收敛的原因)。更有趣的是协调体面是什么以及为什么它如此不同
    • @yatu,据我所知,这个值应该是准确的,因为惩罚为零。但无论如何也没关系。它给出的其他 alpha 的系数也到处都是:ibb.co/gDRfgnr
    • docs 中也指出了这一点:“出于数字原因,不建议将alpha = 0Lasso 对象一起使用。鉴于此,您应该使用LinearRegression 对象。”
    猜你喜欢
    • 2018-08-18
    • 2021-02-24
    • 2021-09-20
    • 2016-11-21
    • 2016-10-25
    • 2021-06-19
    • 2021-08-20
    • 1970-01-01
    • 2018-07-27
    相关资源
    最近更新 更多