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.谢谢!
我假设fmincg正在实现共轭梯度类型优化.fminsearch是一种无衍生优化方法.那么,为什么你期望他们给出相同的结果.它们是完全不同的算法.
我希望fminsearch能找到凸成本函数的全局最小值.至少,这是我迄今为止的经验.
fminsearch输出的第一行表明objFunc(theta)为~0.69,但这个值与fmincg输出中的成本值非常不同.所以,我会在fminsearch之外寻找可能的错误.确保您为两种算法提供相同的成本函数和初始点.