MATLABs“fminsearch”不同于八度的“fmincg”(MATLABs 'fmi

2019-06-24 20:10发布

我试图得到一致的答案一个简单的优化问题,在MATLAB和倍频两种功能之间。 这里是我的代码:

  options = optimset('MaxIter', 500 , 'Display', 'iter', 'MaxFunEvals', 1000);

  objFunc = @(t) lrCostFunction(t,X,y);

  [result1] = fminsearch(objFunc, theta, options);
  [result2]=  fmincg (objFunc, theta, options);

(请记住,即X,Y和θ较早定义是正确的)。 问题是这样的:当我与它使用fmincg运行MATLAB上面的代码,(赞扬了fminsearch),我得到正确的答案。

但是,如果我注释掉fmincg,让我们跑fminsearch,我没有得到任何转换。 事实上,输出结果如下:

   491          893         0.692991         reflect
   492          894         0.692991         reflect
   493          895         0.692991         reflect
   494          896         0.692991         reflect
   495          897         0.692991         reflect
   496          898         0.692991         reflect
   497          899         0.692991         reflect
   498          900         0.692991         reflect
   499          901         0.692991         reflect
   500          902         0.692991         reflect



Exiting: Maximum number of iterations has been exceeded
         - increase MaxIter option.
         Current function value: 0.692991 

增加迭代没有做插口的数目。 相比之下,使用fmincg的时候,我看到它收敛,最后和它给了我正确的结果:

Iteration     1 | Cost: 2.802128e-001
Iteration     2 | Cost: 9.454389e-002
Iteration     3 | Cost: 5.704641e-002
Iteration     4 | Cost: 4.688190e-002
Iteration     5 | Cost: 3.759021e-002
Iteration     6 | Cost: 3.522008e-002
Iteration     7 | Cost: 3.234531e-002
Iteration     8 | Cost: 3.145034e-002
Iteration     9 | Cost: 3.008919e-002
Iteration    10 | Cost: 2.994639e-002
Iteration    11 | Cost: 2.678528e-002
Iteration    12 | Cost: 2.660323e-002
Iteration    13 | Cost: 2.493301e-002

.
.
.


Iteration   493 | Cost: 1.311466e-002
Iteration   494 | Cost: 1.311466e-002
Iteration   495 | Cost: 1.311466e-002
Iteration   496 | Cost: 1.311466e-002
Iteration   497 | Cost: 1.311466e-002
Iteration   498 | Cost: 1.311466e-002
Iteration   499 | Cost: 1.311466e-002
Iteration   500 | Cost: 1.311466e-002

这给正确的asnwer。

那么是什么原因? 为什么fminsearch在此情况下,尽量减少工作?

其它方面:

1)Octave是已经BTW fmincg的语言,但快速谷歌结果还检索此功能。 我的MATLAB可以调用。

2)我的问题具有凸误差表面,并且其误差表面是无处不在微的。

3)我只能访问fminsearch,fminbnd(我不能使用,因为这个问题是不是多元单变量),使叶片fminsearch。 谢谢!

Answer 1:

我假定fmincg正在执行一个共轭梯度优化类型。 fminsearch是一个免费的导数的优化方法。 那么,为什么你能指望他们给了相同的结果。 他们是完全不同的算法。

我希望fminsearch找到一个凸成本函数的全局最小。 至少,这一直是我迄今为止的经验。

fminsearch输出的第一行显示,objFunc(THETA)为0.69〜但是这个值比fmincg的输出成本值有很大不同。 所以,我会找外面fminsearch可能的错误。 确保您给予同样的成本函数和初始点两种算法。



Answer 2:

这是问题,我这个算法有时发现。 它可能不是你要找的答案,但似乎什么工作对我来说,在这些情况下,是修改在它终止公差值。 我看到的是两点提供平等的结果之间振荡。 我知道这会发生在LabVIEW中,只能推测,它发生在Matlab。

除非我看到你的数据,我不能评论多,但是这是我的建议。

注:通过增加宽容,我们的目标是赶上算法达到那个状态了。 它变得不那么精确,但通常的显著数字的数量是相当小的反正。



文章来源: MATLABs 'fminsearch' different from Octave's 'fmincg'