MATLAB と Octave の 2 つの関数の間で、単純な最適化問題に対して一貫した答えを得ようとしています。これが私のコードです:
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
これにより、正しい回答が得られます。
それで、何が得られますか?この最小化のケースで fminsearch が機能しないのはなぜですか?
追加のコンテキスト:
1) Octave は fmincg btw を持つ言語ですが、Google の簡単な結果でもこの関数が取得されます。私の MATLAB はどちらかを呼び出すことができます。
2) 私の問題には凸状の誤差曲面があり、その誤差曲面はどこでも微分可能です。
3)私はfminsearch、fminbnd(この問題は単変量ではなく多変量であるため使用できません)にしかアクセスできないため、fminsearchが残ります。ありがとう!