最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。
Statistics and Machine Learning Toolbox™ の分布にサポートされている負の対数尤度関数は、すべて explike
のように like
で終わります。各関数は、分布のパラメーター族を表します。入力引数は、データが従う分布族の特定のメンバーを指定する一連のパラメーター値です。データが指定されると、関数はパラメーターの負の対数尤度を返します。
最尤推定量 (MLE) を求めるには、負の対数尤度関数を最適化問題の目的関数として使用し、MATLAB® 関数 fminsearch
または Optimization Toolbox™ や Global Optimization Toolbox の関数を使用して解くことができます。これらの関数により、探索アルゴリズムの選択と、アルゴリズムの実行に対する低水準の制御を行うことができます。一方、関数 mle
と、normfit
や gamfit
などの fit
で終わる分布近似関数は、あらかじめ設定されているアルゴリズムを使用し、そのオプションは関数 statset
によって設定されるものに限られます。
尤度は、条件付きの確率密度です。分布のパラメーター族は、関数 f(x,a) を使用して指定できます。x と a はそれぞれ確率変数およびパラメーターを表します。a を固定した場合、関数は x における確率密度関数 (pdf) f(x|a) です。x を固定した場合、関数はパラメーター a の "尤度" f(a|x) です。独立した無作為標本データセット X に対するパラメーターの結合尤度は、次のようになります。
任意の X について、MLE はすべての可能な a における L(a) を最大化します。数値アルゴリズムでは、対数尤度関数 log(L(a)) を (等価的に) 最大化する MLE を求めます。対数は、小さな値になると思われる尤度の積を対数の和に変換します。これで、計算において 0 との区別が容易になります。便宜上、Statistics and Machine Learning Toolbox の負の対数尤度関数は、この和の "負" の値を返します。これは、最適化アルゴリズムでは一般に最大値ではなく最小値を求めるからです。
この例では、関数 gamlike
および fminsearch
を使用して MLE を求める方法を示します。
関数 gamrnd
を使用して、特定のガンマ分布から無作為標本を生成します。
rng default; % For reproducibility a = [1,2]; X = gamrnd(a(1),a(2),1e3,1);
関数 gamlike
を使用して、与えられた X
に対する a
の近傍における尤度表面を可視化します。
mesh = 50; delta = 0.5; a1 = linspace(a(1)-delta,a(1)+delta,mesh); a2 = linspace(a(2)-delta,a(2)+delta,mesh); logL = zeros(mesh); % Preallocate memory for i = 1:mesh for j = 1:mesh logL(i,j) = gamlike([a1(i),a2(j)],X); end end [A1,A2] = meshgrid(a1,a2); surfc(A1,A2,logL)
関数 fminsearch
を使用して、尤度表面の最小値を求めます。
LL = @(u)gamlike([u(1),u(2)],X); % Likelihood given X
MLES = fminsearch(LL,[1,2])
MLES = 1×2
0.9980 2.0172
関数 gamfit
によって返される推定値と MLES
を比較します。
ahat = gamfit(X)
ahat = 1×2
0.9980 2.0172
MLES
と ahat
の間で各パラメーターの差は 1e-4
より小さくなっています。
MLE を表面プロットに追加します。
hold on plot3(MLES(1),MLES(2),LL(MLES),'ro','MarkerSize',5,'MarkerFaceColor','r') view([-60 40]) % Rotate to show the minimum
fminsearch
| negloglik
| statset
| surfc