仅使用 Numpy 和 Python 进行约束最小二乘法

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

如何仅使用

numpy
进行约束最小二乘法。有没有办法将约束合并到
numpy.linalg.lstsq()
中,或者是否有任何
numpy
+Python 解决方法来执行约束最小二乘法?我知道我可以使用
cvxpy
scipy.optimize
轻松完成此操作,但此优化将是
numba
JITed 函数的一部分,而
numba
不支持这两个。

python numpy mathematical-optimization numba least-squares
1个回答
0
投票

是线性的吗?根据您的

numpy.linalg.lstsq
建议,我现在假设是这样。另外,我假设(首先解决简单的情况)您谈论了等式约束。然后你可以很容易地使用拉格朗日乘子自己求解,并且可以通过求解线性方程组来找到解。

如果问题是在约束

A * x - y
上最小化
B * x = b
,则解决

举个例子:

from numpy import array, zeros
from numpy.linalg import solve

A = array([[1, 2], [3, 4], [5, 6], [7, 8]])
y = array([3.2, 6.8, 11.1, 15.2])

B = array([[1, -1]])
b = array([0.1])

S = zeros((3, 3))
r = zeros(3)

S[:2, :2] = A.T @ A
S[2:, :2] = B
S[:2, 2:] = B.T
r[:2] = A.T @ y
r[2] = b

x = solve(S, r)[:2]
print(x)

免责声明:可能包含错误,但简短的测试给了我

x

[1.06262376 0.96262376]

这看起来很合理,我的约束 x1 - x2 = 0.1 也满足了。

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