負の対数尤度関数
Statistics and Machine Learning Toolbox™ の分布にサポートされている負の対数尤度関数は、すべて explike
のように like
で終わります。各関数は、分布のパラメーター族を表します。入力引数は、データが従う分布族の特定のメンバーを指定する一連のパラメーター値です。データが指定されると、関数はパラメーターの負の対数尤度を返します。
最尤推定量 (MLE) を求めるには、負の対数尤度関数を最適化問題の目的関数として使用し、MATLAB® 関数 fminsearch
または Optimization Toolbox™ や Global Optimization Toolbox の関数を使用して解くことができます。これらの関数により、探索アルゴリズムの選択と、アルゴリズムの実行に対する低水準の制御を行うことができます。一方、関数 mle
と、normfit
や gamfit
などの fit
で終わる分布近似関数は、あらかじめ設定されているアルゴリズムを使用し、そのオプションは関数 statset
によって設定されるものに限られます。
分布のパラメーター族は、確率密度関数 (pdf) f(x|θ) を使用して指定できます。ここで、x は確率変数の結果、θ は分布パラメーターをそれぞれ表します。f(x|θ) を固定の x に対する θ の関数として見る場合、関数 f(x|θ) は、単一の結果 x に対するパラメーター θ の尤度です。同一分布に従う独立した無作為標本データ セット X に対するパラメーター θ の尤度は次のようになります。
任意の X について、MLE はすべての可能な θ における L(θ) を最大化します。数値アルゴリズムでは、対数尤度関数 log(L(θ)) を (等価的に) 最大化する MLE を求めます。対数は、小さな値になると思われる尤度の積を対数の和に変換します。これで、計算において 0 との区別が容易になります。便宜上、Statistics and Machine Learning Toolbox の負の対数尤度関数は、この和の "負" の値を返します。これは、最適化アルゴリズムでは一般に最大値ではなく最小値を求めるからです。
負の対数尤度関数を使用した MLE の計算
この例では、関数 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
参考
negloglik
| statset
| fminsearch
| surfc