我试图理解为什么 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.least_squares
当使用 scipy.optimize.minimize
可以获得相同的结果时存在? scipy.optimize.minimize
不支持trf
, dogbox
, 和 lm
方法? 谢谢你。
最佳答案
scipy.optimize.least_squares 中的算法利用最小化问题的最小二乘结构以获得更好的收敛性(或使用的导数的低阶)。
类似于高斯-牛顿算法和牛顿法的区别,见Wikipedia或 this question .
特别是高斯牛顿法只使用雅可比(一阶导数),而牛顿法还使用了海森(二阶导数),计算成本很高。
关于python - 当 scipy.optimize.minimize 可能用于相同的事情时,为什么 scipy.optimize.least_squares 存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49211783/