確率・分布●●●●○

ナイーブベイズ

Naive Bayesないーぶべいず

特徴の条件付き独立を仮定した単純なベイズ分類器。速くて意外に強い

概要

ナイーブベイズは、ベイズの定理を使って「観測された特徴から、それがどのカテゴリに属するか」の確率を計算する分類器です。代表的な応用がスパムフィルタで、メールに含まれる単語という特徴から「このメールがスパムである確率」を求めます。名前の「ナイーブ(単純)」は、「カテゴリが決まれば、各特徴は互いに独立に現れる」という大胆な仮定を置くことに由来します。

この仮定は現実にはまず成り立ちません。「無料」という単語が出るメールには「今すぐ」も出やすい、というように単語同士は相関するからです。それでもナイーブベイズは実用上驚くほどよく機能し、学習も予測も高速で、少ないデータでも動きます。「明らかに間違った仮定を置いた単純なモデルが、精巧なモデルに匹敵する」ことの代表例として、機械学習のベースライン(まず試す基準手法)の定番になっています。

なぜ生まれたか

特徴からカテゴリを当てる分類を確率で厳密にやろうとすると、「あるカテゴリのもとで、この特徴の組み合わせ全体が現れる確率」、すなわち特徴の同時分布が必要になります。ところが特徴が増えると組み合わせは爆発します。単語1万種類の有無でメールを表すと、パターンは2の1万乗通り。その一つひとつの確率をデータから推定するのは、どれだけデータを集めても不可能です(次元の呪い)。

そこで「カテゴリが与えられれば特徴は互いに独立」と割り切るのがナイーブベイズの解決策です。条件付き確率の積として同時確率を分解できるようになり、推定すべきものは「カテゴリごとの、各特徴の出現確率」だけになります。1万単語なら1万個×カテゴリ数の確率を数えるだけで、組み合わせ爆発が消えるのです。この発想は1960年代に文書分類や医療診断の文脈で使われ始め、1990年代後半にスパムフィルタの実装(Paul Graham の「A Plan for Spam」が有名です)で一般にも広く知られるようになりました。

詳細

仕組み — 事前確率×尤度の積

分類のルールはベイズの定理そのものです。カテゴリ C の事後確率は、「C の事前確率」×「C のもとで各特徴が現れる確率の積」に比例します。スパム判定なら、(1) 訓練データ中のスパムの割合を事前確率とし、(2) スパム内・非スパム内それぞれで各単語の出現率を数えておき、(3) 新しいメールが来たら、含まれる単語の出現率をカテゴリごとに掛け合わせ、(4) 事後確率が大きいほうのカテゴリに割り当てます。学習は「数えるだけ」であり、これは各確率の最尤推定に相当します。実装では確率の積がすぐに極小値になるため、対数を取って足し算にするのが定番です。

カテゴリ Cスパム / 非スパム単語「無料」特徴 x₁単語「今すぐ」特徴 x₂単語「請求」特徴 x₃特徴 xₙ特徴間の依存は「ない」とみなすカテゴリごとに各特徴の出現確率だけを数える
ナイーブベイズの構造 — カテゴリが決まれば各特徴は独立に現れる、とみなして矢印を1方向に単純化する

仮定は間違っているのに、なぜ当たるのか

条件付き独立の仮定が破れていると、事後確率の「値」は歪みます。相関する単語群の証拠を重複して数えてしまうため、確率が過剰に0や1へ近づくのです。しかし分類で最終的に必要なのは「どのカテゴリの事後確率が最大か」という順位だけです。確率の値が歪んでいても大小関係が保たれていれば分類は当たります。実際、多くのテキスト分類でナイーブベイズはこの理由により高い正解率を保ちます。裏を返せば、ナイーブベイズの出力する「99.9%スパム」といった数値を確率として真に受けてはいけない、ということでもあります。確率の値そのものが必要な場面では較正(キャリブレーション)という補正が必要です。

ゼロ頻度問題とスムージング

学習データ中のスパムに一度も現れなかった単語が新着メールに含まれると、その出現確率が0と推定され、掛け算全体が0になって他のすべての証拠が消し飛びます。これがゼロ頻度問題です。定番の対策はラプラススムージングで、全単語の出現回数にあらかじめ1(または小さな α)を足してから確率を計算します。これはベイズ推論の観点では、出現確率に一様寄りの事前分布を置いた事後平均に相当します。「観測ゼロ=確率ゼロ」と即断しない、というベイズ的な慎重さが単純な足し算で実現されているわけです。

変種と使いどころ

特徴の性質に合わせていくつかの変種があります。単語の出現回数を使うなら多項ナイーブベイズ、出現の有無だけならベルヌーイ型、連続値の特徴なら各特徴がカテゴリごとに正規分布に従うと仮定するガウシアンナイーブベイズです。いずれも学習はデータを1回走査して数えるだけなので、大規模データでも高速で、新しいデータが来たら数え直すだけで更新できます。

実務での立ち位置は「最初に置くベースライン」です。テキスト分類のような高次元・疎な特徴で、訓練データが少ない状況ではいまでも十分戦えます。一方、特徴間の相互作用そのものが判別の鍵になる問題(単語の組み合わせや語順が意味を変えるケース)は苦手で、そうした場面ではより表現力の高いモデルに譲ります。それでも「複雑なモデルがナイーブベイズに勝てているか」を確かめることは、モデル選択の健全な出発点であり続けています。