MyEnigma

とある自律移動システムエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

待ち合わせに遅れる彼女、ベイズの定理、そして例題

http://upload.wikimedia.org/wikipedia/commons/d/d4/Thomas_Bayes.gif

はじめに

自律ロボットを研究する上で、

ベイズの法則は欠かすことのできない理論だと思います。



ロボットの位置推定や物体認識の一般的な技術である

カルマンフィルタやパーティクルフィルタは

このベイスの法則を元に定式化されています。

移動ロボットにおける拡張カルマンフィルタを使用した自己位置推定のサンプルプログラム - MY ENIGMA



しかし、自分の場合、

いきなりカルマンフィルタの式を見ても、

正直、ベイズの法則というものが、

何をしているものなのか

いまいちわかりませんでした。



結局、何年もの間

カルマンフィルタなどを使いながら、

ちょっとずつベイズの法則を勉強することにより、

最近やっと、大まかなベイズの法則がわかってきた感じです。



今回は、このベイズの法則の概略を

アナロジー(比喩)と例題を使って説明してみたいと思います。

ベイズの定理を理解するために必要な事前知識

まず始めにベイズの定理を説明する時に

よく使用する言葉の定義を説明したいと思います。

同時確率

Aで、なおかつBが起こる確率:P(A,B)

条件付き確率

Aが起こった時にBが起こる確率: P(B|A)

(右側の文字が条件であることに注意)

乗法の定理

AとBの同時確率=Aが起こる確率×Aが起こった時にBが起こる確率

=Bが起こる確率×Bが起こった時にAが起こる確率

P(A,B)=P(A)×P(B|A)=P(B)×P(A|B)

加法の定理

AまたはBが起こる確率= Aが起こる確率+Bが起こる確率-AとBの同時確率

排反(P(A,B)=0の時)

AまたはBが起こる確率= Aが起こる確率+Bが起こる確率

事前確率・事後確率・尤度

下記のベイズの式において、時系列の確率を更新している場合

P(Xi|Z) : 事後確率

P(Z|Xi) : 尤度

P(Xi) : 事前確率

と呼ぶ


アナロジーによるベイズの法則


後輩に上手くベイズの定理を説明するために,

うまい喩え話を考えてみました。

(あくまでも個人的な考えです。)


彼女がいるとします。


その彼女は50%の確率で,

デートの待ち合わせに

遅刻することが分かっているとしましょう。


ある日,

デートの待ち合わせ場所に10分前に着いたので,

彼女はどれくらいの確率で

今日のデートに遅れずに来るかを考えてみました。


単純に考えると、なんの情報もなければ、

50%で遅れると考えられます。



しかし、

その時不意に共通の友達からメールが来て,

「君の彼女が,今日のデートをすごく楽しみにしてるって言ってたよ.」

と書いてあったします。


そんな時,

もう彼女が50%の確率で遅れると言えるでしょうか?


おそらく、いつもより楽しみにしているとしたら、

50%で遅れるのではなく、

30%ぐらいの確率で遅れると考えられるのではないじょうか?


つまり、

ある事象の確率を計算したい時に、

普通は様々な複数の種類の情報(観測値)から

確率を計算します。

(今回の例では、

 彼女の遅刻のしやすさと、

 友達からの情報

 という2つの情報から、

 彼女が遅刻する確率を計算しています)


ベイズの法則は、

そのような複数の種類の確率を

どのように組み合わせて

最終的な確率を計算するかを示した方法だといえます。


ベイズの法則の式

以上のアナロジーを踏まえると、

教科書に出てくるよくわからないベイズの式が

ちょっとわかってくると思います。



一般的なベイズの式は下記の通りです。


XやZがA,Bになっている場合や、

分母のP(Z)が単純なαになっている場合などはありますが、

基本的には使っている文字が違うだけで同じ意味であると言っていいと思います。


つまり、この式を簡単に言葉で説明すると、

ある状態Xiの時の確率P(Xi)と、

その状態の時に得た情報の確率P(Z|Xi)から、

その情報を含めた状態Xiの確率を更新することができるということです。


