ナイーブベイズのアルゴリズムをアウトプットのために,この記事にまとめておきます.
間違い,わかりにくい点等ございましたら,ご指摘頂けると幸いです.
#1, 概略
ある文書dが存在するとき,そのdがどのクラスに分類されるかを,文書内に出現する単語の頻度を用いて判別を行う機械学習になります.
このアルゴリズムを使うことで,
新規の文書に対して
- 文書内に「イチロー」や「ヒット」という単語が多く出現すれば,野球というカテゴリ.
- 文書内に「本田圭佑」や「シュート」という単語が多く出現すればサッカーというカテゴリ
にそれぞれ分類されます.
本当にそんなことが出来るのでしょうか.
重要なポイントは
- 最尤推定
- 最大事後確率推定(MAP推定)
の2点です.
まずはこの2点を具体例とともに見ていきましょう.
#2, まず,最尤推定とは
最尤推定とは,
得られたデータから最もそれが起こるに違いないと考えられる事象が起こる確率θの値を推定することです.
具体例で説明します.
ここにコインがあります.
このコインを投げたら10回中7回表が出ました.
さて,このコインが表が出る確率θはどのくらいでしょうか.
このときの,θの値を求めることが最尤推定です.
一般的に考えれば,θ=1/2であると思いますが,この状況では,そうとも限りません.
ここでは,簡単のためにn=4として最尤推定を行ってみたいと思います.
表のθは表の出る確率を表します.
θ | 表 | 裏 | 表 | 表 | 尤度 |
---|---|---|---|---|---|
0.0 | 0 | 1 | 0 | 0 | 0 |
0.1 | 0.1 | 0.9 | 0.1 | 0.1 | 0.0009 |
0.2 | 0.2 | 0.8 | 0.2 | 0.2 | 0.0064 |
0.3 | ... | ... | ... | ... | ... |
0.4 | ... | ... | ... | ... | ... |
0.5 | 0.5 | 0.5 | 0.5 | 0.5 | 0.0625 |
0.6 | 0.6 | 0.4 | 0.6 | 0.6 | 0.0864 |
0.75 | 0.75 | 0.25 | 0.75 | 0.25 | 0.1054 |
0.8 | 0.8 | 0.2 | 0.8 | 0.8 | 0.1024 |
... | ... | ... | ... | ... | ... |
1 | 1 | 0 | 1 | 1 | 0 |
尤度とは,あるθのときに,今起こった事象が起こりうる確率を表します.
すなわち
尤度=P(表)P(裏)P(表)P(表)
で求まります.それぞれのθの値によって,この尤度が分布することを確率分布と言ったりします.
今回の例でいうと,θ=0.75のときの,0.1054が1番尤度が高いθ(表が出る確率)になりそうです.
この結果の意味するところは,
もし,コインの表,裏が出る確率が1/2であると知らないときに,目の前のコインを4回投げて,3回表が出たら,このコインの表が出る確率は,0.75であると判断するであろう,
ということです.
実際にこれは,確率を微分しても求まります.
P(表|θ)=θ^3(1-θ)
\frac{d}{dθ} = \frac{d}{dθ}P(表|θ) = \frac{d}{dθ}θ^3(1-θ)
=3θ^2 - 4θ^3
=0
と置くと
θ=0,3/4
と求まります.
この最もらしいθを求める考え方をナイーブベイズを適用する際に,用いることになります.
#3,簡単なナイーブベイズをやってみよう
##学習,判別用の文書
最大事後確率の説明は後半に説明するとして,
簡単なナイーブベイズの問題を解いてみます.
ここに野球とサッカーの記事がそれぞれ3つずつあります.
ナイーブベイズでは,それぞれの記事が単語だけで構成されると仮定します.
-野球の記事3つ
d^{(1)} =「ヒット」, 「投手」,「ヒット」,「ヒット」\\
d^{(2)} = 「ヒット」,「ホームラン」,「投手」,「シュート」\\
d^{(3)} =「投手」,「パス」,「ヒット」,「ホームラン」\\
-サッカーの記事3つ
d^{(4)} =「パス」, 「シュート」,「ヒット」,「パス」\\
d^{(5)} = 「パス」,「ホームラン」,「ドリブル」,「シュート」\\
d^{(6)} =「投手」,「パス」,「シュート」,「ドリブル」,「シュート」\\
-次の文書dはサッカーと野球のどちらのものか予測したいとします.
d^{(7)} = 「ヒット」,「ホームラン」,「投手」,「ヒット」\\
d^{(8)} =「パス」, 「シュート」,「ヒット」,「ホームラン」\\
d(7)は,野球の単語が多いので,野球カテゴリに分類されてほしいですね!
d(8)は,サッカーっぽい単語も,野球っぽい単語も二つずつ出てきています. どちらのカテゴリに分類されるのでしょうか.
##モデルの統計値を学習する
クラス名c={「野球」,「サッカー」}
単語名w={「ヒット」,「ホームラン」 ,「投手」 ,「シュート」,「パス」,「ドリブル」}として
文書内の単語の出現頻度を表にしてまとめてみます.
||単語名w|「ヒット」|「ホームラン」 |「投手」 |「シュート」|「パス」|「ドリブル」|計|
|------|------|------|------|------|------|------|------|------|------|
| 出現頻度|野球|4|2|3|1|1|1|12|
||サッカー|1|1|1|4|4|2|13|
次に各クラスcの中で,各単語が出現する確率P(w|c)を算出します.
これは,事前確率と呼ばれ, 条件付き確率を使って表現します. 各単語がそれぞれのカテゴリ(今回は野球とサッカー)内でどのくらいの割合を占めているかを意味しています.
条件付き確率,事前確率に関しては,
こちらの記事を参考にしてみてください.
-条件付き確率(https://mathtrain.jp/jyokentsuki)
-事前分布(https://ja.wikipedia.org/wiki/%E4%BA%8B%E5%89%8D%E7%A2%BA%E7%8E%87)
||単語名w|「ヒット」|「ホームラン」 |「投手」 |「シュート」|「パス」|「ドリブル」|計|
|------|------|------|------|------|------|------|------|------|------|
| 確率P|野球|4/12|2/12|3/12|1/12|1/12|1/12|1|
||サッカー|1/13|1/13|1/13|4/13|4/13|2/13|1|
実際に野球に関する単語は野球のカテゴリにおいて,事前確率が高くなっていることが分かりますね!
(サッカーも同じことが言えます.)
##モデルを使って文書を判別しよう!
では,ここで作成した統計的な事前確率で構成されるモデルを用いて,d(7)とd(8)がそれぞれどちらのクラスに分類されるか見ていきましょう!
###野球の記事を分類する
d(7)が野球のカテゴリだとした場合,
P(c=野球|d(7))
= P(「ヒット」|「野球」) * P(「ホームラン」|「野球」)*P(「投手」|「野球」)*P(「ヒット」|「野球」)
= 4/12 * 2/12 * 3/12 * 4/12
= 1/216
= 0.00463
d(7)がサッカーのカテゴリだとした場合,
P(c=サッカー|d(7))
= P(「ヒット」|「サッカー」) * P(「ホームラン」|「サッカー」)*P(「投手」|「サッカー」)*P(「ヒット」|「サッカー」)
= 1/13 * 1/13 * 1/13 * 1/13
= 0.0000350
d(7)の文書に関しては,
P(c=野球|d(7)) > P(c=サッカー|d(7))
なので, 野球のカテゴリに属する可能性が高いとモデルは判定しました.
僕たちの直感とも合致していますね!
このP(カテゴリ名c|文書名d)の表記の仕方は,先程も出てきた条件付き確率を用いた表記になっています.
イメージ的には,
ある文書dが存在したときに,その文書がカテゴリcに分類される確率
と捉えられるといいと思います.
###カテゴリが曖昧な記事を分類する
次にd(8)の文書に対して,
d(8)が野球のカテゴリだとした場合,
P(c=野球|d(8))
= P(「パス」|「野球」) * P(「シュート」|「野球」)*P(「ヒット」|「野球」)*P(「ホームラン」|「野球」)
= 1/12 * 1/12 * 4/12 * 2/12
= 8/20736
= 0.0003858
d(8)がサッカーのカテゴリだとした場合,
P(c=サッカー|d(7))
= P(「パス」|「サッカー」) * P(「シュート」|「サッカー」)*P(「ヒット」|「サッカー」)*P(「ホームラン」|「サッカー」)
= 4/13 * 4/13 * 1/13 * 1/13
= 16/28561
= 0.0005602
少しサッカーのカテゴリに属する確率が高いという結果を得られました.
サッカーっぽい単語も,野球っぽい単語も混じっていたので,おおよそ同じぐらいの確率値を持つであろうというのは,直感にも合っています.
このように,ナイーブベイズを直感的に理解すると,
判別する文書に対して,各クラスごとに,
文書を構成する各単語の出現確率をそれらの掛け算を取った結果,
他のクラスと比較して,その確率値が一番高くなるクラスに分類される.
ということが言えます.
少しわかりにくいでしょうか.
野球カテゴリに出てくる単語がたくさん出現すれば,野球のカテゴリ
サッカーカテゴリに出てくる単語がたくさん出現すれば,サッカーのカテゴリ
にそれぞれ分類される.
ということです.ざっくりしすぎですかね,,
今回では,ナイーブベイズの定式化まで書ききれなかったので,
次の回では,定式化して,より一般的な場合に対応出来るようにしたいと思います.