我试图得到一致的答案一个简单的优化问题,在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。 谢谢!