隠れマルコフモデルを使ったイカサマサイコロ連投問題
問題設定
- サイコロの出た目が観測される.
- サイコロは通常のサイコロか,6の目が50%で出るイカサマサイコロである.
- 次にどちらのサイコロを振るかは,直前に振ったサイコロによって確率的に決まる.
- これを隠れマルコフモデルとして,投げられているサイコロがイカサマサイコロである確率をforward-backward algorithmで解く.
観測変数
Y = 1, ..., 6
隠れ変数
X = 1 イカサマサイコロを使用(1/2の確率で6が出る,1から5はそれぞれ1/10の確率で出る)
X = 0 通常のサイコロを使用(1から6までがそれぞれ1/6の確率で出る)
隠れ変数の遷移モデル
p(X_(t+1) = 0 |X_t = 0) = 0.9
p(X_(t+1) = 0 |X_t = 1) = 0.1
p(X_(t+1) = 1 |X_t = 0) = 0.9
p(X_(t+1) = 1 |X_t = 1) = 0.1
観測過程モデル
P(Y_t = i | X_t = 0) = 1/6 (i=1, ..., 6)
P(Y_t = i | X_t = 1) = 1/10 (i=1, ..., 5)
P(Y_t = 6 | X_t = 1) = 1/2
サイコロの出目の系列
4454233645534414536533355356551343126161542415411115666616262616666632666166266566566664366525456544
プログラムについて
プログラムはpython3で書かれている.
$ python HMM.py
で動かすことができる.
グラフは ex.png に保存され,同時に表示される.
振られているサイコロがイカサマサイコロである確率はgammaである.
出力例: ex.png