如何在套索回归或任何其他方法中生成系数 >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 是非凸的,它通常不像l1l2 那样容易优化。这就是为什么人们在实践中使用l1(套索)或l1 + l2(弹性网)来寻找稀疏解决方案,即使不如l0干净。

【讨论】:

以上是关于如何在套索回归或任何其他方法中生成系数 >0?的主要内容,如果未能解决你的问题,请参考以下文章

线性模型系数解读中的那些坑,以套索回归(LASSO)和岭回归(Ridege)为例

按降序列出模型系数

如何在 Matlab 中生成两个具有给定相关系数的 Weibull 随机向量?

如何将套索和岭回归拟合(Glmnet)叠加到数据上?

运行套索回归方法时出错

如何仅在 ES2015 中生成从 0 到 n 的数字范围?