Python 如何生成系数>;套索回归或任何其他方法中的0?

Python 如何生成系数>;套索回归或任何其他方法中的0?,python,scikit-learn,linear-regression,coefficients,lasso-regression,Python,Scikit Learn,Linear Regression,Coefficients,Lasso Regression,我正在运行以下代码以生成所有正系数: from sklearn.linear_model import Lasso pos = Lasso(positive=True) pos.fit(X,y) list(pos.coef_) 上面的代码给了我正系数或“0”,但我需要所有的都是积极的,有一些积极的影响 要求=所有正系数(系数不应为零(0)) 如何执行上述任务?套索不求解l0-惩罚最小二乘法,而是求解l1-惩罚最小二乘法。对于alpha=0.01得到的解决方案是Lasso解决方案(对于特征#1

我正在运行以下代码以生成所有正系数:

from sklearn.linear_model import Lasso

pos = Lasso(positive=True)
pos.fit(X,y)
list(pos.coef_)
上面的代码给了我正系数或“0”,但我需要所有的都是积极的,有一些积极的影响

要求=所有正系数(系数不应为零(0))


如何执行上述任务?

套索不求解
l0
-惩罚最小二乘法,而是求解
l1
-惩罚最小二乘法。对于
alpha=0.01
得到的解决方案是Lasso解决方案(对于特征#10,单个非零系数为~0.245)

lasso = Lasso(alpha=1, positive=True)
lasso_coeff['Coefficient Estimates] = pd.Series(lasso.coef_)
print(lasso_coeff)

# The above set of lines will force the coefficients to positive.
即使您的解决方案的平方重建误差为
0.0
,它仍然会受到
1.0
(乘以alpha)的惩罚

对于
alpha=1.0
的套索,解决方案的小平方重建误差为
0.04387
(除以
2*n_样本==6
),较小的
l1
惩罚为
0.245
(乘以alpha)

通过lasso最小化的目标函数在文档字符串中给出:

总结常用于正则化最小二乘回归的不同先验(或惩罚):

  • l2
    惩罚有利于任意数量的非零系数,但具有非常高的 小绝对值(接近零)

  • l1
    惩罚有利于少量非零系数
    小的绝对值

  • l0
    支持任何绝对值的少量非零系数
    价值观


l0
由于是非凸的,它通常不像
l1
l2
那样容易优化。这就是为什么人们在实践中使用
l1
(套索)或
l1+l2
(弹性网)来寻找稀疏的解决方案,即使没有
l0

那么干净。你可以尝试去除回归系数为零的因素,然后再次运行回归(特征消除)。零的值具有从回归中隐式删除特征的效果,因此这也会产生相同的效果。@JamesPhillips,谢谢,但您是否可以通过一些基本代码提供一些示例?例如:我们将因子X1、X2和X3与Y进行回归,如方程“Y=aX1+bX2+cX3”中所示。在本例中,回归为我们提供了参数a、b和c的值,参数c等于0.0。这意味着无论我们对X3使用什么,“c*X3”的值每次都是零,并且对我们的计算没有影响。我们可以简单地从回归中删除X3,得到与保留它相同的结果。