SciPy:最小平方对比 least_squares

SciPy: leastsq vs least_squares

SciPy为非线性最小二乘问题提供了两个函数:

optimize.leastsq() 仅使用 Levenberg-Marquardt 算法。

optimize.least_squares() 允许我们选择 Levenberg-Marquardt、Trust Region Reflective 或 Trust Region Dogleg 算法。

我们应该始终使用 least_squares() 而不是 leastsq() 吗?

如果是,后者的作用是什么?

简答

Should we always use least_squares() instead of leastsq()?

是的。

If so, what purpose does the latter serve?

向后兼容性。

说明

least_squares 函数是 0.17.1 中的新函数。它的 documentation 指的是 leastsq 作为

A legacy wrapper for the MINPACK implementation of the Levenberg-Marquadt algorithm.

original commit introducing least_squares actually called leastsq when the method was chosen to be 'lm'. But the contributor (Nikolay Mayorov) then decided that

least_squares might feel more solid and homogeneous if I write a new wrapper to MINPACK functions, instead of calling leastsq.

所以他做到了。因此,least_squares 不再需要 leastsq,但我希望它至少保留一段时间,以避免破坏旧代码。