实际项目我是这样做的:

def mining_ue_procedures_behavior(seq, lengths, imsi_list):
print("seq 3:", seq[:3], "lengths 3:", lengths[:3])
# model.fit(seq, lengths)
fitter = LabelEncoder().fit(seq) import sys
n_components=[5, 10, 20, 30][int(sys.argv[1])]
n_iter=[10, 30, 50, 100][int(sys.argv[2])] model_file = 'hmm_model_{}_{}.pkl'.format(n_components, n_iter)
if os.path.exists(model_file):
input_file = open(model_file, 'rb')
model = pickle.load(input_file)
input_file.close()
else:
model = hmm.MultinomialHMM(n_components=n_components, n_iter=n_iter)
seq2 = fitter.transform(seq)
model.fit(np.array([seq2]).T, lengths)
output_file = open(model_file, 'wb')
pickle.dump(model, output_file)
output_file.close()
print("model.startprob_:", model.startprob_)
print("model.transmat_:", model.transmat_)
print("model.emissionprob_:", model.emissionprob_)
## [[ 1.11111111e-01 2.22222222e-01 6.66666667e-01]
## [ 5.55555556e-01 4.44444444e-01 6.27814351e-28]]
start = 0
ans = []
for i,l in enumerate(lengths):
s = seq[start: start+l]
score = model.score(np.array([[d] for d in fitter.transform(s)]))
ans.append([score, imsi_list[i], s])
# print("score:", model.score(np.array([[d] for d in fitter.transform(s)])), s)
start += l
ans.sort(key=lambda x: x[0])
score_index = 0
malicious_ue = []
for i,item in enumerate(ans):
if item[score_index] < Config.HMMBaseScore:
malicious_ue.append(item)
print(item)
# print(ans)

  

输入数据参考了下面的优雅做法:

# predict a sequence of hidden states based on visible states
seq = []
lengths = []
for _ in range(100):
length = random.randint(5, 10)
lengths.append(length)
for _ in range(length):
r = random.random()
if r < .2:
seq.append(0)
elif r < .6:
seq.append(1)
else:
seq.append(2)
seq = np.array([seq]).T
model = model.fit(seq, lengths)

此外,HMM模型的持续增量训练:

# 解决问题3,学习问题,仅给出X,估计模型参数,鲍姆-韦尔奇算法,其实就是基于EM算法的求解
# 解决这个问题需要X的有一定的数据量,然后通过model.fit(X, lengths=None)来进行训练然后自己生成一个模型
# 并不需要设置model.startprob_,model.transmat_,model.emissionprob_
# 例如: import numpy as np
from hmmlearn import hmm states = ["Rainy", "Sunny"]##隐藏状态
n_states = len(states)##隐藏状态长度 observations = ["walk", "shop", "clean"]##可观察的状态
n_observations = len(observations)##可观察序列的长度 model = hmm.MultinomialHMM(n_components=n_states, n_iter=1000, tol=0.01) X = np.array([[2, 0, 1, 1, 2, 0],[0, 0, 1, 1, 2, 0],[2, 1, 2, 1, 2, 0]])
model.fit(X)
print model.startprob_
print model.transmat_
print model.emissionprob_
# [[ 1.11111111e-01 2.22222222e-01 6.66666667e-01]
# [ 5.55555556e-01 4.44444444e-01 6.27814351e-28]]
print model.score(X)
model.fit(X)
print model.startprob_
print model.transmat_
print model.emissionprob_
和第一次fit(X)得到的行顺序不一样
# [[ 5.55555556e-01 4.44444444e-01 9.29759770e-28]
# [ 1.11111111e-01 2.22222222e-01 6.66666667e-01]]
print model.score(X)
model.fit(X)
print model.startprob_
print model.transmat_
print model.emissionprob_
print model.score(X)
# 可以进行多次fit,然后拿评分最高的模型,就可以预测了
print model.predict(bob_Actions, lengths=None)
# 预测最可能的隐藏状态
# 例如:
# [0 1 0 0 0 1]
print model.predict_proba(bob_Actions, lengths=None)# 预测各个隐藏状态的概率
# 例如:
# [[ 0.82770645 0.17229355]
# [ 0.27361913 0.72638087]
# [ 0.58700959 0.41299041]
# [ 0.69861348 0.30138652]
# [ 0.81799813 0.18200187]
# [ 0.24723966 0.75276034]]
# 在生成的模型中,可以随机生成随机生成一个模型的Z和X
X,Z = model.sample(n_samples=5, random_state=None)
print "Bob Actions:", ", ".join(map(lambda x: observations[x], X))
print "weathers:", ", ".join(map(lambda x: states[x], Z)) # 保存模型
import pickle
output = open('D:\\xxx\\data1111.pkl', 'wb')
s = pickle.dump(model, output)
output.close()
# 调用模型
input = open('D:\\xxx\\data.pkl', 'rb')
model = pickle.load(model)
input.close()
model.predict(X)

  

