SciPy 为非线性最小二乘问题提供了两个函数:
optimize.leastsq()
仅使用 Levenberg-Marquardt 算法。
optimize.least_squares()
允许我们选择 Levenberg-Marquardt、Trust Region Reflective 或 Trust Region Dogleg 算法。
我们应该总是使用least_squares()
而不是leastsq()
吗?
如果是这样,后者的目的是什么?
SciPy 为非线性最小二乘问题提供了两个函数:
optimize.leastsq()
仅使用 Levenberg-Marquardt 算法。
optimize.least_squares()
允许我们选择 Levenberg-Marquardt、Trust Region Reflective 或 Trust Region Dogleg 算法。
我们应该总是使用least_squares()
而不是leastsq()
吗?
如果是这样,后者的目的是什么?
我们应该总是使用 minimum_squares() 而不是 leastsq() 吗?
是的。
如果是这样,后者的目的是什么?
向后兼容性。
该least_squares
功能是 0.17.1 中的新功能。其文档leastsq
称为_
Levenberg-Marquadt 算法的MINPACK 实现的传统包装器。
当方法被选择为“lm”时,实际调用的原始提交引入。但是贡献者(尼古拉·马约罗夫)随后决定least_squares
leastsq
如果我为MINPACK 函数编写一个新的包装器,而不是调用leastsq,那么least_squares 可能会感觉更加稳固和同质。
他就这么做了。因此,leastsq
不再需要least_squares
,但我希望它至少保留一段时间,以避免破坏旧代码。