概要
最尤推定 (Maximum Likelihood Estimation / MLE) について、Python で動かしながら理解することを目的とした記事になります。
尤度関数
与えられた観測値
x=(x1,⋯,xN) について、結合確率関数または結合確率密度関数
f(x;θ) を
θ の関数とみなしたものを
尤度関数 (likelihood function) といい、
L(θ;x) で表します。
L(θ;x)=f(x;θ)
X=(X1,X2,⋯,XN) がランダム標本の場合、
L(θ;x)=f(x;θ)=i=1∏Nf(xi;θ)ただし、f(xi;θ) は母集団分布の確率関数または確率密度関数です。
尤度関数は、パラメータ θ のとき、得られた観測値 x の出やすさを表していると解釈できます。
例 正規分布の尤度関数
母集団分布が標準正規分布であるランダム標本から、観測値 x=(x1,⋯,xN) が得られたとき、その尤度関数は
L(θ;x)=f(x;θ)=i=1∏Nf(xi;θ)=i=1∏N2πσ21exp(−2σ2(xi–μ)2)となります。Python で計算してみます。
- μ=0,σ=4 の正規分布に従う大きさ10のランダム標本の観測値を得て、(μ,σ)∈{−5,0,5}×{3,4,5} のときの尤度関数 L(μ,σ;x) の値を計算します。
- 平均
mu
、標準偏差 sigma
の正規分布の確率密度関数は、scipy.stats.norm.pdf(x, loc=mu, scale=sigma) で計算できます。
- 尤度関数の値は、xi の確率密度関数の値 f(xi;θ) の総乗を取ればよいので、numpy.prod() で計算します。
[ 7.05620938 1.60062883 3.91495194 8.9635728 7.47023196 -3.90911152
3.80035367 -0.60542883 -0.41287541 1.64239401]
確率密度関数の値は 0.1 のように小さい値であり、その総乗をとることになるので、尤度関数の値は非常に小さい値になります。そのため、サンプル数が多い場合、float では表現できなくなります。
最尤推定
尤度関数を最大にするパラメータ θ^=θargmaxL(θ;x) を 最尤推定値 (maximum likelihood estimate) といいます。最尤推定値は x によって決まるので、x の関数 θ^(x) となります。
また、θ(X) を最尤推定量 (maximum likelihood estimator) といいます。パラメータの推定に最尤推定量を採用する方法を最尤推定法 といいます。
尤度関数 L(θ;x) は、パラメータ θ のときの観測値 x の出やすさを表しているので、最尤推定法はその観測値が尤も出やすいパラメータを求めることにほかなりません。
対数尤度関数
尤度関数の対数をとった logL(θ;x) を対数尤度関数 (log likelihood function) といいます。対数関数は増加関数なので、L(θ;x) を最大にする θ^ は、logL(θ;x) も最大にします。
対数をとることで、尤度関数の総乗は総和になります。
logL(θ;x)=logi=1∏Nf(xi;θ)=i=1∑Nlogf(xi;θ)
横軸に尤度関数、縦軸に対数尤度関数をとるグラフを描画します。
対数尤度方程式
パラメータ空間 Θ で定義される微分可能な尤度関数 L(θ;x) が凹関数であるとき、尤度関数を最大にする θ^ は、
∇L(θ^;x)=0を満たします。これを尤度方程式といいます。
L(θ;x) を最大にする θ^ は、logL(θ;x) も最大にするので、
∇logL(θ^;x)=0も同時に満たします。こちらは対数尤度方程式といいます。
例: ベルヌーイ分布の最尤推定
パラメータ p のベルヌーイ分布の確率関数は以下になります。
f(x)=px(1–p)1–x,x=0,1母集団分布がパラメータ p のベルヌーイ分布であるランダム標本から、観測値 x=(x1,x2,⋯,xN) が得られたとき、その対数尤度関数は
logL(p;x)=i=1∑Nlogf(xi;p)=(i=1∑Nxi)logp+(N–i=1∑Nxi)log(1–p)ベルヌーイ分布の尤度関数は、凹関数なので、対数尤度方程式を解けば解が求まります。(証明略)
dpdlogL(p;x)=p∑i=1Nxi–1–pN–∑i=1Nxi=0これを解くと、
p^=N1i=1∑Nxiとなり、p の最尤推定値は標本平均であることがわかりました。
Python でベルヌーイ分布の最尤推定を試してみます。
[0 1 0 0 0 0 0 1 1 0 1 0 0 1 0 0 0 1 1 1 1 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0 0 0]
0.28
真のパラメータ p=0.3 に対して、推定したパラメータは p=0.28 となりました。
サンプル数を変化させた場合の推定値を確認してみます。
N=1 p=0.000000
N=10 p=0.400000
N=100 p=0.220000
N=1000 p=0.300000
N=10000 p=0.295900
N=100000 p=0.301270
N=1000000 p=0.300599
N=10000000 p=0.300029
サンプル数を増やしたことで、推定値が真のパラメータ p=0.3 に近くなることが確認できました。
例: 正規分布の最尤推定
パラメータ μ,θ の正規分布の確率関数は以下になります。
f(x)=i=1∏N2πσ21exp(−2σ2(x–μ)2)正規分布のランダム標本から観測値 x=(x1,⋯,xN) が得られたとき、その対数尤度関数は
logL(μ,σ2;x)=i=1∑Nlogf(xi;p)=i=1∑N–21log(2πσ2)–2σ21i=1∑N(xi–μ)2=–2Nlog(2π)–2Nlogσ2–2σ21i=1∑N(xi–μ)2正規分布の尤度関数は、凹関数なので、対数尤度方程式を解けば解が求まります。(証明略)
dμdlogL(μ,σ2;x)dσ2dlogL(μ,σ2;x)=σ21i=1∑N(xi–μ)=0=–2σ2n+2σ41i=1∑N(xi–μ)2=0これを解くと、
μ^σ^2=N1i=1∑Nxi=N1i=1∑N(xi–N1i=1∑Nxi)2=N1i=1∑N(xi–μ^)2となり、最尤推定値は μ が標本平均、σ2 が標本分散となることがわかりました。
正規分布の尤度関数を可視化する
パラメータ空間 Θ={(μ,σ);μ∈R,σ∈[0,∞)} 上で定義される正規分布の尤度関数 L(μ,σ;x) を描画します。
真のパラメータ μ=0,σ=40 に対して、推定値 μ^=2.39,σ^=40.32 なので、それなりに推定できていることが確認できます。
参考文献
コメント