我想了解一下为什么scipy.optimize.least_squares
会出现在scipy
中,这个函数可以用来进行模型拟合,但是也可以用scipy.optimize.minimize
来做同样的事情,唯一的区别是scipy.optimize.least_squares
是在内部进行卡方的计算,而如果要用scipy.optimize.minimize
,他/她将不得不在用户想要最小化的函数中手动计算卡方。此外,scipy.optimize.least_squares
不能被视为scipy.optimize.minimize
的 Package 器,因为它支持的三种方法(trf
、dogbox
、lm
),scipy.optimize.minimize
完全不支援。
所以我的问题是:
- 当
scipy.optimize.minimize
可以达到相同的结果时,为什么scipy.optimize.least_squares
存在? - 为什么
scipy.optimize.minimize
不支持trf
、dogbox
和lm
方法?
谢谢
2条答案
按热度按时间balp4ylt1#
scipy.optimize.least_squares中的算法利用最小化问题的最小二乘结构来获得更好的收敛性(或所使用的导数的低阶)。
它类似于高斯-牛顿算法和牛顿方法之间的区别,参见Wikipedia或本题。
特别是,高斯-牛顿法只使用雅可比(一阶导数),而牛顿法还使用海森(二阶导数),这是昂贵的计算。
mepcadol2#
OP:
如果想要使用scipy.optimize.minimize,他/她将不得不在用户想要最小化的函数内手动计算卡方。
我不太明白你是如何在
minimize
中应用chi-square
的?chi-square我看到这样的最小化最小二乘--局部:
字符串
或者这样(优化参数,又名系数):
型