我有一个classic linear形式的回归问题:
y = X b
其中y
是响应向量X
是输入变量的矩阵,而b
是我正在搜索的拟合参数的向量。
Python提供b = numpy.linalg.lstsq( X , y )
来解决此表单的问题。
然而,当我使用这个时,我倾向于为b
的组成部分得到非常大或非常小的值。
我想执行同样的拟合,但是将b
的值限制在0到255之间。
看起来scipy.optimize.fmin_slsqp()
是一个选项,但我发现对于我感兴趣的问题的大小来说,它的速度非常慢(X
类似于3375 by 1500
,希望甚至更大)。
b
系数值?
最近的scipy版本包括一个解算器:
https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.lsq_linear.html#scipy.optimize.lsq_linear
scipy-optimize-leastsq-with-bound-constraints 在SO上给出leatsq_界,即scipy leastsq +绑定约束,如0<;=x&u i<;=255。
(Scipy leatsq包装MINPACK,广泛使用的 Levenberg–Marquardt algorithm a、 k.a.阻尼最小二乘法。
实现边界的方法有很多种;至少我认为边界是最简单的。)
你提到你会发现套索回归或脊回归是可以接受的。在scikit-learn包中提供了这些和许多其他约束线性模型。查看section on generalized linear models。
通常约束系数涉及某种正则化参数(C或alpha)——一些模型(以CV结尾的模型)可以使用交叉验证来自动设置这些参数。您还可以进一步约束模型,使其仅使用正系数——例如,套索模型上有一个这样的选项。
相关问题 更多 >
编程相关推荐