gpt4 book ai didi

python - 使用 scipy.optimize 进行最小二乘优化

转载 作者:行者123 更新时间:2023-11-30 23:21:54 26 4
gpt4 key购买 nike

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

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))

几乎适用于所有情况。它对于某些数据不收敛,因此我需要对拟合参数进行最小二乘拟合边界。然后我注意到 optimize.minimize 有界限,并尝试使用它(最小化误差函数)。

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]
b0 = (0, max(y) + 2)
b1 = (1e-4, 5)
b2 = (0, None)
p1 = optimize.minimize(errFunc, x0, args=(x, y), bounds=(b0, b1, b2))

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

  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.

我已经尝试了多种输入变化,但无法摆脱它。

我怎样才能让optimize.minimize配合使用?有没有更好的解决方案来为解决方案添加边界?

最佳答案

minimize 优化标量函数,您返回一个数组(因为 leastsq 除外)。要使用 minizmize,请尝试将您的函数更改为:

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

您还可以使用 lmfit http://lmfit.github.io/lmfit-py/它允许通过转换使用带有绑定(bind)的最小平方。

关于python - 使用 scipy.optimize 进行最小二乘优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24753918/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com