赞
踩
马尔科夫链和转移矩阵是什么?马尔科夫链是如何生成的?以及如何使用?下面我来详细介绍!
1、马尔科夫链(Markov chain)概述
机器学习算法中,马尔可夫链在时间序列模型广泛的应用。主要思想是不管初始状态是什么,只要状态转移矩阵不发生变化, 最终状态始终会收敛到一个固定值, 这种无记忆性叫马尔科夫属性。公式为:
2、转移概率矩阵(Transition Probability Matrix)
转移概率矩阵:矩阵各元素都是用概率表示。其值非负,并且各行元素之和等于1。在一定条件下是互相转移的,故称为转移概率矩阵。
二步转移概率矩阵正好是一步转移概率矩阵的平方。k步转移概率矩阵是一步转移概率矩阵的k次方。k步转移概率矩阵中,各行元素之和也都为1。
例如:矩阵P某一位置P(i,j)的值为P(j|i),即从状态i转化到状态j的概率,如状态转移矩阵为:
3、马尔科夫链形成过程
给定初始状态如:p0=[0.5, 0.2, 0.3], k步转化过程为:p0=p0*pk。计算机程序需要利用迭代变量,借助循环实现。经过多步转化p0收敛于固定值(稳态)。本实例为[ 0.6248219 0.31266282 0.06251528]。
1、题目要求
根据上述基本原理,用python程序验证马尔科夫链形成过程:两个初始状态 p01=[0.5, 0.2, 0.3],p02=[0.1,0.4,0.5]; 状态转移矩阵都为p=[[0.9, 0.075, 0.025], [0.15, 0.8, 0.05],[0.25, 0.25, 0.5]]; 经过k(30)步完成马尔科夫链转化过程。
要求完成转化过程计算并将其过程与结果用图形表示。如图1,两个初始状态的不同的三个初始值,经过相同的状态转移矩阵完成马尔科夫链转化后,不仅数值本身收敛,而且两组收敛值趋于相同。
2、代码实现
import numpy as np import pylab as pl p01= np.array([0.5, 0.2, 0.3]) #p0数据 1,矩阵中每一行概率之和总等于1 p02=np.array([0.1,0.4,0.5]) #p0数据 2, 两个初始状态,用于分别计算和画图 p= np.array([[0.9, 0.075, 0.025], [0.15, 0.8, 0.05],[0.25, 0.25, 0.5]]) n=30 c= np.array(['r','g','b']) #定义画图颜色数组 def calanddraw(p0,p ):#2 计算并画图函数 for i in range(n):#3 p0= np.mat(p0) * np.mat(p) #迭代变量 确定p0与p 的关系 for j in range(len(np.array(p0)[0])): pl.scatter(i,p0[0,j], c = c[j], s=.5)#确定画点属性 pl.subplot(121) calanddraw(p01,p)#调用数据画图 pl.subplot(122) calanddraw(p02,p)#调用数据画图 pl.show()
3、运行结果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。