我有一个最小二乘误差函数(基于另一个函数),我想将其最小化(基本上是为了获得全局最小化曲线拟合),它看起来像这样:
def err(a, b, X, Y):
return np.sum((f(a, b, X)-Y)**2)
与 X
是 f
点的数组被评估,取决于参数 a
和 b
, 和 Y
作为 X
中定义的点的“基本事实” .
现在根据我在问题中找到的25206482和 31388319语法应如下所示:
Xc = np.array([1.0, 2.0, 3.0, 4.0, 5.0]) # points at which to evaluate error function
Yc = np.array([0.2, 0.4, 0.8, 0.12, 0.15]) # ground truth
g0 = np.array([1.0, 3.0]) # initial guess for a and b
res = scipy.optimize.minimize(err, g0, args=(Xc, Yc), method="Powell")
不幸的是,我收到以下错误消息:
TypeError: err() takes exactly 4 arguments (3 given)
如果我删除 Xc
或 Yc
从元组中,给出的参数数量减少了,所以我怀疑它在 g0
的定义中的某个地方。 ,因为这似乎传递给了 err
作为单个参数。
如何调用 minimize
如果我有多个用于优化的参数和我想在优化期间传递给我的函数的附加“常量”参数,是否正确?
最佳答案
minimize
只操作一个参数,但这可以是一个数组。你要做的是从 err
中的第一个参数中提取 a
和 b
:
def err(p, X, Y):
a, b = p
return np.sum((f(a, b, X)-Y)**2)
关于python - 在多个参数上使用 scipy minimize 时将常量参数传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45326876/