不均衡データに対するNaive BayesとComplement Naive Bayes, Negation Naive Bayesの比較
ちゃお・・・†
舞い降り・・・†
今回は、Naive BayesとComplement Naive Bayes, Negation Naive Bayesでの多クラス分類を比較したい思います。なお多クラス分類とは、文書 がどのクラス に属しているかを求めることです。
それぞれの手法
Naive Bayes
Naive Bayesによる多クラス分類では、ベイズの定理を適用した事後確率 が最大となるクラス を求めます。ただ、 を直接推定するのは難しいので、文書 を文書に含まれる単語列 で近似します。また、計算を簡単にするために各クラスで単語が独立に生起すると仮定します。 そして、最終的に以下の式によって文書の属するクラスを求めます。
\begin{align} \tilde{c} = argmax_c P(c) \prod_{i=1}^{n} P(w_i|c) \end{align}
Complement Naive Bayes
上記のNaive Bayes分類器はクラス間の文書数に大きなばらつきがあると、文書数の小さいクラスで が大きくなる傾向があり、小さなクラスに割り当てられやすくなる。また、文書数の少ないクラスでは、分類対象となる文書に含まれる単語が、そのクラスに含まれていないことが多くなり、モデルがスパースになりやすい。
これらの問題に対処するために改良したのが、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を、livedoorはlivedoor ニュースコーパスを指します。ただし、極端なばらつきのあるデータでの結果も見たいので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の方が良さそう。