【问题标题】:Is scipy.optimize.least_squares deterministic?scipy.optimize.least_squares 是确定性的吗?
【发布时间】:2016-10-20 06:31:20
【问题描述】:
我正在使用 scipy 的 optimize.least_squares 算法并设置初始条件,并且始终在我的计算机上获得相同的结果,但是如果我在任何其他计算机上尝试此操作(全部带有最新的 Scipy、Python 和颠簸的包和相同的 64 位 Ubuntu Linux),我在每台 PC 上得到不同的结果。这是为什么呢?
谢谢。
【问题讨论】:
标签:
python
scipy
deterministic
【解决方案1】:
答案是肯定的。
您可以在document 上找到,
optimize.least_squares 上实现了 3 个方法;
- 信任区域反射算法
- 具有矩形信任区域的 dogleg 算法
- Levenberg-Marquardt 算法
所有这些都是迭代方法,从一个初始值(或向量)开始,逐步到达最小值。如何确定这一步因方法而异,但在所有方法中都是确定性的。
更详细的可以阅读这个函数的开发者写的this blog。
我不知道为什么你在每台电脑上得到不同的结果,抱歉。
【解决方案2】:
默认情况下(如果diff_step=None),optimize.least_squares 使用与机器相关的步长进行有限差分逼近 [1]。对于特定计算机,结果应该是确定性的,但在另一台计算机上可能会有所不同。
除非有其他与机器相关的参数,否则手动设置diff_step 应该在不同机器上产生相同的结果。
[1] 见scipy documentation。