ガウシアン ナイーブベイズ分類シミュレーター 戻る
機械学習シミュレーター

ガウシアン ナイーブベイズ分類シミュレーター — 2D 3クラス

2特徴量のガウシアン ナイーブベイズ分類器を可視化。各クラスの 1D 正規分布を独立と仮定し、対数事後を最大にするクラスを予測。決定境界と事後確率がリアルタイムに変化します。

パラメータ設定
クエリ点 x
クエリ点 y
σ シフト(全データ一律)
クラスあたりサンプル数 N

学習データは固定シード(seed=42)の決定論的 LCG で生成されます。クエリ点はキャンバスをクリックしても設定できます。

計算結果
予測クラス
最大事後確率 P(c*|x)
学習データ再代入精度
最大対数事後 log P(c|x)+log L
特徴空間と決定境界

背景色=argmax クラス領域/小丸=学習データ/大きい×=クラス平均/黒×=クエリ点(キャンバスをクリックで移動)

クエリ点の事後確率

各クラスの事後確率 P(c|x)。値はクエリ点を動かすと更新されます。

理論・主要公式

ガウシアン ナイーブベイズ分類器は、各クラス $c$ の各特徴量 $x_j$ が条件付き独立な正規分布 $\mathcal{N}(\mu_{cj},\sigma_{cj}^2)$ に従うと仮定します。

クラス条件付き対数尤度(特徴間の独立性を仮定):

$$\log p(\mathbf{x}\mid c) = \sum_{j=1}^{d}\left[-\tfrac{1}{2}\log(2\pi\sigma_{cj}^{2})-\tfrac{(x_j-\mu_{cj})^2}{2\sigma_{cj}^{2}}\right]$$

対数事後(Bayes の定理、正規化定数 $\log p(\mathbf{x})$ は省略可):

$$\log p(c\mid \mathbf{x}) = \log p(\mathbf{x}\mid c)+\log P(c)$$

予測クラスは対数事後を最大化:

$$\hat{c} = \arg\max_{c}\,\log p(c\mid \mathbf{x})$$

全クラスで $\sigma$ が等しいときは決定境界が線形(LDA と等価)、異なるときは 2 次曲面になります。

ガウシアン ナイーブベイズ分類シミュレーターとは

🙋
「ナイーブベイズ」ってよく聞くんですけど、なんで「ナイーブ(素朴)」って呼ばれるんですか?
🎓
ざっくり言うと「全部の特徴量はクラスがわかっていれば互いに独立」と仮定して計算するからだ。現実にはまずありえない仮定なんだけど、それを敢えて押し通すから「素朴な」分類器って呼ばれている。上のシミュレーターでも、x と y は別々の 1D ガウス分布として独立に扱っていて、合成尤度は単に和(対数で)で済むんだ。
🙋
それで「σ シフト」を動かすと背景の色分けが大きく変わりますね。σ を大きくすると、赤と緑の境目がもやっとして緑が広がります。
🎓
σ を大きくすると各クラスの「自信」が薄まって、事前確率(クラスごとのサンプル比)と距離だけで決まるようになる。今は 3 クラスとも N=30 で同じだから事前は等しい。だから境界はほぼ「最近傍のクラス中心」になる。逆に σ を小さくしすぎると、データが少しでも平均から外れると尤度が急減して境界が複雑になりすぎるよ。
🙋
クエリ点を (0,0) に置くと、赤と青の距離は同じ(√5)、緑だけ距離 2 で近いので緑になるんですね。事後確率も 45% くらいで他より高い。
🎓
そう、対数事後は緑が −4.94、赤と青が −5.44。差が小さいから softmax で 45% : 27% : 27% くらいになる。これが「自信が低い予測」の例だ。実務では「最大確率が 50% 未満なら判断保留」みたいな閾値を入れることが多い。クエリ点を (2,-1) のあたりに動かすと青が 90% 以上になって、自信のある予測に変わるよ。
🙋
「N」を 10 に下げると、学習データが少なくて推定 σ がばらつくから境界が歪みますね。これってどう使えばいいんですか?
🎓
良い気付きだ。サンプルが少ないと平均・分散の推定誤差が境界に直に出る。だから現場では「クロスバリデーション」で σ や事前確率を正則化(ベイズ事前を入れる)して、過学習を抑えるのが定石だ。シミュレーターで N=10 と N=60 を切り替えて、学習データ再代入精度がどれくらい変わるか見てみると感覚がつかめるよ。

よくある質問

