如何在套索回归或任何其他方法中生成系数 >0?
Posted
技术标签:
【中文标题】如何在套索回归或任何其他方法中生成系数 >0?【英文标题】:How to generate Coefficient >0 in lasso regression or any other method? 【发布时间】:2020-01-15 00:29:47 【问题描述】:我在下面运行代码来生成所有正系数:
from sklearn.linear_model import Lasso
pos = Lasso(positive=True)
pos.fit(X,y)
list(pos.coef_)
上面的代码给了我正系数或“0”,但我需要所有的都是积极的,并产生一些积极的影响。
要求 = 所有正系数(系数不应为零(0))
我该如何执行上述任务?
【问题讨论】:
您可以尝试删除回归系数为零的因素,然后再次重新运行回归(特征消除)。零值具有从回归中隐式删除特征的效果,因此这将具有相同的效果。 @JamesPhillips,谢谢您,但是您可以通过一些基本代码提供一些示例吗? 例如:我们将因子 X1、X2 和 X3 针对 Y 进行回归,如等式“Y = aX1 + bX2 + cX3”。在此示例中,回归为我们提供了参数 a、b 和 c 的值,其中参数 c 等于 0.0。这意味着无论我们对 X3 使用什么,“c * X3”的值每次都是零,对我们的计算没有影响。我们可以简单地从回归中移除 X3 并得到与保留它相同的结果。 【参考方案1】: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.
【讨论】:
【参考方案2】:Lasso 不解决 l0
-penalized 最小二乘,而是解决 l1
-penalized 最小二乘。您为 alpha=0.01
获得的解决方案是 Lasso 解决方案(对于功能 #10,具有 ~0.245 的单个非零系数)。
即使您的解决方案的平方重建误差为0.0
,它仍然有1.0
(乘以alpha)的惩罚。
带有alpha=1.0
的套索解决方案具有较小的平方重建误差0.04387
(除以2 * n_samples == 6
)和较小的l1
惩罚0.245
(乘以alpha)。
lasso 最小化的目标函数在文档字符串中给出:
http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Lasso.html
总结通常用于正则化最小二乘回归的不同先验(或惩罚):
l2
惩罚有利于任意数量的非零系数,但非常
小绝对值(接近于零)
l1
惩罚有利于少数非零系数
绝对值小。
l0
支持任何绝对值的少量非零系数
价值。
l0
是非凸的,它通常不像l1
和l2
那样容易优化。这就是为什么人们在实践中使用l1
(套索)或l1 + l2
(弹性网)来寻找稀疏解决方案,即使不如l0
干净。
【讨论】:
以上是关于如何在套索回归或任何其他方法中生成系数 >0?的主要内容,如果未能解决你的问题,请参考以下文章
线性模型系数解读中的那些坑,以套索回归(LASSO)和岭回归(Ridege)为例