虽然是理工妹子,但仍是数学渣。症状之一便是每次学习算法都能把自己绕成鸡窝头。所以测验写一篇数学渣眼中的HMM。
咱们先看一个让人头疼的HMM界说式(喜爱从公式下手是我多年来敷衍考试养成的不良习性)
一、HMM五米素
N:躲藏状况数 hidden states
M:观测状况数 observed states
A: 状况搬运矩阵 transition matrix
B:发射矩阵 emission matrix
pi:初始隐状况向量 initial state vector
好了,接下来咱们用数学渣能够了解的言语来解说上面都是些什么鬼
女主:小红 用食物测量心境
心境状况有三种: 高兴、正常、溃散
上面三种状况的时分吃的食物也有三种: 汉堡、 西瓜、啤酒
男主:小明 面部表情辨认妨碍
因而对男主而言,
躲藏状况:女主的心境状况
观测状况:女主吃的食物
躲藏状况数 :N=3
观测状况数: M=3
初始隐状况向量pi:
对照下表看:女主处于各种心境状况的概率,例如女主51%的概率是正常的,36%的概率是高兴的,13%的概率是溃散的
高兴
正常
溃散
0.36
0.51
0.13
状况搬运矩阵A:
上一个隐状况到下一个隐状况的转化概率矩阵
对照下表看:在女主上一个状况是高兴的条件下,则此时状况是高兴的概率为36.5%,正常的概率为50%,溃散的概率为13.5%
高兴
正常
溃散
高兴
0.365
0.500
0.135
正常
0.250
0.125
0.625
溃散
0.365
0.265
0.370
发射矩阵B:
隐状况对应的观测状况的概率
对照下表看:在女主是高兴的状况下,她吃汉堡的概率是10%,西瓜的概率是20%,啤酒的概率是70%
汉堡
西瓜
啤酒
高兴
0.1
0.2
0.7
正常
0.5
0.25
0.25
溃散
0.8
0.1
0.1
一个HMM模型就由上面描述的躲藏状况数N,观测状况数M,初始隐状况向量pi,状况搬运矩阵A,混杂矩阵B五个要素组成。
咱们知道了什么是HMM,接下来看HMM是干嘛的,用mahout的HMM库来示例HMM处理哪三类问题,依然用小红和小明的场景
二、HMM处理的三类问题-mahout示例
现在男主小明开端做使命了,咱们用现成的东西mahout来示例
装置攻略(仅介绍local版)
Default
wget http://archive.apache.org/dist/mahout/0.9/mahout-distribution-0.9.tar.gz
cd mahout-distribution-0.9/
vim bin/mahout
修正
Default
MAHOUT_JAVA_HOME=/usr/lib/jvm/java-6-openjdk-amd64 (修正为你自己的java地点地址)
MAHOUT_LOCAL=true使命一:学习(本例中依据女主吃的食物序列,揣度一个适宜的HMM模型)
输入:观测状况序列——女主吃的食物序列,咱们用数字表明对应的食物与心境
0:汉堡
1:西瓜
2:啤酒
0 :溃散
1:高兴
2: 正常
输出:生成一个适宜的HMM模型
算法:BaumWelch
Default
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 输入观测序列后,开端生成HMM模型
Default
bin/mahout baumwelch -i hmm-input(观测序列文件) -o hmm-model(hmm模型文件) -nh 3(隐状况数) -no 3(观测状况数) -e .0001 -m 10咱们看成果
Initial probabilities: 初始隐状况向量pi0 1 20.062295949769082204 0.22250521455286396 0.7151988356780538Transition matrix:状况搬运矩阵A:0 1 20 0.3765444789556002 0.5583673988903969 0.065088122154002921 0.3759312048603327 0.2560959620304218 0.367972833109245452 0.5383787685979908 0.24752553248847228 0.21409569891353694Emission matrix: 发射矩阵0 1 20 0.4419117509334424 0.3106990713267408 0.24738917773981681 0.20948851558479514 0.2830936761513362 0.50741780826386862 0.34341499252552676 0.40310175949497634 0.2534832479794969
使命二:猜测(依据上一个使命生成的HMM模型来猜测女主后续会吃的东西)
输入:HMM模型
输出:猜测后续的观测状况,或许核算给定规矩状况序列的概率(这个咱们鄙人一个场景中描述)
算法: ForwardBackward
Default
bin/mahout hmmpredict -m hmm-model(hmm模型文件) -o hmm-predictions (猜测成果文件)-l 10(猜测多少个后续观测状况)咱们看成果
Default
more hmm-predictions
2 2 0 0 1 2 1 2 2 1猜测女主后续会吃的东西依次为 :啤酒,啤酒,汉堡,汉堡,西瓜,啤酒,西瓜,啤酒,啤酒、西瓜
使命三:编码(依据女主吃的东西,判别女主当时的心境,这个也是男主最关怀的使命,女孩的心思你别猜。。。)
输入:HMM模型,观测状况序列
输出:观测状况序列对应的躲藏状况序列
[1] [2] [3] [4] [5] 黑客接单网