Python 当scipy.optimize.minimize可能用于相同的事情时,为什么存在scipy.optimize.least_squares?

Python 当scipy.optimize.minimize可能用于相同的事情时,为什么存在scipy.optimize.least_squares?,python,scipy,mathematical-optimization,model-fitting,Python,Scipy,Mathematical Optimization,Model Fitting,我试图理解为什么scipy.optimize.least_squares存在于scipy中。此功能可用于执行模型拟合。但是,可以使用scipy.optimize.minimize来做同样的事情。唯一的区别是,scipy.optimize.least_squares在内部计算卡方,而如果想要使用scipy.optimize.minimize,他/她必须在用户想要最小化的函数中手动计算卡方。另外,scipy.optimize.least_squares不能被看作是scipy.optimize.min

我试图理解为什么
scipy.optimize.least_squares
存在于
scipy
中。此功能可用于执行模型拟合。但是,可以使用
scipy.optimize.minimize
来做同样的事情。唯一的区别是,
scipy.optimize.least_squares
在内部计算卡方,而如果想要使用
scipy.optimize.minimize
,他/她必须在用户想要最小化的函数中手动计算卡方。另外,
scipy.optimize.least_squares
不能被看作是
scipy.optimize.minimize
的包装,因为它支持的三种方法(
trf
dogbox
lm
)根本不受
scipy.optimize.minimize
的支持

因此,我的问题是:

  • 当使用
    scipy.optimize.minimize
    可以获得相同的结果时,为什么存在
    scipy.optimize.least_squares
  • 为什么
    scipy.optimize.minimize
    不支持
    trf
    dogbox
    lm
    方法

谢谢。

scipy.optimize.least_squares中的算法利用最小化问题的最小二乘结构来更好地收敛(或降低所用导数的阶数)

这类似于高斯-牛顿算法和牛顿方法之间的差异,请参见或


特别是,高斯-牛顿只使用雅可比(一阶导数),而牛顿的方法也使用Hessian(二阶导数),计算成本很高。

历史上的
scipy
是一组过于专业化或“高级”的工具,不适合
numpy
。一旦将工具放入这样的包中,就很难移除(以防有人仍在使用它)。为什么这样的问题只能通过深入了解代码历史、github问题和开发人员讨论(以及github之前的历史片段)来回答。然而,看看
最小二乘法
文档,我看到它在0.17中还是新的,不久以前。所以可能有很多关于它的讨论。例如:你也可以使用
最小化
来求解线性规划的实例,但这是非常愚蠢的(与使用LP解算器相比;更专业)。对于一个非常常见的问题,它只是一个更专门的函数。为什么要在这里使用
最小化
(哪一个确切的问题,哪一个解算器,哪一种jac/hess计算)?(在某些情况下,l-bfgs-b可能会变得有趣)方便。最小二乘法非常普遍,以至于① 使用名为
最小二乘法的方法很方便,并且② 有一种开箱即用的专门用于普通任务的方法是很方便的(我的意思是,没有关键字参数,没有考虑……目标、火力、轰隆声)