Python中的约束最小二乘估计
我想用Scipy进行一个受限的最小二乘估计,要求所有的系数都在(0,1)
的范围内,并且它们的总和等于1
(这个功能在Matlab的LSQLIN
函数中有实现)。
有没有人能给我一些关于如何用Python/Scipy设置这个计算的建议。我觉得我应该使用scipy.optimize.fmin_slsqp()
,但不太确定应该传递哪些参数给它。[1]
非常感谢你的帮助,
Nick
[1] 文档中关于fmin_slsqp
的一个例子对我来说有点难以理解,因为没有参考的文本,而我对使用Scipy还很陌生。
4 个回答
0
因为MATLAB的lsqlin
是一个有边界的线性最小二乘求解器,所以你可以看看scipy.optimize.lsq_linear。
1
看看这个教程吧,内容看起来很清楚。
7
在StackOverflow上,有个帖子提到了一种叫做leastsq_bounds
的东西,它是基于leastsq
的一个优化方法。这个方法可以设置一些限制条件,比如说某个变量的值必须在0到1之间。
另外,如果你想让这些变量的总和等于1,也可以用类似的方式来添加这个限制。
我发现leastsq_bounds
在处理一些虚拟测试函数时表现得很好,尤其是在5维、10维和20维的情况下;你有多少个变量呢?