yotaroy / HMM

Hidden Markov Model dice throw program

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

隠れマルコフモデルを使ったイカサマサイコロ連投問題

問題設定

  • サイコロの出た目が観測される.
  • サイコロは通常のサイコロか,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

About

Hidden Markov Model dice throw program


Languages

Language:Python 100.0%