infoseiri’s blog

映画から食からサッカーまで

ベイズ推定(説明編)

どうもこんにちは赤猫です。

今日話したいことは、愛用していたbluetoothのイヤホンが壊れたという話。amazonで購入した(去年1月)

SoundPEATS(サウンドピーツ) QY8 Bluetooth イヤホン 高音質 apt-X対応 マイク付き ブルートゥース イヤホン (black)

https://images-na.ssl-images-amazon.com/images/I/41iqqwBEoNL.jpg

という素晴らしいイヤホンなのですが、片耳が聞こえなくなってしまいました。イヤホンの修理についてそこで調べてみると…色々出てきました。片耳だけが聞こえなくなるというのは断線が原因のようで、コードを切り、はんだごてを使ってくっつける?と直るということでした。しかし、そこまでする手間も考えると新たに買った方が早いと思い、完全ワイヤレスのものをまたAmazonで注文したんですがね。↓

https://images-fe.ssl-images-amazon.com/images/I/51-CRGvFe8L._SY90_.jpg

振り返ってみると、よく頑張ってくれたよ、このイヤホンには。防水ということでお風呂や雨の時もほぼずっと装着していました。電源ボタンを長押しすれば、Siriも機能させることができる。大学に自転車で言っていた時、遅刻していないか確認するために

「今何時?」

「ピッ、只今の時刻は○○時○○分です。」

というやり取りを何度したことか(ただ私が朝弱かっただけです、ハイ<m(__)m>)。考えてみればそれだけ長時間起動しっぱなしでも、電池切れにならなかったってことですもんね。とても小さな体(電源ボタンは本当に指の腹の半分ぐらいしかありません)で、頑張ってくれました。と同時に技術力ってすごいなーと感動したというくそどうでもいい話でした。これから世代交代するけど、よろしくな相棒。

 

 

それでは今回は、機械学習の続きを

 

infoseiri.hatenablog.com

ベイズ推定って何に使われてるの?

今回行うのはベイズ推定(単純ベイズともいわれる)です。

まず何に使われているかというと、メールの仕分け(スパムメールなのかどうか)が多いようです。

どうやって仕分けているのかというと、まずスパムメールと通常のメールの違いは何でしょうか。そう、使われる単語が違ったりします。スパムメールには○○円当たりますだったり、アダルト用語が続いていたりするでしょう。

それらの言葉がどれくらい含まれているのか、確率を使って仕分けします。

ある単語が含まれていた時、どれぐらいの確率でそのメールがスパムメールなのか、を計算で出すのです。

  1. まずは全部のメールを調べ、スパムメールかそうでないかを明らかにする
  2. スパムメールと普通のメールに使われている言葉を調べる
  3. 調べた単語ごとに、どれぐらいの確率でスパムメールや普通のメールにその単語が含まれているのか計算する。(単語数/メールの数)
  4. ベイズの定理を用いて分析

ここで聞いたことがないであろう言葉、ベイズの定理というのが出てきました。

 

 

そもそも確率って

それと確率の考え方について説明しますと…そもそも確率というのは事象(あるイベント)がどの程度起こるのかというものです。この事象の前には、必ず何か行動を起こしています(これを試行といいます)。先ほどのメールの例でいえば、

  • メールを受信するというのが、試行
  • スパムメールか普通のメールかというのが、事象

となります。確率というのは、全ての起こりうる事象のうち、ある決められたことがどの程度起きるかという計算ですから、100通メールが届いて50通スパムメールだと、メールを受信する試行に対して、スパムメールが送られてくる確率は1/2なわけですね。50%ということです。では、本題に移りメールの中の単語を調べます。

スパムメールには、

  • 万円が20%の確率で(50通のうちの10通に)
  • バイアグラが40%の確率で(50通のうちの20通に)

含まれているとわかりました。

普通のメールには、

  • 万円が10%の確率で(50通のうち5通)
  • バイアグラが5%の確率で(50通のうち2.5通)

含まれているとわかりました、としましょう。

 

ベイズと条件付確率

ここでベイズの定理を使うと

P(スパム|万円∩バイアグラ)=P(万円∩バイアグラ|スパム)*P(スパム)/P(万円∩バイアグラ

となります(P(※)というのは※が起こる確率。∩はどちらの事象も起こるという意味、万円とバイアグラどちらの単語も含まれる)

ここで、条件付確率というものを考えないといけません。式で言うとP(A|B)のところです。これは、Bという事象が起こった時のAが起こる確率のことです。

ベン図というものを使うとさらに理解しやすく…

f:id:infoseiri:20181021210502p:plain

この図は、スパムメールと普通のメールに含まれる単語の種類を図にしたもので、

  • スパムで囲まれた丸がスパムメール全体
  • 普通で囲まれた丸が普通のメール全体

を表します。

スパムメールだけでなく普通のメールにも上記の2単語は含まれている可能性があり、また、スパムメールであっても含まれていないという可能性もあるんですね。

事象には独立従属という重要な概念があります。

この例でいくとメールの種類と単語の種類は従属関係にあります。

 

独立というのは、あなたの目の前にあるサイコロの出目と明日の天気というような全く関連がないようなものですね。この場合、

P(サイコロで4が出る∩明日の天気が晴れ)という確率は、P(サイコロで4が出る)*P(明日晴れる)となり、掛け算ができます。

 

しかし、メールの例のように単純に掛け算できない場合もあります。それが従属です。

 

 

注意点

このベイズ推定には問題があります。それは、

  1. すべての事象が独立ではないといけないこと
  2. どこかの確率が0だと計算結果も0になってしまうこと

です。

1つ目の説明をすると、ベイズの定理を使ってある単語が含まれていたら、どれぐらいの確率でそのメールがスパムであるのかわかります。しかしこの計算は簡単ではありません。コンピュータの負担を減らすためにも、そこで計算の工夫を考えます。もし、

  • メールがスパムであるかどうか
  • 含まれる単語の種類

という事象が独立なら、計算をもっと楽にできます。

先ほどのベイズの定理の右辺の分数に注目してください。分母のP(万円|バイアグラ)は「万円」と「バイアグラ」という単語がどれくらい含まれるかです。メールがスパムかどうかには依存しないので無視していいでしょう。

また、P(万円∩バイアグラ|スパム)=P(万円∩バイアグラ∩スパム)/P(スパム)

                 =P(万円)*P(バイアグラ)*P(スパム)/P(スパム)

=P(万円)*P(バイアグラ

となりますね。これですべてを計算しやすくなりました。

クラス(スパムと普通)ごとに分けて単語を調べることをせずに、

全てのメール(スパムと普通両方)を1回だけ調べることで、これらの単語が含まれたいた時にスパムになる確率が分かるわけです(細かく言えば、その確率に比例する数)。

全ての事象が独立であるとは言いづらいのに、この結果が今のところ良い予測をできているのは議論があるらしいですが、私はできればいいので気にしないでいいや。

 

つぎに2つめ。どこかの確率が0になると、例えばメールを見ても「万円」という単語がどこにも見当たらないとなると…予想結果の数も0になります。

これは前を見てもらえばわかりますが、計算がすべて掛け算になっているためですね。

この場合どうすればいいかというと、勝手に1を足します(計算結果に影響が出ないような数を足します)。

最後に注意するのは、これらのベイズ推定には、数値データが使えないということ。

例えば、時間のような連続データの場合、午前午後などに分けて分析しないといけません。