统计学习方法第10章隐马尔可夫模型Viterbi算法例10.3代码实践
2018-01-30 21:14
309 查看
统计学习方法第10章隐马尔可夫模型Viterbi算法例10.3代码实践
from numpy import * def calcNextFunc(alpha,feat,A,B,O,n): nextAlpha=mat(zeros((n,1))) Idict={} for i in range(n): midMatr=multiply(alpha,A[:,i].T).tolist()[0] #计算书上对应的公式10.46等式的右边 #print(midMatr) value=max(midMatr) #print(value) nextAlpha[i]=value Idict[i+1]=midMatr.index(value)+1 #这个字典对应每个状态的最优路径 nextAlpha=multiply(nextAlpha,B[:,V.index(O[feat])]).T #这个计算10.45的矩阵 return nextAlpha,Idict #为了迎合书上对最优路径的列的定义这里都在列的相应索引上加1 def calcResult(alpha,Idict,m): IList=[] alphaList=alpha.tolist()[0] maxIndex=alphaList.index(max(alphaList))+1 IList.append(maxIndex) for i in range(m-1,0,-1): maxIndex=Idict[i][maxIndex] IList.append(maxIndex) return IList def viterbi(V,A,B,Pi,O): m=len(O) n=shape(Pi)[1] Idict={} alpha=multiply(Pi,B[:,V.index(O[0])].T) for i in range(1,m): alpha,subDict=calcNextFunc(alpha,i,A,B,O,n) Idict[i]=subDict return calcResult(alpha,Idict,m) V=['红','白'] A=mat([[0.5,0.2,0.3],[0.3,0.5,0.2],[0.2,0.3,0.5]]) B=mat([[0.5,0.5],[0.4,0.6],[0.7,0.3]]) Pi=mat([0.2,0.4,0.4]) O=['红','白','红'] print(viterbi(V,A,B,Pi,O))
结果如下:
[3, 3, 3]
好像算法略显复杂,数据结构没学好可能就会这样吧0.0
made by zcl at CUMT
I know I can because I have a heart that beats
相关文章推荐
- 统计学习方法第10章隐马尔可夫模型后向算法例题10.2代码实践
- 统计学习方法第五章决策树的ID3算法代码实践 例5.3
- 统计学习方法第6 章的例6.1求最大熵用随机数代码实践
- 统计学习方法第七章的序列最小最优化算法SMO代码实践
- 统计学习方法第五章CART算法代码实践例题5.4
- 统计学习方法第五章决策树C4.5算法代码实践
- 统计学习方法第二章例题2.2代码实践,感知机的对偶形式的代码实现
- 统计学习方法第三章例3.1代码实践
- 统计学习方法第五章决策树的选择最优特征划分例5-1-5.2代码实践
- 统计学习方法第11章条件随机场(CRF)的Viterbi算法例题11.3代码实践
- 统计学习方法第四章朴素贝叶斯的贝叶斯估计,例题4.2代码实践
- 统计学习方法第八章AdaBoost算法的例8.1代码实践
- 统计学习方法第11章条件随机场例11.1的代码实践
- 李航统计学习方法 维特比算法实现例10.3
- 【代码阅读的方法与实践】第10章 代码阅读工具
- 统计学习方法笔记二-----感知机算法(PLA)代码实现
- 感知机 python 代码实现 ----- 统计学习方法
- jacoco远程统计代码覆盖率(实践)
- 统计学习方法之感知机对偶形式Java实现代码
- 统计学习方法 李航---第10章 隐马尔可夫模型