不均衡データに対するNaive BayesとComplement Naive Bayes, Negation Naive Bayesの比較

ちゃお・・・†

舞い降り・・・†

今回は、Naive BayesとComplement Naive Bayes, Negation Naive Bayesでの多クラス分類を比較したい思います。なお多クラス分類とは、文書  d がどのクラス  c に属しているかを求めることです。

それぞれの手法

Naive Bayes

Naive Bayesによる多クラス分類では、ベイズの定理を適用した事後確率  P(c|d) が最大となるクラス  {\tilde{c}} を求めます。ただ、 P(d|c) を直接推定するのは難しいので、文書  d を文書 dに含まれる単語列  w_1, w_2, ..., w_n で近似します。また、計算を簡単にするために各クラスで単語が独立に生起すると仮定します。 そして、最終的に以下の式によって文書 dの属するクラス {\tilde{c}}を求めます。

\begin{align} \tilde{c} = argmax_c P(c) \prod_{i=1}^{n} P(w_i|c) \end{align}

Complement Naive Bayes

上記のNaive Bayes分類器はクラス間の文書数に大きなばらつきがあると、文書数の小さいクラスで  P(w_i|c) が大きくなる傾向があり、小さなクラスに割り当てられやすくなる。また、文書数の少ないクラスでは、分類対象となる文書に含まれる単語が、そのクラスに含まれていないことが多くなり、モデルがスパースになりやすい。

これらの問題に対処するために改良したのが、Complement Naive Bayesです。Complement Naive Bayesでは、クラスに属さない単語 (補集合) を用いて分類を行います。

\begin{align} \tilde{c} = argmax_c P(c) \prod_{i=1}^{n} \frac{1}{P(w_i|\overline{c})} \end{align}

Naive Bayesのコードをちょっと変更するだけで実現できます ソース

くわしくは 新はてなブックマークでも使われてるComplement Naive Bayesを解説するよ - 射撃しつつ前転の説明がわかりやすいです。 あるいは、Tackling the poor assumptions of naive bayes text classifiers

Negation Naive Bayes

しかし、Complement Naive Bayesはヒューリスティックな解決法であって、事後確率最大化の式から導出することができないため、事後確率最大化の式から導出しつつ補集合を利用するNegation Naive Bayesが提案されました。

\begin{align} \tilde{c} = argmax_c \frac{1}{1 - P(c)} \prod_{i=1}^{n} \frac{1}{P(w_i|\overline{c})} \end{align}

こちらもNaive Bayesのコードをちょっと変更するだけで実現できます ソース

くわしくは、文書分類のための Negation Naive Bayes

比較

Yahoo!Yahoo! Web Directory Topicsを、livedoorlivedoor ニュースコーパスを指します。ただし、極端なばらつきのあるデータでの結果も見たいのでlivedoor ニュースコーパスでは、独女通信と家電チャンネルとS-MAX以外のデータを大幅に間引いています。

結果

くわしくはこちらこちら

precision

NB CNB NNB
iris 0.93 0.54 0.54
MNIST 0.84 0.74 0.74
20news 0.82 0.87 0.89
Yahoo! 0.71 0.73 0.73
livedoor 0.56 0.27 0.78

recall

NB CNB NNB
iris 0.9 0.7 0.7
MNIST 0.83 0.72 0.72
20news 0.74 0.85 0.89
Yahoo! 0.69 0.72 0.71
livedoor 0.51 0.48 0.66

f1-score

NB CNB NNB
iris 0.9 0.59 0.59
MNIST 0.83 0.71 0.71
20news 0.73 0.84 0.88
Yahoo! 0.69 0.72 0.71
livedoor 0.39 0.34 0.60

わかったこと

クラス数が少ない場合あるいはデータが密な場合はNBがよい。一方でクラス数が多い場合やクラス間のデータに偏りがある場合はCNBやNNBがよい。そしてCNBとNNBならNNBの方が良さそう。