ベイズ更新、二項分布・尤度関数について理解しようとした


はじめに

 
 前回、機械学習を学ぶ上で避けて通れないベイズ推定についてまとめています。今回はそれに引続きベイズ更新、二項分布及び尤度関数について記事に致しました。

機械学習で避けて通れない(と思っている)ベイズの定理を頑張って理解しようとした
https://qiita.com/Fumio-eisan/items/f33533c1e5bc8d6c93db

  • ベイズ更新
  • ベルヌーイ分布及び二項定理
  • 尤度関数

参考資料:機械学習とその理論 (情報オリンピック2015春合宿講義資料)
https://www.slideshare.net/irrrrr/2015-46395273

ベイズ更新を理解する

 ベイズの定理を応用した考え方にベイズ更新というものがあります。これは、事前確率を更新された事後確率とする考え方を指します。
 迷惑メールのフィルタの考え方を例にして、具体的に計算をします。

迷惑メールフィルタ

 あるメール$A$が、迷惑メール$A_1$か非迷惑メール$A_2$かを判定することを考えます。メールには迷惑メールで入りやすい単語「絶対必勝」、「完全無料」などという言葉が含まれていました。迷惑メールと非迷惑メールにこれらの言葉が含まれている確率を下記表とします。

迷惑メール 非迷惑メール
絶対必勝 0.11 0.01
完全無料 0.12 0.02

 さて、「絶対必勝」という言葉が含まれている事象を$B_1$、含まれていない事象を$B_2$とします。すると、

P(B_1|A_1) = P(絶対必勝|迷惑メール) = 0.11\\
P(B_1|A_2) = P(絶対必勝|非迷惑メール) = 0.01

となります。非迷惑メールの中にも100通に1通くらいは、絶対必勝と書かれていることがあることを示します。さて、データベースより全メールに対する迷惑メールの割合は$P(A_1)=0.6$であることが示されています。
 この時、「「絶対必勝」という言葉が含まれるメールが迷惑メールである確率」をベイズの定理から求めます。

\begin{align}
P(A_1|B_1)& =  P(迷惑メール|絶対必勝)= \frac{P(B_1|A_1)P(A_1)}{P(B_1)}\\
&=\frac{P(絶対必勝|迷惑メール)P(迷惑メール)}{P(絶対必勝)}\\
&=\frac{0.11×0.6}{0.11×0.6+0.01×(1-0.6))}\\
&=0.9429
\end{align}

となります。

従って、「絶対必勝」が含まれいるメールのうち約94%は迷惑メール、約6%が非迷惑メールであることが分かりました。この計算から、先ほどの前提では60%が迷惑メールだった前提から94%が迷惑メールという前提に代わりました。これが、事後確率を事前確率とする考え方になります。この考え方を元に、「完全無料」についてもベイズ更新の原理を適用します。

\begin{align}
P(A_1|B_2)& =  P(迷惑メール|完全無料)= \frac{P(B_2|A_1)P(A_1)}{P(B_2)}\\
&=\frac{P(完全無料|迷惑メール)P(迷惑メール)}{P(完全無料)}\\
&=\frac{0.12×0.9429}{0.12×0.9429+0.01×(1-0.9429))}\\
&=0.9900
\end{align}

となりました。つまり、「完全無料」が含まれているメールのうち約99%が迷惑メールであることが分かりました。このような考え方がベイズ更新と呼びます。

 

ベルヌーイ分布及び二項定理を理解する

 確率分布を示す分布としてベルヌーイ分布があります。


f(x|θ) = θ^x(1-θ)^{1-x}, x=0,1

$x$が確率変数であり、1か0を取ります。通常、コインの表裏や、病気の罹患、非罹患などをこの1,0で表します。また、$θ$はその事象が起こる確率を指します。この$θ$は母数とも呼ばれ、確率分布を特徴づける数的指標です。

二項分布を理解する

 
 さて、先ほどのベルヌーイ分布では1回の試行を表したものです。次に、この試行をN回行った場合を考えます。
バスケットボールを例に考えます。フリースローを$\frac{1}{3}$で成功することができる選手がいます。3回投げて2回成功する確率を考えます。
 例えば、成功⇒成功⇒失敗が観察される確率は、
 


θ^2×(1-θ)^1 = {\frac{1}{3}}^2×(1-\frac{1}{3})=\frac{2}{27}

となります。しかし、2回成功するケースは成功⇒失敗⇒成功、失敗⇒成功⇒成功と全てで3パターンあります。従って、\frac{2}{9}と試算することができます。
これを一般化すると


f(x;N,θ) = nCx×θ^x(1-θ)^{n-x}, x=0,1

$n=30$,$θ=0.3,0.5,0.8$のときにこの確率分布がどのように描かれるかみてみます。

bayes.ipynb
import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import binom

k = np.arange(0,30,1)
p_1 = binom.pmf(k, 30, 0.3, loc=0)
p_2 = binom.pmf(k, 30, 0.5, loc=0)
p_3 = binom.pmf(k, 30, 0.8, loc=0)

plt.plot(k,p_1,label='p_1=0.3')
plt.plot(k,p_2, color="orange",label='p_2=0.5')
plt.plot(k,p_3, color="green",label='p_3=0.8')
plt.legend()
plt.show()

30回試行する前提の場合、確率0.3では9回程度、確率0.5では15回程度、確率0.8では25回程度が最も観察される回数が高いことが分かりました。
確率0.5でピークが一番低い理由は、分散が最も大きいためです。

尤度関数を理解する

 先ほど表れて二項分布について考えます。先ほどの例では、30回試行する母数を定数として、確率を変数として考えました。この考えを逆にして、試行回数である母数を変数、確率を定数とした関数を尤度関数(ゆうどかんすう)と呼びます。この尤度関数により求まる値を尤度、と呼びます。


f(x;N,θ) = nCx×θ^x(1-θ)^{n-x}, x=0,1

 
先ほどと同じような考え方で図式化してみます。$θ=30,50,80$、確率は0.3として計算します。

bayes.ipynb
import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import binom

k = np.arange(0,50,1)
p_1 = binom.pmf(k, 30, 0.3, loc=0)
p_2 = binom.pmf(k, 50, 0.3, loc=0)
p_3 = binom.pmf(k, 80, 0.3, loc=0)

plt.plot(k,p_1,label='θ=30')
plt.plot(k,p_2, color="orange",label='θ=50')
plt.plot(k,p_3, color="green",label='θ=80')
plt.legend()
plt.show()

試行回数が高くなるにつれて、分散が大きくなり期待値(ピーク)も低くなることが分かりました。

おわりに

 今回、二項定理に関しては高校数学でも習う範囲であるため理解しやすかったです。ただ、尤度関数と確率としての考え方は何を変数と置くかで意味するところが若干変わることは新鮮でした。
 また、ベイズ更新については機械学習で応用できる考え方だと理解できた一方、自ら事前確率を決めることは非常に注意が必要であることが分かりました。その前提は本当に妥当か、という視点で取り組まなければ落とし穴があるかもしれません。

参考URL
https://lib-arts.hatenablog.com/entry/implement_bayes1