我有一个形式的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
,希望更大) .
-
是否还有其他Python选项可用于执行约束最小二乘拟合?
-
或者是否有用于执行Lasso Regression或Ridge回归的python例程或其他一些惩罚大
b
系数值的回归方法?
3 回答
看看:http://scipy-central.org/item/17/3/pymls-solving-bounded-linear-least-squares-problems
Openopt还绑定了bvls,另一个有界线性lsq求解器 .
编辑:你也可以尝试scipy.optimize.nnls就够了 .
你提到你会发现Lasso Regression或Ridge Regression可以接受 . scikit-learn包中提供了这些和许多其他约束线性模型 . 看看section on generalized linear models .
通常约束系数涉及某种正则化参数(C或alpha)---一些模型(以CV结尾的模型)可以使用交叉验证来自动设置这些参数 . 您还可以进一步约束模型以仅使用正系数 - 例如,在Lasso模型上有一个选项 .
SO上的scipy-optimize-leastsq-with-bound-constraints给出了最小的q_bounds,这是scipy leastsq约束约束,例如0 <= x_i <= 255 .
(Scipy leastsq包含了MINPACK,这是广泛使用的Levenberg–Marquardt algorithm a.k.a.阻尼最小二乘法的几种实现之一 .
有各种方法来实现边界; leastsq_bounds是我认为最简单的 . )