当前位置 博文首页 > F~C~H的博客:小白都能看懂的马尔可夫链详解
在机器学习算法中,马尔可夫链(Markov chain)是个很重要的概念。马尔可夫链(Markov chain),又称离散时间马尔可夫链(discrete-time Markov chain),因俄国数学家安德烈·马尔可夫(俄语:Андрей Андреевич Марков)得名,为状态空间中经过从一个状态到另一个状态的转换的随机过程。该过程要求具备“无记忆”的性质:下一状态的概率分布只能由当前状态决定,在时间序列中它前面的事件均与之无关。这种特定类型的“无记忆性”称作马尔可夫性质。马尔科夫链作为实际过程的统计模型具有许多应用。
在马尔可夫链的每一步,系统根据概率分布,可以从一个状态变到另一个状态,也可以保持当前状态。状态的改变叫做转移,与不同的状态改变相关的概率叫做转移概率。随机漫步就是马尔可夫链的例子。随机漫步中每一步的状态是在图形中的点,每一步可以移动到任何一个相邻的点,在这里移动到每一个点的概率都是相同的(无论之前漫步路径是如何的)。
(来自参考文献1)
用一句话来概括马尔科夫链的话,那就是某一时刻状态转移的概率只依赖于它的前一个状态。举个简单的例子,假如每天的天气是一个状态的话,那个今天是不是晴天只依赖于昨天的天气,而和前天的天气没有任何关系。这么说可能有些不严谨,但是这样做可以大大简化模型的复杂度,因此马尔科夫链在很多时间序列模型中得到广泛的应用,比如循环神经网络RNN,隐式马尔科夫模型HMM等。
假设状态序列为
?
x
t
?
2
,
x
t
?
1
,
x
t
,
x
t
+
1
,
x
t
+
2
,
?
?
x
t
?
2
,
x
t
?
1
,
x
t
,
x
t
+
1
,
x
t
+
2
,
?
?
x
t
?
2
,
x
t
?
1
,
x
t
,
x
t
+
1
,
x
t
+
2
,
?
?xt?2,xt?1,xt,xt+1,xt+2,??xt?2,xt?1,xt,xt+1,xt+2,? \cdots x_{t-2}, x_{t-1}, x_t, x_{t+1}, x_{t+2}, \cdots
?xt?2,xt?1,xt,xt+1,xt+2,??xt?2,xt?1,xt,xt+1,xt+2,??xt?2?,xt?1?,xt?,xt+1?,xt+2?,?t0?=[0.1,0.2,0.7],然后算之后的状态。
def markov():
init_array = np.array([0.1, 0.2, 0.7])
transfer_matrix = np.array([[0.9, 0.075, 0.025],
[0.15, 0.8, 0.05],
[0.25, 0.25, 0.5]])
restmp = init_array
for i in range(25):
res = np.dot(restmp, transfer_matrix)
print i, "\t", res
restmp = res
markov()
cs