ナイーブベイズのテキスト分類を具体例を挙げながら図でわかりやすく解説

2024年3月15日

ベイズ推定では、古いデータによる確率を新しく得られたデータによって更新していきます。

古いデータによる確率を事前確率、新しく得られたデータを尤度、更新された確率を事後確率といい、次のように表します。

事後確率=尤度×事前確率

>> 「ベイズの定理」の使い方を具体例を使ってわかりやすく解説【初心者向け】

 

当ページのリンクには広告やプロモーションが含まれています。

ベイズの定理を1単語の迷惑メール分類器で理解する

ここまでは難しくないと思うのですが、式で書くと次のようになり、少し分かりづらくなります。

この式を理解するには、1単語の迷惑メール分類器で考えると分かり易くなります。

ここでは受信したメールに「無料」という単語が含まれていた場合に、それが迷惑メールである確率を計算します。

 

事前確率を計算する

まず、今まで迷惑メールだった割合を事前確率とします。

迷惑メールの数/全体のメールの数で求められますね。

迷惑メールを受け取るという事象をY1、通常メールを受け取るという事象をY2とすると、迷惑メールを受け取る事前確率はP(Y1)、通常メールを受け取る事前確率はP(Y2)と書けます。

この会社では全メールのうち迷惑メールが70%通常メールが30%とします。

 

尤度を計算する

次に、迷惑メールの中に「無料」という単語が含まれていた割合を調べます。

面倒臭いけど、やろうと思えば力業でできますね。

同様に、通常メールの中に「無料」という単語が含まれていた割合も調べます。

これが尤度になります。

迷惑メールを受け取ったという条件の元で「無料」という単語が含まれる確率なので、条件付き確率の記号を使ってP(X|Y1)と書きます。

>> 「条件付き確率」の使い方を具体例を使ってわかりやすく解説【初心者向け】

 

事前確率と尤度の同時確率を計算する

次に、迷惑メールを受け取って、かつその中に「無料」という単語が含まれる確率を求めます。

これは同時確率といって、掛け算で求められます。

同様に、通常メールを受け取って、かつその中に「無料」という単語が含まれる確率も求めます。

 

事後確率を計算する

最後に、青で網掛した部分だけで考えます。

青で網掛した部分は、迷惑メール/通常メールに拘わらず、「無料」という単語が含まれる事象を表します。

左側の部分は、「無料」という単語が含まれるメールを受け取ったという条件の下で、それが迷惑メールである確率(条件付き確率)を表します。

条件付き確率なので、P(Y1|X)と書けます。

計算すると87.5%になりました。

つまり、通常は迷惑メールを受け取る確率は70%なのですが、「無料」という単語が含まれるメールは、その確率が87.5%にまで上昇するということです。

 

これで式の意味が分かったと思います。

分からない場合は何度も読み返せば必ず分かりますので、頑張って下さい。

 

ナイーブベイズ分類器の仕組み

事後確率の計算は不要

次にナイーブベイズ分類器について説明します。

これは簡単にいうと、先ほどの事例を複数の単語について行うだけです。

しかも、

の式の分母を無視します。

 

なぜ無視しても大丈夫なのか?

 

先ほどの例で見てみましょう。

「無料」という単語が含まれるメールが迷惑メールである確率は87.5%でした。

逆にいうと、通常メールである確率は12.5%です。

「あなたはどちらだと思いますか?」

と聞かれれば、この数字を知っているあなたは間違いなく迷惑メールですと答えるでしょう。

 

それでは迷惑メールである確率が51%だった場合はどうでしょう?

それでも、どちらか一方を選べといわれたら迷惑メールと答えるでしょう。

このように、どちかかを選ぶ場合には、わざわざ細かい確率まで求める必要はないのです。

どうせ87.5%も51%も同じなのですから。

先ほどの例でいうと、42%と6%まで分かっていれば十分です。

42%の方が大きいのですから、迷惑メールと判断できます。

 

それでは42%と6%はどうやって計算したか?

42%はP(X|Y1)P(Y1)、6%はP(X|Y2)P(Y2)ですね。

P(X|Y1)P(Y1)=「無料」が迷惑メールに含まれる確率(尤度)×迷惑メールである事前確率

P(X|Y2)P(Y2)=「無料」が通常メールに含まれる確率(尤度)×通常メールである事前確率

 

これらはいずれも分子です。

だから分母は無視してよいのです。

これはつまり、「同時確率で比べればよい。事後確率の計算は不要」ということです。

 