先ほどの例だと、

P(Xi)はなんの情報も無いときの、彼女が遅れる確率

P(Z|Xi)は友達からのメール

そして、P(X|Z)は友達からのメールの情報を含んだ、彼女が遅れる確率

であるといえます。


実はこの式を見ると、確率を更新すると言っても、

ただ掛け算をしているだけですし、

この式をちょっと難しく見せているP(Z)は、

単純にP(X|Z)とちゃんとした確率にするための、

辻褄合わせの数(かっこ良く言うと正規化項)

なので、実はそんなに難しいことは言っていないことはわかります。


ちなみに前述の乗法の定理を使うと簡単にベイズの式は導出できます。

乗法の定理のAをXi, BをZとすると、

P(Xi|Z)×P(Z) = P(Z|Xi)×P(Xi)

なので、両辺をP(Z)で割るとベイズの式になります。


では、アナロジーと数式だけだと、

まだちょっとわかりずらいと思うので、

実際の数値を使った例題を説明したいと思います。

ベイズの法則の計算例1:モンティ・ホール問題

ベイズの法則の利用例として有名な問題に

モンティ・ホール問題という問題がありますが、

そちらについては下記の記事を参考にしてください。

ベイズの法則の利用例:モンティ・ホール問題の確率計算とPythonシミュレータ - MY ENIGMA


概念的な説明から、

ベイズの式を使用した確率計算、

そしてPythonによるシミュレータの説明がされています。

ベイズの法則の計算例2:がん検診の結果とガンである確率

続いて、こちらも有名な問題である

ガンの検診結果と実際にガンである確率の問題を

解いてみたいと思います。


まず初めにガンになる確率P(c)と、ガンにならない確率P(nc)は、

P(c) =0.001 (0.1%)

P(nc)=0.999 (99.9%)

であるとします。

(数値に根拠はありません)


続いて、

がん検診の確率を取り入れてみます。

正直、専門外なのでガンの検診方法については、

まったく知らないのですが、

ある完璧ではない検診の方法があるとして、

ガンである人を80%の確率で見つけることができるとし、

誤検知率は10%とします。

(残り10%はガンの有無に関わらず陰性だと判断してしまうこととします)

つまり、ガンである人がその検診で陽性(Positive)だと判断される確率P(p|c)と、

ガンでない人を陽性だと誤検知してしまう確率P(p|nc)は、

P(p|c) =0.8

P(p|nc)=0.1

となります。


そこで、この検診で陽性だと判断され、かつ

実際にがんである確率はどれくらいでしょうか?


まず初めに、先ほどのベイズの式における

Xiはがんであること、つまりcであり、

Zは検診で陽性であるpであると考えると、

ベイズの式におけるP(Z|Xi)とP(Xi)はそれぞれ、

P(Z|Xi)=P(p|c)=0.8

P(Xi)=P(c)=0.001

となります。


そして最後の正規化項P(Z)=P(p)は、

検診で陽性だと判断される確率なので、

加法の定理より、

ガンでありながら、陽性だと判断される確率と

ガンでないのに、陽性だと判断される確率を加えたものになります。

そしてそれらの同時確率は乗法の定理より分解することができます。

一般化すると下記の通りです。


つまり

P(Z)=P(pos)=P(pos|c)P(c)+P(pos|nc)P(nc)=0.8×0.001+0.1×0.999=0.1007

なるため、

それぞれをベイズの式に代入すると、

P(c|pos)=0.8×0.001/0.1007=0.0079=0.79%

となります。


ここで一つ疑問なのは、0.79%って少なくね?

ってことです(笑)。

80%の確率で当たる検診で陽性って出たのに、

実際にガンである確率が1%って以下ってどうゆうこと?

と思いますが、下記の記事を読むとちょっと納得します。

日々徒然:ベイズの定理


上記の記事に書いてある通り、

誤診の確率はあまり高くありませんが、

基本的に大多数の人はガンではないため、

結果的に、確率が低くなるようです。

ベイズの定理を利用した時系列データによる確率推定

ベイズの定理を使用すると、

