【发布时间】:2018-01-01 18:31:15
【问题描述】:
我有一个最小二乘误差函数(基于另一个函数),我想最小化(基本上是为了获得全局最小化的曲线拟合),它看起来像这样:
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?
【问题讨论】:
-
使用
err(g0, Xc, Yc)测试您的设置 - 将您的函数评估为初始猜测。如果失败,那么您需要更改err或args元组。