我有一个最小二乘优化问题,我需要帮助解决。到目前为止,我有一些代码可以实现以下功能:
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.
我尝试过各种不同的输入方式,但还是无法摆脱。在
我怎么才能得到优化.最小化一起玩?有没有更好的解决方案来增加边界?在
minimize
优化标量函数时,返回一个数组(除了leastsq
)。要使用minizize,请尝试将函数更改为:您还可以使用lmfithttp://lmfit.github.io/lmfit-py/,它允许在绑定转换中使用leatsq。在
如果没有更多信息,我建议尝试以下部分或全部:
您的
errFunc
返回的是标量还是列表/数组?我也花了一些时间scipy.optimize.minimize.最小化为了工作,并且查看我的代码,我的error函数返回一个标量。使优化方法显式,以便它知道如何使用边界,例如
method='L-BFGS-B'
相关问题 更多 >
编程相关推荐