# ベイズの定理とナイーブベイズ分類
2017 / 12 / 03
## ベイズの定理とは
ある事象Aが起きた上で異なる事象Bが起きる確率を条件付き確率と言います.
一般にP(B|A)と表されます.
確率は集合上に定義されるため,条件付き確率は集合A,Bを用いて以下の数式で求められます.
![](https://i.imgur.com/THAPt1D.jpg)
ここで具体的に,以下のような集合を考えます.
```
U = {1, 5, 2, 9, 6, 1, 3, 8, 10, 4, 7, 12}
A = {2n ∈ U | n ∈ N} すなわち {2, 6, 8, 10, 4, 12}
B = {3n ∈ U | n ∈ N} すなわち {9, 6, 3, 12}
A∩B = {6, 12}
```
このとき
![](https://i.imgur.com/LNuPkWY.jpg)
![](https://i.imgur.com/pODdMOc.jpg)
なので,条件付き確率の数式は以下のように書き換えられます.
![](https://i.imgur.com/t6heCAm.jpg)
よって,上で考えた集合においては,
```
P(B|A) = |A∩B| / |A| = 2 / 6 = 1/3
```
となります.
ところで,条件付き確率P(B|A)とP(A|B)は以下の数式で求められます.
![](https://i.imgur.com/THAPt1D.jpg)
![](https://i.imgur.com/yKKW5TI.jpg)
明らかにA∩B = B∩Aなので,これらから以下の数式が導けます.
![](https://i.imgur.com/B4BPs6v.jpg)
![](https://i.imgur.com/wo9wiAx.jpg)
この数式がベイズの定理の公式です.
事後確率とか尤度などの用語は割愛します.
## ベイズの定理の嬉しさ
ベイズの定理の公式をもう一度見てみましょう.
![](https://i.imgur.com/wo9wiAx.jpg)
言葉にして理解してみると,
「Aの上で発生するBの確率は,Bの上で発生するAの確率と,AとBそれぞれの確率から求められる」
実際に使ってみると,
```
P(B|A) = (2/4 * 4/12) / 6/12 = 2 / 6 = 1/3
```
確かに上で求めた値と一致しています.
ただ,P(A|B)を改めて計算しているため,計算する量が増えているように感じることでしょう.
ベイズの定理が活きるのは,例えば以下のような場面です.
> Bの上でAとなる確率がある程度分かっている時に,新たに発生したAの上でBが起こる確率を求めたい
より具体的には,
> がん患者の性別とその腫瘍の良性・悪性がある程度分かっている時,新たにがんと診断された患者の腫瘍の良性・悪性の確率を知りたい
というような状況で活用出来ます.
ここでは性別としましたが,喫煙するかどうか,年齢などでも構いません.
とにかく,いくらかのデータの蓄積がある状況で,新たなデータに対して判断を下したい時に使えます.
さらに言えば,これが現代の機械学習の基礎となっています.
## ナイーブベイズ分類
では実際にこのベイズの定理を用いて推論を行ってみましょう.
これから行う方法はNaive Bayes classifier(単純ベイズ分類器)と呼ばれています.
### 1.データセットを用意する
今回は以下のデータを使います.
![](https://i.imgur.com/6OZHEg0.png)
これは具体例として挙げた,がん患者の性別と腫瘍の良性・悪性のデータに血液型を加えたものです.
実在するデータでは無いのであしからず.
### 2.頻度表を作る
用意したデータセットから,各値の出現頻度を求めましょう.
データセットを見ると,全体で以下の値が出現します.
```
性別 = {男,女}
血液型 = {A型, B型, O型, AB型}
腫瘍 = {良性,悪性}
```
これを基に頻度表を作った図が以下になります.
![](https://i.imgur.com/1gxDVuX.png)
![](https://i.imgur.com/bnm6nET.png)
### 3.確率を求める
作った頻度表から,条件付き確率をそれぞれ求めましょう.
表は以下のようになります.
![](https://i.imgur.com/WvO4LuT.png)
![](https://i.imgur.com/et0CIPd.png)
### 4.新たなデータを分類する
新たに(男, O型)のがん患者が現れました.
彼のがんが良性か悪性かを診断しましょう.
まず良性である確率,すなわちP(良性|男,O型)を求めます.
```
P(良性|男,O型) = P(良性|男) * P(良性|O型)
= { P(男|良性) * P(良性) / P(男) } * { P(O型|良性) * P(良性) / P(O型) }
= { (2/7) * (7/18) / (9/18) } * { (3/7) * (7/18) / (5/18) }
= (2/9) * (3/5)
= 6/45
```
そして悪性である確率P(悪性|男,O型)を求めます.
```
P(悪性|男,O型) = P(悪性|男) * P(悪性|O型)
= { P(男|悪性) * P(悪性) / P(男) } * { P(O型|悪性) * P(悪性) / P(O型) }
= { (7/11) * (11/18) / (9/18) } * { (2/11) * (11/18) / (5/18) }
= (7/9) * (2/5)
= 14/45
```
以上から,P(良性|男,O型) < P(悪性|男,O型)であるため,
「腫瘍は悪性である可能性が高い」という診断になります.
もちろんこれは単なる例に過ぎないため,実際にはより多くの事柄から判断を下すべきです.
また,ベイズの定理ではそれぞれの確率変数が独立かつ同じ確率分布であるという前提があるため,何に対しても適用出来るとは限りません.
今回のナイーブベイズ分類は,連続値と比較して,カテゴリカル・データにおいて良い分類性能を示すことが分かっています.関連して,連続値に拡張した方法やゼロ頻度問題の対策など様々な事柄があるのでそちらも調べると良いでしょう.
## 参考
* [6 Easy Steps to Learn Naive Bayes Algorithm (with codes in Python and R)](https://www.analyticsvidhya.com/blog/2017/09/naive-bayes-explained/)
* [条件付き確率の意味といろいろな例題|高校数学の美しい物語](https://mathtrain.jp/jyokentsuki)