Answers:
您正在寻找的是非负最小二乘回归。这是二次规划中的一个简单优化问题,您的约束是所有系数(即权重)都应为正。
话虽如此,在Scikit-Learn中没有标准的非负最小二乘法。拉取请求仍处于打开状态。
但是,看起来Scipy已经实现了同样的功能。
PS:我还没有尝试过Scipy版本。我完全是通过谷歌搜索发现它的。
我在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)
这是为什么您要这样做的示例(以及大概的做法)。
我有三种房价预测模型:线性,梯度提升,神经网络。
我想将它们混合成一个加权平均值并找到最佳权重。
我运行线性回归,然后得到权重为-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参数设置得尽可能低,以获取合理的答案。