gpt4 book ai didi

python - scipy curve_fit 和局部最小值 : get to global minima as fast as possible

转载 作者:行者123 更新时间:2023-12-01 02:02:18 27 4
gpt4 key购买 nike

我手头的问题:我正在使用 scipy curve_fit 来拟合曲线( https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html ),但在许多情况下,为此类曲线估计的参数指的是局部许多“局部”最小值而不是“全局”最小值。考虑到 curve_fit 的设计方式,这是可以预料的。尽管如此,我确实需要我的全局最低限度。

为了找到它,我最初的预感是乘以初始起点,运行多个 curve_fit 实例并选择拟合误差最低的一个,但我会遭受许多偏差我个人的初步猜测(组合的数量也可能很大,这会对性能产生不利影响)。

您碰巧知道如何进行更好、更快和/或方法上更合理的方法吗? (它们不需要传递最小二乘法,如果需要,我可以构建临时的东西)

最佳答案

有几种可能的方法。一种方法是对参数空间进行“强力”搜索,以在 curve_fit 中找到本地求解器的候选起点。另一种方法是使用全局求解器,例如差分进化。当然,这两种方法都比单个 curve_fit 慢得多,但它们确实旨在找到“全局最小值”。在 scipy.optimize 中,这些方法分别是 brute 和 Differential_evolution。应该注意的是,这些实际上都不是全局优化器,因为它们都需要所有参数的搜索空间的上限和下限。尽管如此,在这些边界内,他们确实尝试找到最佳结果,而不仅仅是接近起始值的局部最小值。

一种常见的方法是对每个参数使用中等大小步长的brute,然后选取其中最好的十个并使用 Levenberg-Marquardt(来自 leastsq,如在 curve_fit 中使用)从这些开始。同样,您可以使用 Differential_evolution,然后进行优化。

您可能会发现 lmfit ( https://lmfit.github.io/lmfit-py ) 很有帮助,因为它允许您一次设置模型并在求解器之间切换,包括brute Differential_evolutionleastsq。 Lmfit 还可以轻松修复某些参数或设置某些参数的上限/下限。它还提供了模型构建和曲线拟合的更高级别接口(interface),以及探索参数置信区间的方法。

关于python - scipy curve_fit 和局部最小值 : get to global minima as fast as possible,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49478024/

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