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,得到与保留它相同的结果。