MENU

【無料プレゼント付き】学会発表・論文投稿に必要な統計を最短で学ぶことができる無料メルマガ

ベイズの定理とナイーブベイズ:機械学習の基礎を理解する


機械学習の分野には、様々な強力なアルゴリズムが存在する。中でも特に理解しやすいものの一つがナイーブベイズだ。ナイーブベイズは、あの有名なベイズの定理をベースにしており、スパムメールの分類から医療診断まで、幅広い分野で活用されている。この記事では、ベイズの定理の基本からナイーブベイズの仕組み、そして具体的な計算例までを分かりやすく解説する。


>>もう統計で悩むのは終わりにしませんか? 

↑1万人以上の医療従事者が購読中

目次

ナイーブベイズの概略

ナイーブベイズは、名前にもある通り、ベイズの定理を基礎とする分類アルゴリズムだ。ベイズの定理は、ある事象が起こったという条件のもとで、別の事象が起こる確率(条件付き確率)を更新するための数学的な枠組みを提供する。

ベイズの定理は以下の式で表される。

$$ P(A∣B) = \frac{P(B∣A)P(A)​}{P(B)} $$

ここで、

  • $ P(A|B) $: 事象Bが起きたという条件下で事象Aが起きる確率(事後確率
  • $ P(B|A) $: 事象Aが起きたという条件下で事象Bが起きる確率(尤度
  • $ P(A) $: 事象Aが起きる事前確率(事前確率
  • $ P(B) $: 事象Bが起きる事前確率

ナイーブベイズが「ナイーブ(単純)」と呼ばれる理由は、各特徴量(変数)が互いに独立であるという強い仮定を置くためだ。この仮定は現実の世界では必ずしも成り立たないが、多くの場合、この単純化されたモデルでも非常に優れた性能を発揮する。

ナイーブベイズ分類器は、与えられたデータがどのクラスに属するかを予測する際に、各クラスに属する確率をベイズの定理に基づいて計算し、最も確率の高いクラスを予測結果とする。


具体例と R 計算例

では、具体的な例を通してナイーブベイズの動作を理解しよう。今回は、ある人が「風邪をひいているか」どうかを予測する簡単な例を考える。予測には、「咳が出ているか」と「鼻水が出ているか」という2つの特徴量を使う。

以下のデータがあると仮定する。

状態鼻水
風邪はいはい
風邪はいいいえ
風邪いいえはい
健康いいえいいえ
健康いいえはい

新しい患者が「咳:はい」と「鼻水:はい」という症状を示しているとき、この患者が「風邪」である確率はどれくらいだろうか?

まず、各確率を計算する。

事前確率:

  • $ P(\text{風邪}) = 3/5 = 0.6 $
  • $ P(\text{健康}) = 2/5 = 0.4 $

尤度(風邪の場合):

  • $ P(\text{咳=はい}∣\text{風邪}) = 2/3 $
  • $ P(\text{鼻水=はい}∣\text{風邪}) = 2/3 $

尤度(健康の場合):

  • $ P(\text{咳=はい}∣\text{健康}) = 0/2 = 0 $
  • $ P(\text{鼻水=はい}∣\text{健康}) = 1/2 = 0.5 $

ここで、ナイーブベイズの独立性の仮定を適用する。

$ P(\text{咳=はい,鼻水=はい}∣\text{風邪}) = P(\text{咳=はい}∣\text{風邪}) \times P(\text{鼻水=はい}∣\text{風邪}) = (2/3) \times (2/3) = 4/9 $

$ P(\text{咳=はい,鼻水=はい}∣\text{健康}) = P(\text{咳=はい}∣\text{健康}) \times P(\text{鼻水=はい}∣\text{健康}) = 0 \times 0.5 = 0 $

最後に、ベイズの定理を使って事後確率を計算する。

$ P(\text{風邪}∣\text{咳=はい,鼻水=はい}) \propto P(\text{咳=はい,鼻水=はい}∣\text{風邪}) \times P(\text{風邪}) = (4/9) \times 0.6 = 0.266… $

$ P(\text{健康}∣\text{咳=はい,鼻水=はい}) \propto P(\text{咳=はい,鼻水=はい}∣\text{健康}) \times P(\text{健康} ) = 0 \times 0.4 = 0 $

このままだと$ P(\text{健康}|\text{咳=はい, 鼻水=はい}) $が0になってしまうため、ラプラススムージングなどを適用することもあるが、ここでは単純に計算を進める。

どちらも確率の合計で正規化する。合計値 0.266… + 0 = 0.266… で割ることで正規化できる。その結果、咳と鼻水が「はい」の場合、風邪の確率は1、健康の確率は0という単純な値になる。


R 計算例

Rで計算する場合、e1071パッケージのnaiveBayes関数が便利だ。

R スクリプト例:

# データを準備
data <- data.frame(
    状態 = factor(c("風邪", "風邪", "風邪", "健康", "健康")),
    咳 = factor(c("はい", "はい", "いいえ", "いいえ", "いいえ")),
    鼻水 = factor(c("はい", "いいえ", "はい", "いいえ", "はい"))
)

# ナイーブベイズモデルの作成
library(e1071)
model <- naiveBayes(状態 ~ 咳 + 鼻水, data = data)

# 新しいデータの予測
new_data <- data.frame(
    咳 = factor("はい", levels = levels(data$咳)),
    鼻水 = factor("はい", levels = levels(data$鼻水))
)

predict(model, new_data, type = "raw")

実行結果:

> predict(model, new_data, type = "raw")
             健康      風邪
[1,] 0.0007494379 0.9992506

結果解釈

Rの計算結果を見ると、$ P(\text{健康}|\text{咳=はい, 鼻水=はい}) $ が極めて小さく、$ P(\text{風邪}|\text{咳=はい, 鼻水=はい}) $がほぼ1であることがわかる。これは、手動で計算した結果(0 と 1)と一致しており、この症状の患者は「風邪」であると強く予測されることを示している。

ナイーブベイズは、特徴量が独立であるという仮定を持つため、各特徴量の影響を単純に掛け合わせることで予測を行う。この単純さゆえに、計算コストが低く、大規模なデータセットにも適用しやすいという利点がある。


>>もう統計で悩むのは終わりにしませんか? 

↑1万人以上の医療従事者が購読中

まとめ

この記事では、ベイズの定理の基本的な考え方から、それを応用したナイーブベイズ分類器の仕組み、そして具体的な計算例までを解説した。ナイーブベイズは、その名の通り「ナイーブ」な仮定を置くものの、そのシンプルさと効率性から、現在でも様々な分類問題で有効なツールとして活用されている。

ベイズの定理とナイーブベイズを理解することは、機械学習の基盤となる確率論的推論の考え方を身につける上で非常に重要だ。ぜひ、さらに深掘りして、他の機械学習アルゴリズムの学習にも役立ててみてほしい。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

リサーチクエスチョン探し?データ分析?論文投稿?、、、で、もう悩まない!

第1章臨床研究ではなぜ統計が必要なのか?計画することの重要性
  • 推定ってどんなことをしているの?
  • 臨床研究を計画するってどういうこと?
  • どうにかして標本平均を母平均に近づけられないか?
第2章:研究目的をどれだけ明確にできるのかが重要
  • データさえあれば解析でどうにかなる、という考え方は間違い
  • 何を明らかにしたいのか? という研究目的が重要
  • 研究目的は4種類に分けられる
  • 統計専門家に相談する上でも研究目的とPICOを明確化しておく
第3章:p値で結果が左右される時代は終わりました
  • アメリカ統計協会(ASA)のp値に関する声明で指摘されていること
  • そうは言っても、本当に有意差がなくてもいいの…?
  • なぜ統計専門家はp値を重要視していないのか
  • 有意差がない時に「有意な傾向があった」といってもいい?
  • 統計を放置してしまうと非常にまずい
第4章:多くの人が統計を苦手にする理由
  • 残念ながら、セミナー受講だけで統計は使えません。
  • インプットだけで統計が使えない理由
  • どうやったら統計の判断力が鍛えられるか?
  • 統計は手段なので正解がないため、最適解を判断する力が必要
第5章:統計を使えるようになるために今日から何をすれば良いか?
  • 論文を読んで統計が使えるようになるための5ステップ
第6章:統計を学ぶために重要な環境
  • 統計の3つの力をバランスよく構築する環境

以下のボタンをクリックして、画面に出てくる指示に従って、必要事項を記入してください。

この記事を書いた人

統計 ER ブログ執筆者

元疫学研究者

コメント

コメントする

目次