隠れマルコフモデルのお勉強
ご無沙汰しております。マルコフ部(非公認)部長の小川です。
業務上で隠れマルコフモデル(HMM)について理解する必要がでており、実装に際して理論の方のお勉強をしようと思います。
今回は第一回という事で条件付き確率についてお勉強した内容を記そうと思います。
概要を日本語で理解する
先ずはWikipediaを辿り、知らない単語が無いところまでブレイクダウンしました。
以下Wikipediaより引用です。
隠れマルコフモデル
隠れマルコフモデル(Hidden Markov Model)は確率モデルの一つであり、観測されない(隠れた)状態を持つマルコフ過程である。
マルコフ連鎖
マルコフ連鎖(Markov chain)とは、確率過程の一種であるマルコフ過程のうち、とりうる状態が離散的(有限的は可算)なもの(離散状態マルコフ過程)をいう。まと特に、時間が離散的なもの(時刻は添字で表される)を指すことが多い(他に連続時間マルコフ過程というものもあり、これは時刻が連続である)。マルコフ連鎖は、未来の挙動が現在の値だけで決定され、過去の挙動と無関係である(マルコフ性)。各時刻において起こる状態変化(遷移または推移)に関して、マルコフ連鎖は遷移確率が過去の状態によらず、現在の状態のみによる系列である。
マルコフ過程
マルコフ過程とは、マルコフ性をもつ確率過程のことをいう。すなわち、未来の挙動が現在の値だけで決定され、過去の挙動と無関係であるという性質を持つ確率過程である。
マルコフ性
マルコフ性とは、確率論における確率過程の持つ特性の一種で、その過程の将来状態の条件付き確率分布が、現在状態のみに依存し、過去のいかなる状態にも依存しない特性を持つことこをいう。すなわち、過去の状態が与えられた時、現在の状態(過程の経路)は条件付き独立である。
確率過程
確率論において、確率過程(stochastic process)は、時間とともに変化する確率変数のことである。株価や為替の変動、ブラウン運動などの粒子のランダムな運動を数学的に記述する(モデル)として利用している。不規則過程(random process)とも言う。
確率分布
確率分布(probability distribution)は、確率変数の各々の値に対して、その起こりやすさを記述するものである。日本工業規格では、「確率変数がある値となる確率、又はある集合に属する確率を与える関数」と定義している。
確率変数
確率変数(random variable, aleatory variable, stochastic variable)とは、確率論ならびに統計学において、ランダムな実験により得られ得る全ての結果を指す変数である。数学で言う変数は関数により一義的に決まるのに対し確率変数は確率に従って定義域内の様々な値を取ることができる。
条件付き確率
条件付き確率(conditional probability)は、ある事象Bが起こるという条件の下での別の事象Aの確率のことをいう。条件付き確率は またはのように表される。条件付き確率はしばしば「が起こった時のの(条件付き)確率」「条件の下でのの確率」などと表現される。なお英文においては通例、"probability of given "または"probability of under the condition "と表現される。
ロードマップ
前項からお勉強しなければならない対象と順序を下記としました。
条件付き確率
およびを事象とし、とすると、におけるの条件付き確率は下記のいずれかで定義されます。
独立性
2つのランダムな事象が、独立している場合は下記のいずれかで表されます。
または
排反性
2つの事象,の積事象が空事象(要素を一切もたない集合)である事を排反(mutually exclusive)といい、下記が成り立ちます。
であるから、
したがって、条件付き確率の定義より、事象,,の確率がゼロ出ない場合、,が排反するならば条件付き確率、およびはゼロとなります。
注意点として、前述の通り排反事象の積の確率および条件付き確率はゼロになりますが、空ではない確率自体がゼロの集合があるので、逆は成り立たちません。
練習
条件付き確率への理解を深めるために、練習問題をPythonで解いてみます。
練習問題は株式会社 社会情報サービス様のBellCurve 統計WEBの下記ページを使用させていただきました。
練習問題(10. 条件付き確率とベイズの定理)
問題1
dice.csv
number,color 1,0 2,0 3,0 4,1 5,1 6,1
practice1.py
import pandas as pd import numpy as np import matplotlib.pyplot as plt df = pd.read_csv('dice.csv') X = df.values N = X.shape[0] # 青色で偶数の面を抽出する blue = 1 blues = X[X[:,1]==blue] blue_evens = blues[blues[:,0] % 2 == 0] # 条件付き確率を算出 pa = blues.shape[0] / N pa_b = blue_evens.shape[0] / N pa_b_inv = 0 if pa == 0 else 1 / pa cp = pa_b * pa_b_inv print(cp) df.plot(kind='scatter', x='number', y='color', c='color', cmap='winter') plt.ylim(-.1, 1.1) plt.yticks([0, 1]) plt.title('dice') plt.show()
出力結果
0.6666666666666666
まとめ
条件付き確率は2つの事象,の内、どちらか一方が起こった後、もう一方が起こる確率を計算出来る。
応用としてベイズによる分類などがあるようです、こちらには同時確率や共分散などが出てくるので寄り道するのが結果的にはHMMの理解へ寄与しそうです。
次回は確率分布をお勉強しようと思います。