【问题标题】:Python equivalence of Matlab lsqcurvefit() functionMatlab lsqcurvefit() 函数的 Python 等价
【发布时间】:2015-11-22 13:54:45
【问题描述】:

什么是与 Matlab 函数 lsqcurvefit() 等效或最接近的 Python 函数,例如 SciPy,它可以最小化数据和参数化函数(曲线)之间的平方误差?

我知道 scipy.optimize.curve_fit 和 scipy.optimize.leastsq 很接近。但是,他们不使用信任区域反射最小二乘法。当然,我可以自己编写在算法之间切换的条件。但是如果有现有的python代码,我就不用重新发明轮子了。

【问题讨论】:

标签: python matlab optimization scipy


【解决方案1】:

trf.py by Nikolay Mayorov 与 Matlab 的 lsqcurvefit() by default 一样,实现了用于最小二乘优化的信任域反射算法。

两者均基于 Thomas F. Coleman 和 Yuying Li 的作品:

  1. “受限于边界的非线性最小化的内部信任区域方法”,SIAM 优化杂志,第 1 卷。 6, pp. 418–445, 1996, PDF 格式here

  2. “关于有界的大规模非线性最小化的反射牛顿方法的收敛性”,数学规划,卷。 67,第 2 期,第 189–224 页,1994 年,提供 PDF 格式 here

Matlab 与 Mayorov 实现的实际算法可能存在一些差异,如后者的blog 所示。

【讨论】:

  • 非常感谢 Tris Nefzger!这正是我正在寻找的。似乎这段代码只使用了内部信任区域反射算法,没有在上述算​​法和Matlab函数lsqcurvefit()中使用的算法Levenberg-Marquardt方法之间进行切换。当然,与内部信任区域反射算法的实现相比,这是一个小问题。我们可以只写一个小代码来切换自己。你同意吗?
  • @Hans:我认为这是可能的,并且会尽快拥有单独的函数,这些函数可以导入共享或复杂功能的附加模块,例如从 trust_region 导入的 trf.py。造成这种情况的部分原因是某些函数的参数和选项的集合对我来说太复杂了,我希望给定的函数只专注于在更窄的范围内做一件事。无论如何,我不是在开发这个,如果你对 SciPy 有任何建议,请订阅它的邮件列表scipy.org/scipylib/mailing-lists.html
  • 两个小的更正:1) 此更新版本(目前)在我在 cmets 中链接的 Nikolay 的 PR 中。您链接到的版本不是最终版本。 2)用户的主要入口点应该是least_squares; trf.py 是一个实现细节。
  • @ev-br:我查看了github.com/scipy/scipy/pull/5044,但没有看到关于信任区域反射最小二乘法的信息,这是主要问题的“这个”(SO 32261976)。 trf.py 可能是您大局中的一个相对细节; trust_region.py 应该包含在其中。
  • @TrisNefzger:显然,该 PR 中包含 trf.py,所以不清楚您在说什么。
猜你喜欢
  • 1970-01-01
  • 2021-11-25
  • 2019-11-30
  • 1970-01-01
  • 2019-12-15
  • 1970-01-01
  • 2013-06-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多