今回は「Pythonで具体的に説明・導出するベイズ推定!〜その2〜条件付き確率編」の続き、その3を書いていきます。今回でベイズの定理導出を完結させます!
(具体例と共に出来るだけわかりやすく説明していきます!)
前回までは、ベイズ推定導出の前段階として、
・同時確率(同時分布)
・Marginalizaion(周辺化)
・条件付き確率
について実装と共に説明しました。
今回は本題である「ベイズ推定の導出」を行います
目的
使用したもの
実験の流れ
・ベイズの定理
では、let's 実験!
ベイズの定理
まずは前回の復習として条件付き確率の式を示します。
この2式の左辺はxとyの同時分布になっており、同じものです。ですので、代入して、
と表せます。そしてPr(y|x)は次の式で表せます。
これがベイズの定理の式です。
更にこの式を変形して次のように表す場合もあります!
分母は周辺分布をyで積分したものです。
分母に条件付き確率の式を代入
これがベイズの定理です。この式の1つ1つの要素を説明していきます。
ベイズの定理:左辺
・事後確率(posterior):xがわかった(見た)上でのyの確率
ベイズの定理:右辺の分子
・事前確率(prior):xを見る前に分かっているyの情報(確率)
・尤度(likelyhood):あるyがあった時にxが観測されうる確率のようなもの(条件付き確率)
ベイズの定理:右辺の分母
・証拠(evidence):定数項。右辺を積分して1(正規化)にするための項。
そして、覚えてほしいことが
「尤度と事前分布の席を取ると事後確率になる」
ということです。
では、前回と同じ確率変数で実装していきます!
使用する確率変数は学校まで行くのに、どんな人が(Y)、どの交通方法(X)を使用しているのかを確率で表現しています。
Y: 男性、女性、教員
X: 自転車、徒歩、電車、車
今回はX=2、つまり、電車を使用している人がどんな人なのかを計算します。
if __name__ == "__main__" :
argvs = sys.argv
P = [[0.15, 0.1, 0.1, 0.01], [0.1, 0.2, 0.05, 0.04], [0.05, 0, 0.1, 0.1]]
Y = ["男子", "女子", "教員"]
X = [" ", "自転車", "徒歩", "電車", "車"]
for str in X:
print str,
print "\n",
for i, y in enumerate(P):
print Y[i],
for x in y:
print x,
print "\n",
print "\n",
print "同時確率(同時分布)"
print "P(Y=2, X=0) = ", P[2][0]
print "P(Y=1, X=3) = ", P[1][3]
print "=================="*3
print "Marginalizaion(周辺化)"
Pr_x = [0 for i in range(len(P[0]))]
print Pr_x
for i, y in enumerate(P):
for j, x in enumerate(y):
Pr_x[j] += x
print "Pr(x) = ", Pr_x
print ""
Pr_y = [0 for i in range(len(P))]
print Pr_y
for i, y in enumerate(P):
for j, x in enumerate(y):
Pr_y[i] += x
print "Pr(y) = ", Pr_y
print "=================="*3
print "条件付き確率"
total = 0
for i in range(4):
conditional_probability = P[1][i] / sum(P[1])
total += conditional_probability
print "P(x|y)", conditional_probability
print "total ", total
print "=================="*3
print "ベイズの定理"
print "=================="*3
total = 0
print "Pr(y|x=2)のベイズの定理"
for y in range(len(P)):
print "y =",y
conditional_probability = P[y][2] / sum(P[y])
likelyhood = conditional_probability
prior = Pr_y[y]
evidence = Pr_x[2]
bayes = likelyhood*prior/evidence
total += bayes
print "likelyhood", likelyhood
print "prior", prior
print "evidence", evidence
print "bayes", bayes
print "=================="*3
print "total", total
出力結果
自転車 徒歩 電車 車
男子 0.15 0.1 0.1 0.01
女子 0.1 0.2 0.05 0.04
教員 0.05 0 0.1 0.1
同時確率(同時分布)
P(Y=2, X=0) = 0.05
P(Y=1, X=3) = 0.04
======================================================
Marginalizaion(周辺化)
[0, 0, 0, 0]
Pr(x) = [0.3, 0.30000000000000004, 0.25, 0.15000000000000002]
[0, 0, 0]
Pr(y) = [0.36, 0.39, 0.25]
======================================================
条件付き確率
P(x|y) 0.25641025641
P(x|y) 0.512820512821
P(x|y) 0.128205128205
P(x|y) 0.102564102564
total 1.0
======================================================
ベイズの定理
======================================================
Pr(y|x=2)のベイズの定理
y = 0
likelyhood 0.277777777778
prior 0.36
evidence 0.25
bayes 0.4
y = 1
likelyhood 0.128205128205
prior 0.39
evidence 0.25
bayes 0.2
y = 2
likelyhood 0.4
prior 0.25
evidence 0.25
bayes 0.4
======================================================
total 1.0
ベイズの定理をx=2の条件で解きました。
bays値=Pr(y|x=2) がトータルで1.0になっているので実装が上手くいったと言えます。
これで、証明は終了です!
ベイズの定理を使えば、迷惑メールの分類を行えたり、最近流行りのAI・機械学習何度にも使われている技術なので覚えておくと役立つと思います。!
今回も呼んでくださりありがとうございました!