如何对 np.linalg.lstsq 强制增加系数约束

问题描述 投票:0回答:1

我有一个线性方程组

我需要找到最小化最小二乘误差的x

x 中元素增加正值的约束;

使用 np.linalg.lstsq 函数(numpy 版本“1.14.2”,python“3.6.5”)我无法对系数设置任何约束,即。 e.


>>> A = np.array([[4.737, 4.673, 4.664, 4.614, 4.614],
       [4.491, 4.377, 4.38 , 4.401, 4.406],
       [2.496, 1.689, 1.68 , 1.62 , 1.64 ],
       [3.461, 3.136, 2.816, 2.723, 2.551],
       [2.814, 2.4  , 2.444, 2.423, 2.436]])

>>> y = np.array([4.90909091, 4.86363636, 1.86363636, 2.63636364, 3.63636364])

>>> x = np.linalg.lstsq(A, y)
>>> x[0]
array([  1.27108078, -22.41177441,  20.48017772,  37.03891117,
       -35.2836762 ])

虽然我希望 c[0] 的值不断增加

我知道我也可以使用 scipy.optimize.nnls 来获得正系数,但这不会处理“递增系数”约束。

python python-3.x optimization linear-regression least-squares
1个回答
0
投票

您可以在不执行任何特殊操作的情况下获得所获得的结果,然后对系统的列进行重新排序,以便新的解决方案实际上与第一个解决方案相同,以递增的顺序显示系数。

© www.soinside.com 2019 - 2024. All rights reserved.