HMM 模型输入数据处理的优雅做法 来自实际项目的更多相关文章

  1. 应用HTK搭建语音拨号系统3:创建绑定状态的三音素HMM模型

    选自:http://maotong.blog.hexun.com/6261873_d.html 苏统华 哈尔滨工业大学人工智能研究室 2006年10月30日 声明:版权所有,转载请注明作者和来源 该系 ...

  2. HMM模型

    通过前几时断续的学习,发现自己对HMM模型的了解还只停留在皮毛,导致在学习CRF模型并将其与最大熵模型.HMM.MEMM做比较时感觉很吃力,所以又花了两天时间使劲看了遍HMM,发现了解得确实深刻了很多 ...

  3. 隐马尔科夫模型HMM(一)HMM模型

    隐马尔科夫模型HMM(一)HMM模型基础 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比 ...

  4. 时序分析:HMM模型(状态空间)

    关于HMM模型:时序分析:隐马尔科夫模型 HMM用于手势识别: 训练时每一种手势对应一个HMM-Model,识别率取最大的一个HMM即可.  类似于一个封装的完成多类识别器功能单层网络. 优点: 尤其 ...

  5. tensorflow学习笔记——多线程输入数据处理框架

    之前我们学习使用TensorFlow对图像数据进行预处理的方法.虽然使用这些图像数据预处理的方法可以减少无关因素对图像识别模型效果的影响,但这些复杂的预处理过程也会减慢整个训练过程.为了避免图像预处理 ...

  6. 应用HTK搭建语音拨号系统2:创建单音素HMM模型

    选自:http://maotong.blog.hexun.com/6204849_d.html 苏统华 哈尔滨工业大学人工智能研究室 2006年10月30日 声明:版权所有,转载请注明作者和来源 该系 ...

  7. HMM模型学习笔记(前向算法实例)

    HMM算法想必大家已经听说了好多次了,完全看公式一头雾水.但是HMM的基本理论其实很简单.因为HMM是马尔科夫链中的一种,只是它的状态不能直接被观察到,但是可以通过观察向量间接的反映出来,即每一个观察 ...

  8. 数学之美——HMM模型(二)解码和Forward算法

    上一篇讨论了HMM的基本概念和一些性质,HMM在现实中还是比较常见的,因此也带来一了一系列的HMM应用问题.HMM应用主要面向三个方面:预测.解码和学习.这篇主要讨论预测. 简单来说,预测就是给定HM ...

  9. 数学之美——HMM模型(一)介绍

    一直想写点关于数学方面的blog,这对于数据挖掘分析,NLP处理等都有着比较重要的作用,之前在CSDN上想写点HMM方面的文章,一直没写成,最近几天终于抽点时间完成了HMM的文章,加以整理,遂有这个系 ...

随机推荐

  1. beego框架(golang)学习过滤器(实现restful请求)

    过滤器 在用beego做restful路由的时候,遇到了除了GTE.POST之外的HTTP请求,比如 PUT.PATCH.delete请求无法通过路由认证,报错误:405 METHOD NOT ALL ...

  2. Terence’s Stuff: Why do we do research?

    This sound like a question best answered via a survey conducted by a body such as Vitae, an internat ...

  3. 第07组 Alpha冲刺(2/4)

    队名:秃头小队 组长博客 作业博客 组长徐俊杰 过去两天完成的任务:完成人员分配,初步学习Android开发 Github签入记录 接下来的计划:继续完成Android开发的学习,带领团队进行前后端开 ...

  4. 029 Android 轮播图广告Banner开源框架使用

    1.Banner介绍 现在的绝大数app都有banner界面,实现循环播放多个广告图片和手动滑动循环等功能. 2.使用环境配置(具体可见github开源项目) (1)添加依赖 在build.gradl ...

  5. lnmp二级域名配置相关

    阿里云那域名解析那有误读 我在偏远的电信网选择中国联通解析死活解析不出来 以上这么配置就对了....选择默认.瞬间解析出来.... 出于对nginx 配置不够熟悉 后来一点点理出来. 不带www 也正 ...

  6. Git--远程仓库版本回退方法

    Git--远程仓库版本回退方法 1 简介 最近在使用git时遇到了远程分支需要版本回滚的情况,于是做了一下研究,写下这篇博客. 2 问题 如果提交了一个错误的版本,怎么回退版本? 如果提交了一个错误的 ...

  7. Struts笔记3

    struts标签 form表单标签 Action:请求地址.直接写动作名称,不用写contextPath <s:form action="/user/register.action&q ...

  8. 面向对象分析与设计—OOA部分

    第二部分 面向对象分析 2.1 面向对象分析(OOA)的定义? OOA——面向对象的分析,就是运用面向对象方法进行系统分析,对问题域(问题所涉及的范围)和系统责任(所开发的系统应具备的职能)进行分析与 ...

  9. Github相关问题集锦

    问题 对于我们国内用户,有时候浏览器在进入github网站时,会出现无法加载或加载很慢的问题,针对这一问题,很是头疼,为解决这一问题,在网上搜索到的解决方法如下: 解决方案 修改hosts文件,在ho ...

  10. hdu 1501 贪心问题

    这道题目的关键就是逐个搜索的过程 找个时间得复习一下dfs了    这里使用temp作为参照变量 每次比较以后(由于已经排序好) 已temp为参照进行下一次的比较