如何解决为什么sklearn的套索系数不等于线性回归系数?
我正在尝试在我的代码中实现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,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_
也都不同。
我在做什么错了?
解决方法
实际上,这似乎会产生不同的结果。但是,运行代码也会产生以下警告:
ft = Lasso(alpha=0).fit(X,y)
print(ft.intercept_)
ft = LinearRegression().fit(X,y)
print(ft.intercept_)
-485.3744897927984
-480.89071679937854
UserWarning:在alpha = 0时,此算法无法很好地收敛。建议您使用LinearRegression估算器
这让您知道自alpha=0
以来,这意味着我们只剩下普通的线性回归,因此该算法无法很好地收敛。这就是为什么您会看到截距有所不同,并且可能导致指标恶化的原因。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。