目的
スパムフィルタで説明する やりたいこと:
やりたいこと: 「AとBの情報から、S=0かS=1かを判定する」 確率の言葉で表現すると 「AとBが与えられたときの、Sの条件付き確率を求める」
これをどうやって求めるか? ベイズの定理を使うと以下の等式が成り立つ。
ここまでただのベイズ。 ここまでは単語はAとBの2種類だけだった。 一般には単語はたくさんある。仮に100個あるとすると $P(A_1, A_2, ... , A_{100}|S)$ は$2^{100}$ 通りの値を持つ。まあ無理だな。 そこで$P(A_1, A_2, ... , A_{100}|S)$を$P(A_1|S)\times P(A_2|S)\times ... \times P(A_{100}|S)$ で近似しちゃう。
tf-idfとの関係 $P(A_1|S)$は「スパムである文章に単語A1が出現する確率」だった。 tfとは「スパムである文章に単語A1が出現する回数」になる。「出現したら1、しなければ0」という重みの付け方をして、全部足し合わせてから総文書数で割れば$P(A_1|S)$になる。 $P(A_1)$は「任意の文章に単語A1が出現する確率」だった。 idfは「全ての文章に単語A1が出現する回数の逆数」になる。これも同様にバイナリー重みづけをして足し合わせて総文書数で割れば$P(A_1)$になる。 ベイズ則の分子と分母に現れているので「総文書数で割る」は定数倍だから約分されて消える。
BernoulliNBとGaussianNBの違い $P(A_1|S)$ っていう確率分布がどういう形か、の違い。 今回の例ではスパムメール中の単語の出現有無だったので「出現する、しない」の0/1の値を取る分布だった。これはベルヌーイ分布なのでBernoulliNBを使うのが自然。 たとえばキノコが毒キノコかどうかを識別したい、というケースでは説明変数が「毒キノコであるときの傘の大きさ」「毒キノコであるときの傘の赤み」みたいな連続の値を取ることもあろう。そういうケースでこの値が正規分布に従うだろうと考えるのがGaussianNB。適当な閾値で0/1に変換してベルヌーイ分布として扱うこともできる。その場合はBernoulliNB。
#機械学習