运行时错误:未找到最佳参数:函数调用次数已达到maxfev = 800

4
我有一张图片,在其中选取一行随机行并尝试在该行上拟合高斯曲线。我使用 scipy.optimize curve_fit 方法 来拟合高斯曲线。
选择随机行是根据一个数组向量 [10, 20, 40, 60, 100] 进行的,意思是在第一次尝试中,我在该图像中选择了 10 行随机行(因此,进行了 10 次高斯拟合),然后选择更多行,以此类推。
大多数情况下,代码都能正常工作,但有时会出现错误(特别是当行数较多时:大约为 60 或更多),提示未找到最优参数
我在 stackoverflow 上找到了一些类似的帖子,但仍然无法解决这个问题。看起来这个问题经常出现在 curve_fit 方法 中。
1个回答

6

激光束,有这个可能吗?;-)

无论如何,问题可能是选择的行很难通过scipy's curve_fit函数拟合高斯曲线。我的第一个建议是调试(使用例如Python的logging模块),以查看错误是否仅在特定行上出现。

我的第二个建议是更改curve_fit的初始猜测。从可以进行曲线拟合的行中,您应该能够提取出几个参数。在其他行中,高斯分布的平均值大约在相同位置,并且幅度变化也不会那么大。良好的初始猜测一定会帮助曲线拟合。

如果您想分析此问题,我绝对会两者都做:尝试找到在800次迭代后曲线拟合失败的行。然后看看通过更改初始猜测是否可以进行曲线拟合。


你可以使用 signal.argrelmax 函数来找到局部最大值,这些最大值可作为高斯函数中心的良好候选项。 - Davidmh
啊,该死的激光束...! - Mateen Ulhaq

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接