在多个参数上使用 scipy 最小化时,将常量参数传递给函数



>我有一个最小二乘误差函数(基于另一个函数(,我想最小化(基本上是为了获得全局最小化的曲线拟合(,它看起来像这样:

def err(a, b, X, Y):
return np.sum((f(a, b, X)-Y)**2)

X是评估f的点数组,取决于参数abYX中定义的点的"基本事实"。

现在根据我在问题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)

如果我从元组中删除XcYc,给出的参数数量会减少,所以我怀疑它在g0定义中的某个地方,因为这似乎作为单个参数传递给err

如果我有多个用于优化的参数以及要在优化期间传递给函数的其他"常量"参数,如何正确调用minimize

minimize只操作单个参数,但这可以是一个数组。您所要做的就是从err中的第一个参数中提取ab

def err(p, X, Y):
a, b = p
return np.sum((f(a, b, X)-Y)**2)

我发现如果我定义错误函数,使其使用参数列表而不是几个参数,则最小化是有效的:

def err(p, X, Y):
a = p[0]
b = p[1]
return np.sum((f(a, b, X)-Y)**2)

然后拨打minimize

g0 = [1.0, 3.0]
res = scipy.optimize.minimize(err, g0, args=(Xc, Yc), method="Powell")

最新更新