2013年2月20日水曜日

ナイーブベイズ


ナイーブベイズとは、入力文書の各単語に対して、
カテゴリー別に単語出現頻度を調べることによってカテゴリを推定する方法です。

うーん、この書き方ですと、分かりづらいですよね・・・^^;
多少具体的な例を挙げて説明してみますね。

例えば、入力文書を、野球カテゴリー/野球以外のカテゴリーの
どちらかに振り分けることを考えます。

まず、野球カテゴリー,野球以外のカテゴリーの単語出現頻度を予め求めます。
ここで、単語出現頻度は、1文書あたりに登場する平均単語数を指します。
例えば、野球カテゴリーの単語出現頻度は、各単語において、
文書に登場した回数を数え、これを文書数で割ることによって得られます。
この単語出現頻度を、野球カテゴリー,あるいは野球以外のカテゴリーの特徴
であるとします。

次に、入力文書を、どちらかのカテゴリーのいずれかに振り分けることを考えます。
文書に登場した各単語において、単語出現頻度を全て抽出し、これら全てを積算します。
これを各カテゴリーで行っておきます。

すると、入力文書が野球カテゴリーである確率と、
野球以外のカテゴリーである確率の両方が求まります。
この2つの確率を比較し、大きい方を入力文書の属するカテゴリとして出力します。


数式で書くと、評価関数f(w1,・・・,wn)が非負だったら野球カテゴリ。
負だったら野球以外のカテゴリ、と判断することになります。

f(w1,・・・,wn) = P(w1)P(w2)・・・P(wn) - Q(w1)Q(w2)・・・ Q(wn)   ・・・(式1)

ここで、

 P(wi)は、野球カテゴリーである場合の単語wiの出現頻度
 Q(wi)は、野球以外のカテゴリーである場合の単語wiの出現頻度、

をそれぞれ表します。



本来は、文書Dが野球カテゴリC1に属する確率P(C1|D),
野球以外のカテゴリC2に属する確率P(C2|D)を比較するのが妥当です。

しかし、文書Dが前提となる各カテゴリの条件付き確率を求めるためには、
実際に文書Dの特徴に極端に似ているパターンを探して、
それがカテゴリC1とカテゴリC2のどちらに属するのかを
さらに探していくことになるので、現実的には求められないものと思われます。

そこで、ベイズの定理を使って、カテゴリに属する条件の下での
確率値を求める問題にすり替えます。

ベイズの定理より、 P(C1|D)は

 P(C1|D) = P(D|C1)・P(C1)/P(D)

となります。P(C2|D)も同様です。

ここで、P(D|C1)は、クラスC1を条件とした下での文書Dが出現する確率となりますので、
予めクラスC1に属する文書を集めて確率値を求めておけば、
文書DがクラスC1に属する 確率として求めることができます。

P(D)は、C1やC2に依らない数値ですので、比較するだけだったら無視できます。

P(C1)は、C1とC2の出現する比率を表しますが、データサンプルの数が無限にあると
仮定すれば、C1とC2は等しくなるという強引な仮定を立てられるため、
P(C1) ≒ P(C2)と表現することができ、この影響も考えずに済むことになります。

このため、P(C1|D)を求める問題は、P(D|C1)を求める問題にすり替えられます。

ただ、文書Dは、そのものを数値化された特徴として表現できません。
そのため、文書Dに出現した各単語の出現頻度の積を、P(D|C1)として
扱うようにします。

この結果、式1による評価をすれば、文書DがカテゴリC1, C2のどちらに
属するのかが分かる、ということになります。



集合知プログラミングによると、
ナイーブベイズを導入することによって、
スパムメール判定の性能が格段に上がったという
実験結果があるという旨のことが書いてありました。

クラス分類問題へのアプローチとしては、とても単純ではありますが、
最終的には性能が出せれば良いのですから、
利用する側の方々にとっては御の字でしょうね。


そんなわけで、次回はナイーブベイズを使ったRのソースコードを
晒してみたいと思います。

0 件のコメント:

コメントを投稿