ナイーブベイズ（単純ベイズ）

ナイーブベイズ（Naive Bayes）の特徴・考え方について

- 参考にしたもの
  - [見て試してわかる機械学習アルゴリズムの仕組み 機械学習図鑑](https://www.amazon.co.jp/gp/product/B07KPSJKH8/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1)
  - https://scikit-learn.org/stable/modules/naive_bayes.html

# 「ナイーブベイズ」の概要

- 機械学習の、教師あり学習に使われる手法。
- [自然言語](https://ja.wikipedia.org/wiki/%E8%87%AA%E7%84%B6%E8%A8%80%E8%AA%9E)の分類で主に利用される。（文章の分類やスパムメール判定など）

# 特徴

- 超シンプルな仮定に基づいて計算する割に、良い結果を返してくれる。
- トレーニングデータが少なくてもよい。
- 他の手法に比べて、計算が速い。
- 「[次元の呪い](https://ja.wikipedia.org/wiki/%E6%AC%A1%E5%85%83%E3%81%AE%E5%91%AA%E3%81%84)」の影響を受けづらい。
- ナイーブベイズで計算される「確率」は、「その物事が起きる確率」としては<font color="red">使えない</font>。（計算時にものごとを単純に仮定し過ぎているため）

# 計算方法

## ベイズの定理

名前の通り、↓[ベイズの定理](https://ja.wikipedia.org/wiki/%E3%83%99%E3%82%A4%E3%82%BA%E3%81%AE%E5%AE%9A%E7%90%86)を使う

```math
P(B|A) = \frac{P(A|B) P(B)}{P(A)}
```

- $P(B|A)$：$A$が発生した状態で、$B$が発生する確率
- $P(A)$：（何も前提条件なしで）$A$が発生する確率

コレは、↓を変形したものと考えるとわかりやすいかも

```math
P(A) × P(B|A) = P(B) × P(A|B)
```

- 両辺とも、$A, B$が両方とも発生する確率
- 「$A$が発生してから$B$が発生する」と考えるか、「$B$が発生してから$A$が発生する」と考えるか

## ナイーブベイズの計算

ベイズの定理より

```math
P(y | x_1, \cdots , x_n) = \frac{P(y) P(x_1, \cdots , x_n | y)}{P(x_1, \cdots , x_n)} \; \cdots (i)
```

- $y$：分類したいカテゴリ（「文章のカテゴリ」「スパムメールである、ではない」など）
- $x_1, \cdots , x_n$：↑の分類に使う要素。自然言語処理では、文に含まれる単語など
- $P(y | x_1, \cdots , x_n)$：$x_1, \cdots , x_n$が含まれる（or含まれない）とき、$y$である確率
- $P(y)$：全体のうち、$y$である確率。（=サンプル全部のうち、分類が$y$の割合）

となる。ここで、**$x_1, \cdots , x_n$たちが互いの確率に影響を与えない（独立である）と仮定する**
（**<font color="red">ココの仮定がnaive=単純なので、「ナイーブベイズ」と呼ばれる</font>**）

このとき、「$x_i$以外が発生している（orしていない）とき、$x_i$が発生する（orしない）確率」

```math
P(x_i | y, x_1, \cdots, x_{i-1} , x_{i+1} , \cdots , x_n)
```

は、他の$x$からの影響を受けないため

```math
P(x_i | y, x_1, \cdots, x_{i-1} , x_{i+1} , \cdots , x_n) = P(x_i | y)
```

となるので、$(i)$の式は

```math
\begin{align}
P(y | x_1, \cdots , x_n) &= \frac{P(y) P(x_1 | y) \cdots P(x_n | y)}{P(x_1, \cdots , x_n)} \\
&= \frac{P(y) \prod_{i = 1}^{n} P(x_i | y)}{P(x_1, \cdots , x_n)} \; \cdots (ii) \\
\end{align}
```

となる。実際に計算するときは右辺の分母$P(x_1, \cdots , x_n)$は定数なので、各カテゴリごとに分子だけ計算して、一番大きくなる（=確率が高い）カテゴリであると判定する。

### 計算例

下のような7つの文（教師データ）を与える。


| 含まれる単語   | カテゴリ |
|:--------------|:-------:|
| a, b, c       | A       |
| a, c          | A       |
| c             | A       |
| a             | A       |
| a, b          | B       |
| a             | B       |
| b             | B       |

この場合、それぞれの確率は以下になる

```math
\begin{align}
P(A) &= \frac{4}{7} \\
P(B) &= \frac{3}{7} \\
P(a | A) &= \frac{3}{4} \\
P(b | A) &= \frac{1}{4} \\
P(c | A) &= \frac{3}{4} \\
P(a | B) &= \frac{2}{3} \\
P(b | B) &= \frac{2}{3} \\
P(c | B) &= \frac{0}{3} \approx 0.01 \\
\end{align}
```

※確率が0になるところは、代わりに0.01（小さい確率）を割り振る。（今回は出現しなかったが、もっと数が大きいデータでは出現する可能性があるため）

ここで、以下のような新しい文がある場合のカテゴリがAなのかBなのか判定する。

| 含まれる単語   | カテゴリ |
|:--------------|:-------:|
| a             | ?       |

「$a$が含まれる」「$b$が含まれない」「$c$が含まれない」場合のカテゴリA, Bの確率（分母は省略）を計算すると

```math
\begin{align}
P(A | a, \bar{b}, \bar{c}) &\sim P(A) × P(a | A) × P(\bar{b} | A) × P(\bar{c} | A) \\
&= \frac{4}{7} × \frac{3}{4} × (1 - \frac{1}{4}) × (1 - \frac{3}{4}) \\
&= 0.080 \\
\end{align}
```

```math
\begin{align}
P(B | a, \bar{b}, \bar{c}) &\sim P(B) × P(a | B) × P(\bar{b} | B) × P(\bar{c} | B) \\
&= \frac{3}{7} × \frac{2}{3} × (1 - \frac{2}{3}) × (1 - 0.01) \\
&= 0.094 \\
\end{align}
```

となり、<font color="red">カテゴリは$B$と判定</font>する。

# 他リンク

最大事後確率（maximum a posteriori, MAP）推定: https://ja.wikipedia.org/wiki/%E6%9C%80%E5%A4%A7%E4%BA%8B%E5%BE%8C%E7%A2%BA%E7%8E%87