元理系院生の新入社員がPythonとJavaで色々頑張るブログ

プログラミングや機械学習について調べた事を書いていきます

ベイズ理論

この記事に書かれている事

ベイズ理論について


ベイズ理論ってなに?

ベイズの定理を用いて、事後確率を尤度と事前確率によって表す事で、確率をより柔軟に扱うことが出来る確率論の1つです。

ざっくりと説明すると、事前に得られた情報に基づいてある事象が起こる確率を求めたりする事が出来ます。

よく、「健康状態のチェック表に基いて、その患者が病気であるかどうかの識別問題」や、「メールに記述された単語をチェックして、そのメールが迷惑メールかどうかの識別問題」等が実用例として上げられています。

ベイズの定理

ベイズの定理は次の式で定義されます。
 P(B|A) = \frac{P(B)\times P(A|B)}{P(A)}

この式には P(B|A) P(A|B)など、見慣れない箇所が有りますね。
一つ一つ説明していきます。

まず、 A, Bですが、これは事象の事を指し、 P(A), P(B)はそれぞれ事象A、Bが発生する確率です。
また、 P(B|A)は条件付き確率と呼ばれるもので、この式はある事象Aが発生した時に、さらにある事象Bが発生する確率の事を指します。

条件付き確率と同時確率

条件付き確率の話をする時に、最初に疑問に点は「Aが発生した時に、Bが発生する確率」「AとBが同時に発生する確率」だと思います。

先に述べたように「Aが発生した時にBが発生する確率」は条件付き確率と呼び、
「AとBがが同時に発生する確率」は同時確率と呼びます。

この2つの確率はとても大事な考え方なので、トランプを例に説明します。

スペード、クローバ、ハート、ダイヤの4種それぞれ13枚のトランプについて、
事象Aを「スペードを選択する事」
事象Bを「絵札を選択する事」とします。
この時 P(A), P(B)はそれぞれ
 P(A) = \frac{13}{52} = \frac{1}{4}
 P(B) = \frac{12}{52} = \frac{3}{13}
となります。

この時、同時確率は次のようになります。
 P(A, B) = \frac{1}{4} \times \frac{3}{13} = \frac{3}{52}
これは「カードを一枚引いた時に、スペードかつ絵札(J, Q, K)である確率」です。

同時確率は確率の積で求めることが出来ます。これを確率の乗法定理と呼びます。

対し、条件付き確率は P(B|A)は次のようになります。
 P(B|A) = \frac{3}{13}
これは「スペードを選択したと言う前提がある時に、絵札を選択する確率」です。
その為分母は全てのトランプの枚数(=52枚)ではなく、スペードの枚数(=13枚)となります。

ベイズの定理を見なおしてみる

ここでベイズの定理を見なおしてみましょう。

 P(B|A) = \frac{P(B)\times P(A|B)}{P(A)}

この式は P(B|A)という条件付き確率を、 P(A|B)という条件付き確率から求めている事が分かります。

AやBと言う記号だけだとイメージしにくいと思うので迷惑メールフィルターを例に考えてみます。
Aをあるメールから得られるデータとし、(単語ベクトル等)
Bをそのメールが迷惑メールであるという事象とします。
 P(B|A)はあるメールが届いた時、そのメールが迷惑メールである確率となります。

そしてその確率は、 P(A):そのメールが届く確率 P(B):全てのメールに関して、迷惑メールと識別される確率、 P(A|B):迷惑メールと識別された時、そのメールがAである確率で求めることが出来ます。

識別問題においては P(B)を事前確率、 P(A|B)を尤度(ゆうど)と呼びます。

この様にベイズの定理を用いると事前に収集したメールのサンプルから、迷惑メールフィルターを作る事が出来ます。

ベイズの定理の導出

ベイズの定理は確率の乗法定理を用いる事で求めることが出来ます。

同時確率は条件付き確率により、次のように定義されます。
 P(A, B) = P(A) \times P(B|A) = P(B)\times P(A|B)

この式をえいやっと式変形すると・・・

 P(A) \times P(B|A) = P(B) \times P(A|B)

 P(B|A) = \frac{P(B) \times P(A|B)}{P(A)}

ベイズの定理を導出できました。



次回はベイズ識別規則による分類プログラムをPythonで実装したいです。