本文主要是介绍【转载】理工渣眼中的HMM及安全应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
话说,又到了盼星星盼月亮才等来的周末,结果由于强网杯又给糟蹋了。
比赛实在是被虐的受不了了,于是“点子扎手,风紧扯呼”了~
去91RI逛了一圈,发现了一篇讲HMM不错的文章,记录下来学习学习。
原文地址:http://www.91ri.org/12659.html
----------------------------------------------------------------我是华丽丽的分割线---------------------------------------------------------------------

开心 | 正常 | 崩溃 |
0.36 | 0.51 | 0.13 |
状态转移矩阵A:
开心 | 正常 | 崩溃 | |
开心 | 0.365 | 0.500 | 0.135 |
正常 | 0.250 | 0.125 | 0.625 |
崩溃 | 0.365 | 0.265 | 0.370 |
发射矩阵B:
汉堡 | 西瓜 | 啤酒 | |
开心 | 0.1 | 0.2 | 0.7 |
正常 | 0.5 | 0.25 | 0.25 |
崩溃 | 0.8 | 0.1 | 0.1 |
一个HMM模型就由上面描述的隐藏状态数N,观测状态数M,初始隐状态向量pi,状态转移矩阵A,混淆矩阵B五个要素组成。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
现在男主小明开始做任务了,我们用现成的工具mahout来示例
查了Mahout的中文意思——驭象的人,再看看Mahout的logo,好吧,想和小黄象happy地玩耍,得顺便陪陪这位驭象人耍耍了...
安装指南(仅介绍local版)
wget http://archive.apache.org/dist/mahout/0.9/mahout-distribution-0.9.tar.gzcd mahout-distribution-0.9/vim bin/mahout
修改
MAHOUT_JAVA_HOME=/usr/lib/jvm/java-6-openjdk-amd64 (修改为你自己的java所在地址)MAHOUT_LOCAL=true
任务一:学习(本例中根据女主吃的食物序列,推断一个合适的HMM模型)
echo "0 1 2 2 2 1 1 0 0 2 1 2 1 1 1 1 2 2 2 0 0 0 0 0 0 2 2 2 0 0 0 0 0 0 1 1 1 1 2 2 2 2 2 0 2 1 2 0 2 1 2 1 1 0 0 0 1 0 1 0 2 1 2 1 2 1 2 1 1 0 0 2 2 0 2 1 1 0"
>> hmm-input
2.输入观测序列后,开始生成HMM模型 bin/mahout baumwelch -i hmm-input(观测序列文件) -o hmm-model(hmm模型文件) -nh 3(隐状态数) -no 3(观测状态数) -e .0001 -m 10
3.观察结果 Initial probabilities: 初始隐状态向量pi
0 1 2
0.062295949769082204 0.22250521455286396 0.7151988356780538
Transition matrix:状态转移矩阵A:
0 1 2
0 0.3765444789556002 0.5583673988903969 0.06508812215400292
1 0.3759312048603327 0.2560959620304218 0.36797283310924545
2 0.5383787685979908 0.24752553248847228 0.21409569891353694
Emission matrix: 发射矩阵
0 1 2
0 0.4419117509334424 0.3106990713267408 0.2473891777398168
1 0.20948851558479514 0.2830936761513362 0.5074178082638686
2 0.34341499252552676 0.40310175949497634 0.2534832479794969
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
bin/mahout hmmpredict -m hmm-model(hmm模型文件) -o hmm-predictions (预测结果文件)-l 10(预测多少个后续观测状态)
我们看结果 more hmm-predictions
2 2 0 0 1 2 1 2 2 1
预测女主后续会吃的东西依次为 :啤酒,啤酒,汉堡,汉堡,西瓜,啤酒,西瓜,啤酒,啤酒、西瓜 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
echo "2 2 0 0 1 2 1 2 2 1" >> hmm-viterbi-input
判断观测状态序列对应的隐状态序列
bin/mahout viterbi -i hmm-viterbi-input -o hmm-viterbi-output -m hmm-model -l
我们看结果
more hmm-viterbi-output
2 1 2 0 0 1 2 0 1 2
可以看到女主
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
这篇关于【转载】理工渣眼中的HMM及安全应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!