Edited at

マルコフ連鎖をPythonで

More than 1 year has passed since last update.

マルコフ連鎖状態遷移の

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]

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