gpt4 book ai didi

python - sklearn.linear_model.Lasso 不返回平凡的解决方案

转载 作者:太空宇宙 更新时间:2023-11-04 03:26:01 24 4
gpt4 key购买 nike

我认为下面的 Lasso 问题有简单的解决方案 [1,2,0,0] 因为 np.dot(x, [1,2,0,0]) 返回 [[5,7,6,8]]

clf = linear_model.Lasso(alpha=0.2)
x = np.matrix([[1,3,4,2],[2,2,1,3],[2,1,1,1],[3,1,2,2]]).transpose()
y = [5,7,6,8]
clf.fit(x, y)
print clf.coef_
print clf.intercept_

但是,我无法获得[1,2,0,0]。上面的套索代码打印 [0, 0,6, -0.400, -0.399] 和 6.600。

为什么上面的代码没有返回[1,2,0,0]?

最佳答案

scikit-learn 中的默认 LASSO 模型会自动添加一个不受 L1 惩罚控制的截距(直觉上:您不必为大截距付费,而大系数很昂贵由于罚款)。

因此模型将尝试从拦截中获得尽可能多的解释。

如果你想公平,让模型知道没有拦截,并使用非常低的 alpha:

from sklearn import linear_model
import numpy as np

clf = linear_model.Lasso(alpha=0.0001, fit_intercept=False)
x = np.array([[1,3,4,2],[2,2,1,3],[2,1,1,1],[3,1,2,2]], dtype=float).T
y = np.array([5,7,6,8], dtype=float)
clf.fit(x, y)
print(clf.coef_)

那么结果将接近于最优解,而不是惩罚解:

[  1.00000732e+00   1.99959807e+00   2.37193884e-03  -1.07734723e-03]

关于python - sklearn.linear_model.Lasso 不返回平凡的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32981742/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com