今回は,データマイニングの学習手法のひとつである,Naive Bayes(ナイーブベイズ)について説明します.
Naive Bayesは属性(attribute)を解析し,識別をするための手法です.
天気(天候,温度,湿度,風)から「テニスをする(yes)かしないか(no)」を識別するという有名な例があるので,この問題をベースに説明していきます.(下図参照)

まずはMAP推定とNaive Bayesの関係を見てみましょう.
下はMAP推定です.

θは識別対象で,ここで言うと"yes"か"no"に,xは属性,ここでは"天候","温度","湿度","風"の要素です.
与えられた天候,温度,湿度,風から,テニスをするかどうかを数値として算出します.
この式を,ベイズ推定を用いて変形すると,

となります.
学習ではP(θi)とP(x1...xn|θi)を求めるわけなのですが,P(x1...xn|θi)の組み合わせを一つずつ確定させるには多くの学習サンプルが必要になります.ちょっと属性が増えたりすると,その数は膨大になります.
そこで,Naive Bayesが取り入れられてきました.
Naive Bayesは属性間の出現に依存性はない,つまり属性間は独立と仮定することで,学習を簡単にしようという方法です.
独立とみなす,つまり,P(x1...xn|θi)は以下のように書き変えられます.

よって,Naive Bayesは

という式で示されます.
P(θ),P(xi|θ)は簡単に求められます.
P(θ)は全体の総数のうち,その状態"yes","no"がいくつあるか?ここでは総数が14, yesが9,noが5なので,
P(θ="yes")=9/14,P(θ="no")=5/14となります.
P(xi|θ)は識別対象のうちの属性の確率,例えば識別対象が"yes"(yesの数:9)の時の天気の属性"Sunny","Overcast","Rainy"があらわれる確率はそれぞれ,
P(Overlook="Sunny"|θ="yes")=2/9,P(Overlook="Overcast"|θ="yes")=4/9,P(Overlook="Rainy"|θ="yes")=3/9です.
全ての確率の計算は省略します(すいません!)が,この例では,
overlook=sunny, temperature=cool, humidity=highからyesかnoを識別しています.
yesの場合
P(Overlook="Sunny"|θ="yes")*P(temperature="cool"|θ="yes")*P(humidity="high"|θ="yes")*P(θ="yes")
= (2/9)*(3/9)*(3/9)*(3/9)*(9/14)=0.0053
noの場合
P(Overlook="Sunny"|θ="no")*P(temperature="cool"|θ="no")*P(humidity="high"|θ="no")*P(θ="no")
= (3/5)*(1/5)*(4/5)*(3/5)*(5/14)=0.0206
正規化すると,
0.0053/(0.0053+0.0206) = 0.205(yes)
0.0206/(0.0053+0.0206) = 0.795(no)
よって,ここでは値の高い"no"が識別結果となるわけですね.
Naive Bayesは学習が簡単なため(ここでは出現確率を求めて積をとるだけ),学習がとても早く,しかも学習データ数が少なくて済みます.
実装もとても簡単です.
さらに,精度もそこそこ出るので実際に使われている例も多いようです.
もし属性間が完全に独立であるならばMAP推定と等価,となりますね.
[参考]