EPG's BLOG

某金融会社の社内SE。気になったことをちょいちょい書いていきます

データサイエンス講義 4章「スパムフィルタ、単純ベイズ、データランプリング」 その2

前回に引き続き、ベイズについて。

データサイエンス講義

データサイエンス講義

4.2.3 複数の単語を組み合わせたスパムフィルタ

メールに対応するベクトルをxとし、スパムであることをcとした場合、以下の様に示すことができる。
{
p(x|c) = \prod_{j}({\theta_{jc}}^{x_j} \times (1-{\theta_{jc}}^{(1-x_j)}))
}

θ(jc):単語jのスパムメールにおける算出割合
{x_j}:ベクトルxのj番目の単語が存在する場合に「1」、存在しない場合に「0」

確率の積を扱う際、対数にて表示するのが一般的であるため、両辺の対数をとる。

{
log(p(x|c)) = \sum_{j}(x_j \times w_j) + w_0
}

{w_j = log(\theta_j/(1-\theta_j))}
{w_0 = \sum_{j}log(1-\theta_j)}


ここから、ベイズの法則を利用。以下、再掲。
{p(c|x) = p(x|c) \times p(c)/p(x)}

p(x|c)は事前確率分布、p(c|x)は事後確率分布。

p(c)やp(x)は、容易に算出可能。
また、p(x|c)については、算出するθjは事前に算出できることから、比較的容易に計算可能。

4.3 ラプラススムージング

ラプラススムージング:事前分布を仮定し、最尤推定を行っているのと同じ。

ラプラススムージングに入る前に。
スパムメール中の単語θjの値のベクトルは、どのようなθでデータDが最尤になるか、以下の式で求める。
{\theta_{ML} = argmax_{\theta}p(D|\theta)}

単語の独立性を仮定した際、以下の式が最大となるθjを算出する。
{log(\theta_j^{n_{js}}(1-\theta_j)^{n_{jc}-n_{js}})}

{n_{js}}:ある単語がスパムメールに出てくる回数
{n_{jc}}:ある単語が全メールに出てくる回数

最大を求める際、上式を微分し、0となるθjを算出すると、以下。
{\hat{\theta_j} = n_{js}/n_{jc}}

次に、最大事後確率(Maximum a posteriori)を求める。
事前分布を用いて、以下のように表すことができる。
{\theta_{MAP} = argmaxp(\theta|D)}

ここでの事前分布p(θ)は、{\theta^{\alpha}(1-\theta)^{\beta}}と仮定する。
そうすると、以下の式が算出される。

{\hat{\theta_{jc}} = (n_{js} + \alpha)/(n_{jc} + \beta)}


■参考になるページ(学術的)
単純ベイズ(ナイーブベイズ)をより簡単に(?)説明した資料。
ラプラススムージングについて、少し分かりやすいかも。
http://mtml.info/post/28232319862/naivebayes