我试图用最小二乘法通过改变x,y,z来最小化损失函数。我的问题是非线性的,因此我选择了scipy least_squares。一般结构是:
from scipy.optimize import least_squares
def loss_func(x, *arguments):
# plug x's and args into an arbitrary equation and return loss
return loss # loss here is an array
# x_arr contains x,y,z
res = least_squares(loss_func, x_arr, args=arguments)
我尝试通过以下方式约束x、y、z:x-y =某个值,z-y =某个值。我该怎么做呢?scipy least_squares文档只提供了边界。我知道我可以创建像0〈x〈5这样的边界。但是,我的约束条件是一个方程,而不是一个常数边界。提前感谢!
1条答案
按热度按时间e37o9pze1#
如果有人碰到这个问题,我已经找到了解决这个问题的方法。由于least_squares没有约束,最好使用linear programming和scipy.optimize.minimize。由于
loss_func
返回一个残差数组,我们可以使用L1 norm(因为我们想最小化这个残差数组的绝对差)。可以相当容易地将边界添加到scipy.optimize.minimize中:)