前述のモンティ・ホール問題やガンの問題のような

ある二種類の事象を組み合わせた場合の確率計算ができますが、

ベイズの定理が大きな力を発揮するのは、

もう一つ別の場合があります。

それは時系列のデータを取り扱う時です。


あるデータが一定時刻毎に取得できた場合、

それらのデータを逐次的利用して確率計算をすることができます。

それがベイズ更新という方法です。


例えばある時刻にZ1という値を取得した時に、

その値からP(Z1)とP(Z1|Xi)を計算し、

上記のベイズの定理を使用してP(Xi|Z1)を計算します。


続いてZ2を取得した時には、

同様にその値からP(Z2),P(Z2|Xi)を計算し、

P(Xi)として先ほどのP(Xi|Z1)の値を使用します。

そして上記のベイズの定理を使用してP(Xi|Z2)を計算します。


このように時系列のデータを一つ一つ繋ぎながら

確率計算をすることができるのです。


しかし、ここで一つ問題があります。

それはベイズ更新をする際の最初のP(Xi)を

どのように計算すべきかという問題です。


これに関しては、それっぽく指定すればOKです(笑)

これをベイズ推定では、理由不十分の原則といいますが、

最初の確率の初期値が当てずっぽうでも、

ベイズ更新を繰り返すことにより、

おのずと正しい値に確率が収束していくからです。


このように確率の初期値を経験や境界条件から

自由に指定できることから、

ベイズ推定は経験的な情報を利用しやすいと言われています。


ロボット工学では、なぜベイズ推定を使用するのか?

ベイズ推定を利用した統計学をベイズ統計学といいますが、

なぜロボット工学では、

通常の統計学ではなく、ベイズ統計学を使用するのでしょうか?


ベイズ統計には、従来の統計学と比べて下記の利点があるからです。


データが少ない時でも分析が可能

従来の統計学では、データはある程度多くないと

意味のある結果を出すことが難しかったのですが、

ベイズ推定の場合は、データが少ない場合でも、

多い場合でも統一的な手法で分析でき、

データが少ない時に結果が不十分であることを

明示的に扱うことができるからです。

時系列的なデータを扱える

ロボットはセンサの情報を使って

時系列的に判断を行う必要が有るため、

(ある一瞬のデータのみで判断するわけではない)

前述の通り、時系列データを利用することは非常に重要です。


・経験的な情報を利用することができる。

統計学は解析対象のデータのみを使用して

判断を行いますが、

ベイズ推定では、事前確率の初期値や

確率分布関数のモデルなど、経験的な情報や、

人間の感覚的な仮定を追加しやすいという利点があります。


ロボットの場合、アプリケーション上での境界条件や

ロボットのメカ的な機構の仮定を入れることで

安定した認識を実現することができます。

ベイズ統計学とは?

ベイズ統計学に関しては、下記の記事を参考にして下さい。

ベイズ統計学とは? - MY ENIGMA


わかりやすい参考文献

5分でわかるベイズ確率

このスライドはこれまで読んできたベイズ推定の資料の中で一番わかりやすいと思います。

真の確率は神のみぞ知るというのがいいですね。



・『図解・ベイズ統計「超」入門 あいまいなデータから未来を予測する技術 (サイエンス・アイ新書)』

ベイズ推定に関する入門書としてよく挙げられる本ですが、

ベイズ統計の基本的な部分を学ぶ上では非常にオススメです。

ベイズの定理が、2つの乗法の定理から導出できることや、

有名なベイズ推定の問題であるモンティホール問題などが

わかりやすく説明されています。


普段ベイズ推定を普通に使用している自分でも、

知らないことが多く、目からウロコな内容が多かったと思います。


ベイズ推定を使用しているけど、

もっと基本的なことをちゃんと勉強したい人にオススメです。

(アニメ的な表紙のせいで、勉強している感じがしないのが

ちょっと欠点だと思います笑)

MyEnigma Supporters

もしこの記事が参考になり、

ブログをサポートしたいと思われた方は、

こちらからよろしくお願いします。

myenigma.hatenablog.com