Python
マルコフ連鎖

マルコフ連鎖をPythonで

マルコフ連鎖状態遷移の
http://web.tuat.ac.jp/~s-hotta/info/slide4.pdf
の天気の確率遷移をPythonで問題を説いてみる

markovchain.py
import numpy as np
#晴の日の翌日が、晴になる確率は 0.6 曇りになる確率は 0.3 雨になる確率は 0.1
#曇の日の翌日が、晴になる確率は 0.3 曇りになる確率は 0.6 雨になる確率は 0.1
#雨の日の翌日が、晴になる確率は 0.2 曇りになる確率は 0.3 雨になる確率は 0.5
#これを行列で表すと
prob_matrix  =np.array(
[[0.6, 0.3, 0.1],
[0.3, 0.6, 0.1],
[0.2, 0.3, 0.5]])

#初期状態を、晴として、翌日の天気の確率分布を計算(10日後まで繰り返す)
state = np.array([1,0, 0])
for x in range(10):
    state = np.dot(state,prob_matrix)
    print('{0}日後'.format(x + 1))
    print state

出力結果

1日後
[ 0.6  0.3  0.1]
2日後
[ 0.47  0.39  0.14]
3日後
[ 0.427  0.417  0.156]
4日後
[ 0.4125  0.4251  0.1624]
5日後
[ 0.40751  0.42753  0.16496]
6日後
[ 0.405757  0.428259  0.165984]
7日後
[ 0.4051287  0.4284777  0.1663936]
8日後
[ 0.40489925  0.42854331  0.16655744]
9日後
[ 0.40481403  0.42856299  0.16662298]
10日後
[ 0.40478191  0.4285689   0.16664919]

ということで、途中から天気の分布は収束する。