概述
使用隐马尔科夫模型生成数据
为了理解HMMs,让我们是靠一下例子,一个销售人员因为其工作,需要转辗在三个城市之间(伦敦,巴塞罗纳,纽约)。他的目的是最小化旅行的时间,以便更高效的工作。考虑一下他的工作委托和计划安排,我们能得到他从x城市到y城市的概率。在一下给出的信息中,P(X->Y)表示从X城市到Y城市的概率:
P(伦敦->伦敦) =0.10
P(伦敦->巴塞罗那) = 0.70
P(伦敦->纽约) = 0.20
P(巴塞罗那->巴塞罗那) =0.15
P(巴塞罗那->伦敦) = 0.75
P(巴塞罗那->纽约) = 0.10
P(纽约->纽约)=0.05
P(纽约->伦敦)= 0.60
P(纽约->巴塞罗那) = 0.35
将上面数据转化为矩阵:
伦敦 巴塞罗那 纽约
伦敦 0.10 0.70 0.20
巴塞罗那 0.75 0.15 0.10
纽约 0.60 0.35 0.05
我们现在得到了所有的信息,让我们继续问题陈述.这个销售人员在周二这天从伦敦出发开始了他的旅行,,并且它需要在周五计划一些事情,但是这依靠他胜出何地。他将出现在巴塞罗那的概率是多少呢?这个表格将帮我们弄清楚:
如果我们没有一个 马尔可夫链来对这个问题建模,我们将不会知道他的日程安排是怎样的。我们的目标是给出他在被给定日期他在特定城市的可能性。假设我们将转换矩阵设为T,当前日期为X(i),则
X(i+1)=X(i)*T
在这个案例中,周五离周二是3天。这意味着我们必须计算X(i+3)
X(i+1)=X(i)*T
X(i+2)=X(i+1)*T
X(i+3)=X(i+2)*T
可推出:X(i+3)=X(i)*T^3
我们需要设置X(i)
X(i)=[0.10 0.70 0.20]
下一步就是计算矩阵的立方。网上有很多在线对矩阵进行操作的工具例如 http://matrix.reshish.com/multiplication.php。计算结果如下:
T^3 =
则在周二的概率是
P(伦敦)= 0.31
P(巴塞罗那)=0.53
P(NY)=0.16
我们能够考到巴塞罗那的概率最高,这也具有地理意义,因为巴塞罗那相比于纽约,离伦敦是更近的。那如何构建一个HMMS?
创建一个python文档,代码如下:
import datetime
import numpy as np
import matplotlib.pyplot as plt
from hmmlearn.hmm import GaussianHMM
from Slicing_time_series_data import read_data
# hmmlearn实现了三种HMM模型类,按照观测状态是连续状态还是离散状态,可以分为两类。GaussianHMM和GMMHMM是连续观测状态的HMM模型,而MultinomialHMM是离散观测状态的模型,也是我们在HMM原理系列篇里面使用的模型。
#加载数据
data = np.loadtxt('data_1D.txt',delimiter=',')
#提取第三列进行训练
x=np.column_stack([data[:,2]])
#创建GaussianHMM,参数:状态的数量n_components=5,covariance_type='diag',“diag” - 每个状态使用对角协方差矩阵。n_iter要执行的最大迭代次数。
num_components =5
hmm =GaussianHMM(n_components=num_components,covariance_type='diag',n_iter=1000)
#训练HMM
print("n正在训练隐马尔科夫模型....")
hmm.fit(x)
#输出每个HMM状态的平均值和方差
print("n均值和方差:")
for i in range(hmm.n_components):
print('n隐状态',i+1)
print('均值 = ',round(hmm.means_[i][0],2))
print("方差 = ",round(np.diag(hmm.covars_[i])[0],2))
#生成1200条数据训练HMM模型并绘出
num_samples = 1200
generated_data,_=hmm.sample(num_samples)#_约定不关心数字的变量,后期不使用
plt.plot(np.arange(num_samples),generated_data[:,0],c='red')
plt.title('Gnenerate data')
plt.show()
1200数据如下
输出结果如下:结果与书上不同,本人环境使用的是hmmlearn0.20版本,较之前训练数据不同了
最后
以上就是直率小熊猫为你收集整理的人工智能:python 实现 第十一章,使用隐马尔科夫模型生成数据的全部内容,希望文章能够帮你解决人工智能:python 实现 第十一章,使用隐马尔科夫模型生成数据所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复