MATLAB的'fminsearch'与Octave的'fmincg'不同

Spa*_*cey 4 matlab mathematical-optimization octave

我试图在MATLAB和Octave中的两个函数之间找到一个简单优化问题的一致答案.这是我的代码:

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

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

  [result1] = fminsearch(objFunc, theta, options);
  [result2]=  fmincg (objFunc, theta, options);
Run Code Online (Sandbox Code Playgroud)

(请记住,X,y和theta是先前定义的并且是正确的).问题如下:当我使用fmincg(推荐fminsearch)在MATLAB中运行上面的代码时,我得到了正确的答案.

但是,如果我注释掉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 
Run Code Online (Sandbox Code Playgroud)

增加迭代次数并不是杰克.相比之下,当使用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
Run Code Online (Sandbox Code Playgroud)

这给出了正确的asnwer.

什么给出了什么?为什么fminsearch不能在这种最小化情况下工作?

附加背景:

1)Octave是具有fmincg btw的语言,但是快速的google结果也会检索此功能.我的MATLAB也可以调用.

2)我的问题有一个凸面误差表面,它的误差表面到处都是可微分的.

3)我只能访问fminsearch,fminbnd(我不能使用,因为这个问题是多变量而不是单变量),所以离开了fminsearch.谢谢!

emr*_*rea 6

我假设fmincg正在实现共轭梯度类型优化.fminsearch是一种无衍生优化方法.那么,为什么你期望他们给出相同的结果.它们是完全不同的算法.

我希望fminsearch能找到凸成本函数的全局最小值.至少,这是我迄今为止的经验.

fminsearch输出的第一行表明objFunc(theta)为~0.69,但这个值与fmincg输出中的成本值非常不同.所以,我会在fminsearch之外寻找可能的错误.确保您为两种算法提供相同的成本函数和初始点.