02章.Bayes's Theorem¶
素人が書いてあるので専門用語もいい加減、理解不足、お許しください。
前の章では、ベイズの定理を導き出した。
$$P(A|B) = \frac{P(A) P(B|A)}{P(B)}$$例として、一般社会調査のデータとベイズの定理を使用して条件付き確率を計算しました。
しかし、完全なデータセットがあったので、ベイズの定理は実際には必要ありませんでした。
方程式の左辺を直接計算するのは簡単ですが、右辺を計算するのはそれほど簡単ではありません。
しかし、完全なデータセットがないことも多く、その場合はベイズの定理の方が便利です。 この章では、これを使用して、条件付き確率に関連するいくつかのさらに難しい問題を解決します。
The Cookie Problem¶
まずは、壺問題から始めます。
>
クッキーが 2 つのボウルにあるとします。
ボウル 1 にはバニラ クッキー 30 枚とチョコレート クッキー 10 枚が入っています。
ボウル 2 にはバニラ クッキー 20 枚とチョコレート クッキー 20 枚が入っています。
ここで、ボウルの 1 つをランダムに選択し、何も見ずにクッキーをランダムに選択したとします。 クッキーがバニラの場合、それがボウル 1 から来た確率はどれくらいですか?
必要なのは、バニラ クッキーを取得したとして、ボウル 1 から選択した条件付き確率$P(B_1 | V)$ です。
しかし、問題の記述からわかることは次のとおりです。
ボウル 1を選択した場合の、バニラ クッキーを取得する条件付き確率 $P(V | B_1)$、および
ボウル 2を選択した場合の、バニラ クッキーを取得する条件付き確率 $P(V | B_2)$。
ベイズの定理は、それらがどのように関連しているかを示しています:
$$P(B_1|V) = \frac{P(B_1)~P(V|B_1)}{P(V)}$$左側の項が私たちが望むものです。 右側の項は次のとおりです。
$P(B_1)$ 、取得したクッキーの種類に関係なくボウル 1 を選択した確率。 この問題ではボウルをランダムに選んだということなので、$P(B_1) = 1/2$ と仮定します。
$P(V|B_1)$、ボウル 1 からバニラ クッキーが得られる確率、つまり $3/4$ です。
$P(V)$、どちらかのボウルからバニラ クッキーを引き出す確率。
$P(V)$ を計算するには、合計確率の法則を使用できます:
$$P(V) = P(B_1)~P(V|B_1) ~+~ P(B_2)~P(V|B_2)$$問題の記述から数字を代入すると、次のようになります。
$$P(V) = (1/2)~(3/4) ~+~ (1/2)~(1/2) = 5/8$$次のように、この結果を直接計算することもできます:
どちらかのボウルを選択するチャンスは均等であり、ボウルには同じ数のクッキーが含まれているため、どのクッキーを選択しても同じチャンスがあります。
2つのボウルにはバニラ クッキー 50 枚とチョコレート クッキー 30 枚があるため、 $P(V) = 5/8$ となります。
ベイズの定理を適用して、ボウル 1 の事後確率を計算できます。
$$P(B_1|V) = (1/2)~(3/4)~/~(5/8) = 3/5$$この例では、ベイズの定理の 1 つの使用法を示します。これは、$P(B|A)$ から $P(A|B)$ に到達する方法を提供します。 この戦略は、左側の項よりも右側の項を計算する方が簡単なこのような場合に役立ちます。
Diachronic Bayes¶
ベイズの定理を考える別の方法もあります。これは、データ本体$D$が与えられた場合に、仮説$H$の確率を更新する方法を提供します。
この解釈は"Diachronic(通時的)"であり、「時間の経過に伴う変化に関連する」ことを意味します。 この場合、新しいデータが表示されると仮説の確率が変化します。
ベイズの定理を$H$と$D$で書き直すと、次のようになります。
$$P(H|D) = \frac{P(H)~P(D|H)}{P(D)}$$この解釈では、各用語には次の名前があります:
$P(H)$はデータを見る前の仮説の確率であり、prior probabilityまたは単にpriorと呼ばれます。
$P(H|D)$は、posteriorと呼ばれる、データを見た後の仮説の確率です。
$P(D|H)$は、仮説に基づいたデータの確率であり、尤度と呼ばれます。
$P(D)$は、任意の仮説の下でのデータのtotal probabilityです。
背景情報に基づいて事前分布を計算できる場合があります。 たとえば、クッキーの問題では、等しい確率でランダムにボウルを選択することが指定されています。
他の場合には、prior(事前確率)は主観的なものです。 つまり、理性的な普通の人々は、異なる背景情報を使用しているため、または同じ情報を異なる解釈をしているため、同じではない可能性(disagree)があります。
通常、尤度は計算するのが最も簡単な部分です。 クッキーの問題では、各ボウル内のクッキーの数が与えられるので、各仮説に基づいてデータの確率を計算できます。
データの合計確率を計算するのは難しい場合があります。 これは、何らかの仮説の下でデータが表示される確率であると考えられていますが、それが何を意味するかを特定するのは難しい場合があります。
ほとんどの場合、次のような一連の仮説を指定することで物事を単純化します:
相互に排他的です。つまり、そのうちの 1 つだけが真になり得ます。
集合的に網羅的です。つまり、そのうちの 1 つが真実である必要があります。
これらの条件が当てはまる場合、合計確率の法則を使用して$P(D)$を計算できます。 たとえば、2 つの仮説$H1$と$H2$を使用すると、次のようになります。
$$P(D) = P(H_1)~P(D|H_1) + P(H_2)~P(D|H_2)$$そして、より一般的には、任意の数の仮説を使用して次のようになります:
$$P(D) = \sum_i P(H_i)~P(D|H_i)$$データと事前確率を使用して事後確率を計算するこのセクションのプロセスは、ベイズ更新と呼ばれます。
Bayes Tables¶
ベイズ更新を行うための便利なツールはベイズ テーブルです。ベイズ テーブルは紙に書くことも、スプレッドシートを使用することもできますが、このセクションでは Pandas DataFrame を使用します。
まず、仮説ごとに 1 行の空の DataFrame
を作成します。
import pandas as pd
table = pd.DataFrame(index=['Bowl 1', 'Bowl 2'])
table
Bowl 1 |
---|
Bowl 2 |
次に、事前分布を表す列を追加します。
table['prior'] = 1/2, 1/2
table
prior | |
---|---|
Bowl 1 | 0.5 |
Bowl 2 | 0.5 |
そして、尤度の列:
table['likelihood'] = 3/4, 1/2
table
prior | likelihood | |
---|---|---|
Bowl 1 | 0.5 | 0.75 |
Bowl 2 | 0.5 | 0.50 |
ここで、前の方法との違いがわかります。ボウル 1 だけでなく、両方の仮説の尤度を計算します。
ボウル 1 からバニラ クッキーが得られる確率は 3/4 です。
ボウル 2 からバニラ クッキーが得られる確率は 1/2 です。
尤度の合計が 1 にならないことに気づくかもしれません。それでも問題ありません。 それらはそれぞれ、異なる仮説に基づいて条件付けされた確率です。 合計が 1 になる理由はなく、そうでなくても問題はありません。
次のステップは、ベイズの定理で行ったことと似ています。 事前確率に尤度を掛けます。
table['unnorm'] = table['prior'] * table['likelihood']
table
prior | likelihood | unnorm | |
---|---|---|---|
Bowl 1 | 0.5 | 0.75 | 0.375 |
Bowl 2 | 0.5 | 0.50 | 0.250 |
これらの値は 正規化されていない事後確率の値 であるため、結果を unnorm」
と呼びます。 それらはそれぞれ、事前確率と尤度の積です。
これはベイズの定理の分子です。 それらを合計すると、
$$P(H_1)~P(D|H_1) + P(H_2)~P(D|H_2)$$これはベイズの定理 $P(D)$ の分母です。
したがって、次のようにデータのtotal probability(合計確率)を計算できます。
prob_data = table['unnorm'].sum()
prob_data
0.625
5/8 が得られることに注目してください。これは、$P(D)$ を直接計算することで得られたものです。
そして、次のように事後確率を計算できます。
table['posterior'] = table['unnorm'] / prob_data
table
prior | likelihood | unnorm | posterior | |
---|---|---|---|---|
Bowl 1 | 0.5 | 0.75 | 0.375 | 0.6 |
Bowl 2 | 0.5 | 0.50 | 0.250 | 0.4 |
ボウル 1 の事後確率は 0.6 で、これはベイズの定理を明示的に使用して得られた値です。 ボーナスとして、ボウル 2 の事後確率 (0.4) も得られます。
正規化されていない事後値を合計して除算すると、事後値の合計が 1 になるように強制されます。このプロセスは "正規化" と呼ばれ、データの合計確率が "正規化定数" とも呼ばれるのはこのためです。
The Dice Problem¶
ベイズ表は、3 つ以上の仮説の場合でも問題を解決することもできます。 例えば:
6 面サイコロ、8 面サイコロ、12 面サイコロが入った箱があるとします。 サイコロの 1 つをランダムに選択し、転がして出た目が 1 でした。6 面体のサイコロを選択した確率はどれくらいですか?
この例には、等しい事前確率を持つ 3 つの仮説があります。
6 面サイコロを選択した場合、データの確率は 1/6 になります。 8面ダイスを選択した場合、確率は1/8、12面ダイスを選択した場合、確率は1/12です。
以下は、整数を使用して仮説を表すベイズテーブルです。
table2 = pd.DataFrame(index=[6, 8, 12])
table2
6 |
---|
8 |
12 |
事前確率と尤度を表すために分数を使用します。 そうすることで、浮動小数点数に丸められることがなくなります。
from fractions import Fraction
table2['prior'] = Fraction(1, 3)
table2['likelihood'] = Fraction(1, 6), Fraction(1, 8), Fraction(1, 12)
table2
prior | likelihood | |
---|---|---|
6 | 1/3 | 1/6 |
8 | 1/3 | 1/8 |
12 | 1/3 | 1/12 |
事前確率と尤度を取得したら、残りの手順は常に同じなので、それらを関数に入れます:
def update(table):
"""Compute the posterior probabilities."""
table['unnorm'] = table['prior'] * table['likelihood']
prob_data = table['unnorm'].sum()
table['posterior'] = table['unnorm'] / prob_data
return prob_data
そして、このように使います。
prob_data = update(table2)
prob_data
Fraction(1, 8)
最終的なベイズ表は次のとおりです:
table2
prior | likelihood | unnorm | posterior | |
---|---|---|---|---|
6 | 1/3 | 1/6 | 1/18 | 4/9 |
8 | 1/3 | 1/8 | 1/24 | 1/3 |
12 | 1/3 | 1/12 | 1/36 | 2/9 |
6 面サイコロの事後確率は 4/9 で、他のサイコロの確率 3/9 および 2/9 よりも少し高くなります。 直感的には、6 面サイコロが最も可能性が高いと考えられます。これは、これまでに見た結果が得られる可能性が最も高いためです。
The Monty Hall Problem¶
次に、ベイズ テーブルを使用して、最も議論の多い確率の問題の 1 つを解決します。 モンティ・ホール問題は、Let's Make a Deal というゲーム番組に基づいています。 あなたが番組の出場者である場合、ゲームの仕組みは次のとおりです。
司会者のモンティ ホールは、1、2、3 と番号が付けられた 3 つの閉じたドアを見せ、それぞれのドアの後ろに賞品があることを伝えます。
1 つの賞品には価値があり (伝統的には車)、他の 2 つはそれほど価値がありません (伝統的にはヤギ)。
ゲームの目的は、どのドアに車があるかを推測することです。 推測が正しければ、車を維持することができます。
ドア 1 を選択したとします。選択したドアを開ける前に、モンティはドア 3 を開け、ヤギを現します。 その後、モンティは、元の選択を続けるか、開いていない残りのドアに切り替えるかのオプションを提案します。
車を獲得するチャンスを最大限に高めるには、ドア 1 を使い続けるべきですか、それともドア 2 に切り替えるべきですか?
この質問に答えるには、ホストの動作についていくつかの仮定を立てる必要があります。
モンティは常にドアを開け、切り替えのオプションを提供します。
彼はあなたが選んだドアや車のドアは決して開けません。
あなたが車のあるドアを選択すると、彼は他のドアのいずれかをランダムに選択します。
これらの仮定の下では、切り替えたほうがよいでしょう。 粘れば $1/3$ の確率で勝ちます。 切り替えた場合は $2/3$ の確率で勝ちます。
これまでにこの問題に遭遇したことがない場合、その答えは驚くかもしれません。 それはあなたは一人ではないでしょう。 多くの人は、固執しても切り替えても問題ないという強い直感を持っています。 ドアが 2 つ残っているため、車がドア A の後ろにある可能性は 50% であると彼らは推論します。 しかし、それは間違いです。
その理由を確認するには、ベイズ テーブルを使用すると役立ちます。 まずは 3 つの仮説から始めます。車はドア 1、2、または 3 の後ろにある可能性があります。問題の説明によれば、各ドアの事前確率は $1/3$ です。
table3 = pd.DataFrame(index=['Door 1', 'Door 2', 'Door 3'])
table3['prior'] = Fraction(1, 3)
table3
prior | |
---|---|
Door 1 | 1/3 |
Door 2 | 1/3 |
Door 3 | 1/3 |
データは、モンティがドア 3 を開け、ヤギを現したというものです。 それでは、各仮説の下でデータの確率を考えてみましょう。
車がドア 1 の後ろにある場合、モンティはドア 2 または 3 をランダムに選択するため、ドア 3 を開ける確率は $1/2$ です。
車がドア 2 の後ろにある場合、モンティはドア 3 を開ける必要があるため、この仮説に基づくデータの確率は 1 です。
車がドア 3 の後ろにある場合、モンティはドアを開けません。そのため、この仮説に基づくデータの確率は 0 です。
尤度は次のとおりです。
table3['likelihood'] = Fraction(1, 2), 1, 0
table3
prior | likelihood | |
---|---|---|
Door 1 | 1/3 | 1/2 |
Door 2 | 1/3 | 1 |
Door 3 | 1/3 | 0 |
事前確率と尤度がわかったので、update を使用して事後確率を計算できます。
update(table3)
table3
prior | likelihood | unnorm | posterior | |
---|---|---|---|---|
Door 1 | 1/3 | 1/2 | 1/6 | 1/3 |
Door 2 | 1/3 | 1 | 1/3 | 2/3 |
Door 3 | 1/3 | 0 | 0 | 0 |
モンティがドア 3 を開けた後、ドア 1 の事後確率は $1/3$ です。 ドア 2 の事後確率は $2/3$ です。 したがって、ドア 1 からドア 2 に切り替えたほうがよいでしょう。
この例が示すように、確率に対する私たちの直観は必ずしも信頼できるわけではありません。 ベイズの定理は、providing a divide-and-conquer strategy(分割統治戦略)を提供することで役立ちます。
まず、仮説とデータを書き留めます。
次に事前確率を計算します。
最後に、各仮説に基づくデータの尤度を計算します。
残りの部分はベイズ テーブルが行います。
【providing a divide-and-conquer strategy(分割統治戦略)】
そのままでは解決できない大きな問題を小さな問題に分割し、その全てを解決することで、最終的に最初の問題全体を解決する、という問題解決の手法
次の章では、クッキー問題とダイス問題を拡張し、基本的な確率からベイズ統計へと次のステップを進めます。
0 件のコメント:
コメントを投稿