首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >curve_fit和局部极小值:尽可能快地到达全局极小值

curve_fit和局部极小值:尽可能快地到达全局极小值
EN

Stack Overflow用户
提问于 2018-03-25 16:18:21
回答 1查看 2.2K关注 0票数 3

我手头的问题是:我正在使用scipy curve_fit来拟合曲线(fit.html),但在许多情况下,估计这种曲线的参数指的是局部多个“局部”极小值之一,而不是“全局”最小值。考虑到curve_fit是如何设计的,这是意料之中的。不过,我真的需要我的全球最低标准。

为了找到它,我最初的预感是乘以初始起点,运行多个curve_fit实例,并选择一个拟合误差最小的实例,但在我个人的初步猜测估计中会有许多偏差(组合的数量可能很大,这将有损于性能)。

你是否碰巧知道如何进行更好、更快和/或方法更完善的方法?(他们不需要用最小二乘法,必要的话我可以做一些临时的东西)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-25 19:00:34

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

一种常见的方法是对每个参数使用中等大小的brute,然后取其中最好的十个步骤,从每个参数开始使用Levenberg-Marquardt (来自leastsq,在curve_fit中使用)。类似地,您可以使用differential_evolution,然后进行细化。

您可能会发现lmfit (https://lmfit.github.io/lmfit-py)很有帮助,因为它允许您一次建立模型并在求解器(包括brutedifferential_evolutionleastsq )之间切换。Lmfit还可以方便地修复一些参数,或者在某些参数上放置上/下界。为模型建立和曲线拟合提供了较高层次的界面,并给出了参数置信区间的确定方法。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49478024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档