带界最小二乘优化scipy.optimiz公司

2024-09-30 12:13:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个最小二乘优化问题,我需要帮助解决。到目前为止,我有一些代码可以实现以下功能:

shankarFunc = lambda p, x: p[0] * (1 - np.exp(-1 * ((x / p[1]) ** p[2])))
errFunc = lambda p, x, y: shankarFunc(p, x) - y

x0 = [max(y), 100 / max(y), 1]

p1, success = optimize.leastsq(errFunc, x0, args=(x, y))

这几乎适用于所有病例。它对某些数据不收敛,所以我需要对拟合参数进行最小二乘拟合。然后我注意到优化.最小化尝试使用函数来最小化错误。在

^{pr2}$

这会给我带来问题,因为它返回以下错误:

  File "C:\Anaconda\lib\site-packages\scipy\optimize\optimize.py", line 610, in
approx_fprime
    grad[k] = (f(*((xk + d,) + args)) - f0) / d[k]
ValueError: setting an array element with a sequence.

我尝试过各种不同的输入方式,但还是无法摆脱。在

我怎么才能得到优化.最小化一起玩?有没有更好的解决方案来增加边界?在


Tags: lambda代码功能错误npargsmaxsuccess
2条回答

minimize优化标量函数时,返回一个数组(除了leastsq)。要使用minizize,请尝试将函数更改为:

errFunc = lambda p, x, y: np.sum((shankarFunc(p, x) - y)**2)

您还可以使用lmfithttp://lmfit.github.io/lmfit-py/,它允许在绑定转换中使用leatsq。在

如果没有更多信息,我建议尝试以下部分或全部:

  • 您的errFunc返回的是标量还是列表/数组?我也花了一些时间scipy.optimize.minimize.最小化为了工作,并且查看我的代码,我的error函数返回一个标量。

  • 使优化方法显式,以便它知道如何使用边界,例如method='L-BFGS-B'

相关问题 更多 >

    热门问题