人工知性を作りたい

私が日々、挑戦したことや学んだことなどを紹介していく雑記ブログです。 (新しいAI技術HTM, 専門の音声信号処理, 趣味のアニメ等も書いてます。)

Pythonで具体的に説明・導出するベイズ推定!〜その1〜

今回は最近のAIなどの技術で使われるベイズ推定を実装とともにご紹介する。

 

f:id:hiro-htm877:20190212213933p:plain

 

目的

Pythonベイズ推定を実装しながら証明する!

 

使用したもの

Python

 

実験の流れ

・同時確率(同時分布)

・Marginalizaion(周辺化)

・条件付き確率

ベイズの定理

※この記事では上の2つの実験のみ

 

ではLet' 実験!

 

同時確率(Joint Probability)

同時確率は以下の数式で表現します。確率変数x,yがある時、

Pr(x,y)

これは、xとyが同時に何回も起こったとします。それが他の組み合わせと比べて確率が高い、低いという様に使用します。

以下にx=1, y=2とx=3, y=1の時の同時確率を実装します!

今回使用する確率変数は学校まで行くのに、どんな人が(Y)、どの交通方法(X)を使用しているのかを確率で表現しています。

Y: 男性、女性、教員

X: 自転車、徒歩、電車、車

 

ソースコード 

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]

 

出力結果

  自転車 徒歩 電車 車
男子 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

 

同時確率は表を読み取るだけです!

1つ目の

P(Y=2, X=0)はP(Y=教員, X=自転車)=0,05となっています。

 

同時確率は確率変数xとyが同時に起こる確率です!

 

 

Marginalizaion(周辺化)

 次はベイズの定理で重要となる周辺化を説明します!

まず定義式は、以下の様になります。

Pr(x) =\int Pr(x, y) dy

 x, yの同時分布をyについて積分するとxの確率分布Pr(x)が求まります!

Pr(y) =\int Pr(x, y) dx

 x, yの同時分布をxについて積分するとxの確率分布Pr(y)が求まります!

 以下の画像で説明すると、x=横の一列は固定して、縦に積分を行なっていくと、Pr(x)が求まります。

また、y=縦の一列を固定して、横に積分を行なっていくとPr(y)が求まります。

f:id:hiro-htm877:20190212213035p:plain

 

 では同時分布と同じ確率変数を用いて実験を行なっていきます。

 ソースコードは上の続きです。

ソースコード 

   print "=================="*3
    print "Marginalizaion(周辺化)"
    Pr = [0 for i in range(len(P[0]))]
    print Pr
    for i, y in enumerate(P):
        for j, x in enumerate(y):
            Pr[j] += x
    print "Pr(x) = ", Pr
    print ""
    Pr = [0 for i in range(len(P))]
    print Pr
    for i, y in enumerate(P):
        for j, x in enumerate(y):
            Pr[i] += x
    print "Pr(x) = ", Pr

 

出力結果

  自転車 徒歩 電車 車
男子 0.15 0.1 0.1 0.01
女子 0.1 0.2 0.05 0.04
教員 0.05 0 0.1 0.1

======================================================
Marginalizaion(周辺化)
[0, 0, 0, 0]

Pr(x) = [0.3, 0.30000000000000004, 0.25, 0.15000000000000002]

[0, 0, 0]
Pr(x) = [0.36, 0.39, 0.25]

 

周辺化は片方の変数を固定して積分を行う!

 

今回は長くなりましたので、ここまでとします。

続きはPythonで具体的に説明・導出するベイズ推定!〜その2〜で

・条件付き確率

ベイズの定理

を説明します!

 

ありがとうございました!