次のマルコフ行列があるとします。
import numpy, scipy.linalg
A = numpy.array([[0.9, 0.1],[0.15, 0.85]])
定常確率が存在し、 に等しくなり[.6, .4]
ます。これは、行列の大きな累乗を取ることで簡単に確認できます。
B = A.copy()
for _ in xrange(10): B = numpy.dot(B,B)
ここB[0] = [0.6, 0.4]
に。ここまでは順調ですね。ウィキペディアによると:
定常確率ベクトルは、遷移行列の適用下で変化しないベクトルとして定義されます。つまり、固有値 1 に関連付けられた確率行列の左固有ベクトルとして定義されます。
したがって、固有値が 1 の の左固有ベクトルを計算できるはずA
です。これにより、定常確率も得られるはずです。Scipy の実装にeig
は left キーワードがあります。
scipy.linalg.eig(A,left=True,right=False)
与えます:
(array([ 1.00+0.j, 0.75+0.j]), array([[ 0.83205029, -0.70710678],
[ 0.5547002 , 0.70710678]]))
つまり、支配的な左固有ベクトルは次のとおり[0.83205029, 0.5547002]
です。私はこれを間違って読んでいますか?[0.6, 0.4]
固有値分解を使用してを取得するにはどうすればよいですか?