如何使用`scipy.optimize.leastsq`在联合最小二乘方向上进行优化?

时间:2016-09-07 06:53:06

标签: python numpy optimization scipy least-squares

我希望能够在关节最小二乘方向中沿着渐变移动。

我以为我可以使用scipy.optimize.leastsqhttp://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.leastsq.html)来完成此操作。 (也许我错了,也许有更简单的方法吗?)。

我很难理解使用什么,以及如何在联合最小二乘方向上移动,同时仍然增加参数。

我需要做的是输入以下内容:

[1,0]

并且,让它沿着最小二乘方向移动,这意味着增加值10中的一个或两个,但是这样做,使得平方值的总和小到可能。

这意味着[1,0]会增加到[1, <something barely greater than 0>],最终会达到[1,1]。此时,1&#39; s将以相同的速率增加。

我该怎么编程呢?在我看来,scipy.optimize.leastsq会在这里使用,但我无法弄清楚如何使用它?

三江源。

1 个答案:

答案 0 :(得分:1)

我认为您不需要scipy.optimize.leastsq,因为您的问题可以通过分析解决。在任何时候,np.sum(x)x数组的函数2*x的渐变是np.argmin。因此,如果要获得最小的增量,则必须增加渐变的最小分量,您可以使用def g(x): return np.array(2*x) x = np.array([1.,0.]) for _ in range(200): eps = np.zeros_like(x) index = np.argmin(g(x)) eps[index] = 0.01 #or whatever x += eps print(x) 找到该分量。这是一个简单的解决方案:

np.argmin

当多个索引具有相同的值时,eps会返回第一个匹配项,因此您将遇到某些可以最大限度地减少[{"pseudo":"Lucia","id":2},{"pseudo":"Romain","id":1}]

的振荡