単語が増えても同じこと

先ほどの例では「無料」という単語についてだけ見ていましたが、単語が増えても同じことです。

試しに「無料」「出会い」「物流」という3つの単語が含まれているメールを想定してみましょう。

迷惑メールに「無料」が含まれる確率は60%、通常メールに「無料」が含まれる確率は20%でしたが、「出会い」と「物流」は以下の通りとします。

「出会い」・・・迷惑メール70%、通常メール10%

「物流」・・・迷惑メール1%、通常メール30%

 

迷惑メールである事後確率と通常メールである事後確率は、次のように計算できます。

 

迷惑メールである事後確率

=迷惑メールである事前確率×迷惑メールに「無料」が含まれる尤度×迷惑メールに「出会い」が含まれる尤度×迷惑メールに「物流」が含まれる尤度

=70%×60%×70%×1%

=0.3%

 

通常メールである事後確率

=通常メールである事前確率×通常メールに「無料」が含まれる尤度×通常メールに「出会い」が含まれる尤度×通常メールに「物流」が含まれる尤度

=30%×20%×10%×30%

=0.18%

 

迷惑メールである確率の方が1.5倍くらい高いですね。

従って、このメールは迷惑メールと判断します。

きっと物流業者と荷主のビジネスマッチングの案内メールだったのでしょう。

 

ナイーブベイズでは変数は独立であることが前提

このようにナイーブベイズ分類器の仕組みはとても単純です。

これは、各変数が独立であると仮定しているためです。

変数とは、この場合は「無料」などの単語です。

独立とは、「無料」と「出会い」と「物流」という単語の使われ方に関連性がないということです。

でも実際は「無料」と「出会い」は一緒に使われることが多いですね。

ですので、本当は独立ではないのですが、独立と仮定しても十分に実用に耐えるためよく用いられています。

ナイーブベイズのナイーブとは幼稚で単純という意味です。

変数は独立であるというように、幼稚で単純に仮定した仕組みだということです。

だから簡単なのです。

 

ナイーブベイズで3つ以上のカテゴリーに分類する

上の例では迷惑メールか通常メールかの二者択一でしたが、ナイーブベイズ分類器は3つ以上のカテゴリーに分類する時にも使えます。

そこで、メールの中に含まれる単語で、クレームメール感謝メールその他のメールの3カテゴリーに振り分けるナイーブベイズ分類器をExcelで表現してみましょう。

 

まず、今までに受信したメールを分析して、クレームメール/感謝メール/その他メールのそれぞれのメールに「残念」、「遅い」、「原因」、「感謝」、「丁寧」、「素早い」の各単語が含まれる確率を調べたら下記のようになりました。

これが尤度になります。

 

この会社では全メールのうち、クレームメールが20%、感謝メールが10%、その他メールが70%を占めます。

これが事前確率になります。

今、受信したメールを調べたら、「残念」、「遅い」、「丁寧」、「素早い」の4単語が含まれていました。

このメールは、どのカテゴリーに分類すべきでしょうか?

 

これをExcelでやるには、次のようにします。

 

黒字は過去データを調べてベタ打ち、青字が計算するセルです。

尤度事前確率を掛けて事後確率を計算しているだけです。

たったこれだけですが、クレームメールの事後確率が0.0004で一番大きいため、このメールはクレームメールと判定されました。

 

Udemyの関連講座

実戦力主義。の統計学 Excel統計学で見えなかったものが見えてくる。

Excelというツールが与えられたとき、統計学は「最強」を超えた学問になった。興味深いデータで楽しく学んでみませんか?統計学が身近なツールであることを実感していただけます。

 

NumPyro で学ぶ ベイズ統計モデリング 【基礎編】

Google Colaboratory で実践する統計モデリング

 

【PythonとStanで学ぶ】仕組みが分かるベイズ統計学入門

確率の基礎から出発し、ベイズ統計学の基礎およびMCMCの原理を学びます。概念の理解とPythonでのプログラミングへの実装を合わせる事で、動かしながら原理を理解できます

 

はじめてのベイズ統計【PyMC3+Colab】-確率・統計の基礎からベイズ推定のPython実装まで-

機械学習と親和性の高い、ベイズ統計の初心者向けコースです。確率・統計の基礎から初めて、ベイズ推定によるA/Bテスト、線形回帰などを学びます。Google Colaboratory環境でライブラリPyMC3を使い、ベイズ推定を実装します。