厳密に独立な特徴は珍しく、多くの実問題では特徴量間に相関があります。にもかかわらず、ナイーブベイズはテキスト分類や医療診断など多くの応用で実用的な精度を出します。これは、決定境界の位置を決める argmax_c log P(c|x) は確率値そのものの正確さよりも順序の正しさだけを必要とするためです。共分散を含むモデル(線形・二次判別分析や GMM)が必要かは、データで AUC・対数損失を比較して判定します。
文書を単語の出現回数ベクトルで表現し、各クラスの単語ごとの確率を多項分布(Multinomial Naive Bayes)またはベルヌーイ分布で学習します。連続値ではなく離散カウントなのでガウシアンではなく多項モデルを使うのが標準です。スパム判定では「無料」「当選」などの語の条件付き確率が大きく異なるため、対数尤度の和が強い識別力を持ちます。短いメッセージで高い精度が必要なメール分類で長く使われてきました。
学習データ中に「クラス c で単語 w が一度も出現しない」場合、確率が 0 になり、log を取ると −∞ になって対数事後がそのクラスについて常に −∞ になってしまいます。ラプラススムージング P(w|c) = (N_wc + α)/(N_c + αV) を入れて、α>0 で 0 を回避します。本シミュレーターの連続版(ガウシアン)でも、σ が 0 に近づくと尤度が発散するため、σ シフトを下げすぎないようにしています。
全クラスで全特徴の σ が等しいときに限り、対数事後の差が x について線形となり、決定境界が直線(線形判別分析と等価)になります。クラスごとに σ が異なると −0.5·log(σ²) と (x−μ)²/(2σ²) の項が残り、境界は 2 次曲面(双曲線・放物線・楕円)になります。本シミュレーターの初期値は全クラス σ=1 なので、初期表示の境界はほぼ直線ですが、σ シフトを大きくすると曲がりが弱まり、サンプル数を変えると各クラスの推定 σ がばらついて境界が曲がります。

実世界での応用

スパムメール・テキスト分類:ナイーブベイズが最も成功した応用です。文書を単語の出現回数ベクトルで表し、各語が独立に発生すると仮定すると、対数事後が単語ごとの寄与の和になり、極めて高速に判定できます。Bag-of-Words や TF-IDF と組み合わせて、現代の機械学習以前から商用スパムフィルタの定番として長く使われてきました。

医療診断の補助:症状や検査値を特徴量、疾患をクラスとして、各症状が独立と仮定すると、患者の所見から最も尤もらしい疾患のランキングを得られます。条件付き確率の解釈が明示的で、医師が結果を検証しやすいという利点があり、決定支援システムの素朴な基準モデルとして使われます。

異常検知の初期スクリーニング:2 クラス(正常/異常)のガウシアン ナイーブベイズは、計算量がほぼゼロで導入が容易なため、製造ラインのセンサデータや IT システムのログから外れ値候補を高速にふるい分ける目的でよく採用されます。後段に精度の高いモデル(XGBoost や深層学習)を置く 2 段構成が実務的です。

自然言語処理の基準モデル:感情分析・トピック分類・言語識別といった NLP タスクで、新しい深層モデルの性能を比較する「ベースライン」として今も用いられます。学習が線形時間で済み、解釈性が高く、少量データでも崩れにくい性質は、最先端モデルの優位性を主張する際の公平な比較対象として有用です。

よくある誤解と注意点

最も多い誤解は、独立仮定が崩れているからナイーブベイズは「使えない」と決めつけることです。実際には独立仮定が明らかに崩れているテキストデータでも、ナイーブベイズは驚くほど良い精度を出します。これは、決定境界に必要なのは確率値そのものではなく argmax の順序だけだからです。確率の絶対値の校正(calibration)が大事な用途(リスク評価など)では弱いですが、ハード分類だけなら相関のある特徴量でも実用的です。シミュレーターで σ シフトを変えながら学習データ再代入精度を眺めると、決定境界が多少歪んでも精度はあまり落ちないことが体感できます。

次に多いのが、出力された事後確率を「真の確率」と読んでしまう誤りです。ナイーブベイズの確率出力は、独立仮定が崩れていると 0 と 1 に偏りやすく、「90% 確実」と表示されても実際の正解率は 65% といったことが起こります。確率値が必要な場面では、Platt スケーリングや Isotonic 回帰で校正するのが定石です。本シミュレーターで、距離がほぼ同じ点でも最大確率がすぐ 90% を超えてしまう様子を見ると、過信のリスクが具体的にイメージできます。

最後に、σ や事前確率を学習データだけで素直に最尤推定すると小サンプルで不安定になる点です。N を 10 に下げて境界の歪みを確認してください。実務では事前分布(共役事前)を入れた MAP 推定や、特徴量を標準化したうえで σ にラプラス的な下限を設けるのが定石です。本シミュレーターでも σ シフトに +0.05 を入れて分散の下限を底上げすると、決定境界が滑らかになります。「ナイーブ」だからといって、推定の頑健化を怠ると過学習に直結します。