我试图在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);(请记住,X,Y和θ是早先定义的并且是正确的)。问题如下:当我在MATLAB中使用fmincg运行上面的代码时(推荐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是fmincg btw的语言,但是一个快速的谷歌结果也检索这个函数。我的MATLAB也可以调用。
2)我的问题有一个凸面误差表面,其误差表面无处不在。
3)我只能访问fminsearch,fminbnd(我不能使用,因为这个问题是多元的而不是单变量的),所以叶子fminsearch。
谢谢!