如何在线性回归中强制权重为非负数


27

我在python中使用scikit-learn使用标准线性回归。但是,我想强制每个功能的权重全部为正(而不是负),有什么办法可以实现?我正在查看文档,但找不到实现此目的的方法。我知道我可能无法获得最佳解决方案,但我需要权衡不可为负。

Answers:



15

我在Scikit Learn上使用了Lasso的变通方法(这绝对不是最好的处理方法,但是效果很好)。套索具有positive可以设置为True并强制系数为正的参数。此外,将正则化系数设置为alpha接近0会使Lasso模拟线性回归而没有正则化。这是代码:

from sklearn.linear_model import Lasso
lin = Lasso(alpha=0.0001,precompute=True,max_iter=1000,
            positive=True, random_state=9999, selection='random')
lin.fit(X,y)

0

这是为什么您要这样做的示例(以及大概的做法)。

我有三种房价预测模型:线性,梯度提升,神经网络。

我想将它们混合成一个加权平均值并找到最佳权重。

我运行线性回归,然后得到权重为-3.1、2.5、1.5和一些截距的解决方案。

所以我代替使用sklearn是

blendlasso = LassoCV(alphas=np.logspace(-6, -3, 7),
                     max_iter=100000,
                     cv=5,
                     fit_intercept=False,
                     positive=True)

而且我得到的正权重总和(非常接近)为1。在我的示例中,我希望alpha最适合样本外,因此我将LassoCV与交叉验证一起使用。

sklearn文档指出,出于数字原因,不应将alpha设置为0,但是您也可以使用直接的Lasso()并将alpha参数设置得尽可能低,以获取合理的答案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.