Python中的约束最小二乘估计

15 投票
4 回答
25290 浏览
提问于 2025-04-17 12:59

我想用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维的情况下;你有多少个变量呢?

撰写回答