HMM(隐马尔可夫)

199 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

前言

隐马尔可夫模型:是结构最简单的动态贝叶斯网络,是一种尤其著名的有向图结构,主要用于时序数据的建模,在语音识别、自然语言处理等领域有广泛应用,在分词算法中,隐马尔可夫经常用作能够发现新词的算法,通过海量的数据学习,能够将人名、地名、互联网上的新词等——识别出来,具有广泛的应用场景。

一、马尔可夫链

马尔可夫过程:随机过程的每一步结果与且仅与上一步有关,与其他无关。 马尔可夫链:将来的状态分布只是取决于上一步状态,与过去的每一个状态都没有关系,按照这种规律构成的状态集合就是马尔可夫链。 根据马尔可夫链,我们计算状态概率,需要两个条件: 1、知道初始状态(状态分布矩阵) 2、有规律的状态转移矩阵,即根据初始状态,之后的状态转移是有规律的。(状态转移概率矩阵) 例子: 假设初始状态为 s=[0.3 0.4 0.3] (即吃饭的概率是0.3,睡觉的概率是0.4 学习的概率是0.3) 假设状态转移概率矩阵为: 在这里插入图片描述 (第一列为初始状态)

import numpy as np

matrix = np.matrix([[0.05, 0.75, 0.2],
                    [0.8, 0.05, 0.15],
                    [0.25, 0.5, 0.25]])
vector1 = np.matrix([[0.3, 0.4, 0.3]])

for i in range(100):
    vector1 = vector1 * matrix
    print('第{}次状态吃饭、睡觉、学习的概率分别为:'.format(i+1))
    print(vector1)

# result:1次状态吃饭、睡觉、学习的概率分别为:
[[0.41  0.395 0.195]]
第2次状态吃饭、睡觉、学习的概率分别为:
[[0.38525 0.42475 0.19   ]]
第3次状态吃饭、睡觉、学习的概率分别为:
[[0.4065625 0.405175  0.1882625]]
第4次状态吃饭、睡觉、学习的概率分别为:
[[0.39153375 0.41931188 0.18915438]]
第5次状态吃饭、睡觉、学习的概率分别为:
[[0.40231478 0.40919309 0.18849213]]
…………………………………………………………………………

第95次状态吃饭、睡觉、学习的概率分别为:
[[0.39781591 0.41341654 0.18876755]]
第96次状态吃饭、睡觉、学习的概率分别为:
[[0.39781591 0.41341654 0.18876755]]
第97次状态吃饭、睡觉、学习的概率分别为:
[[0.39781591 0.41341654 0.18876755]]
第98次状态吃饭、睡觉、学习的概率分别为:
[[0.39781591 0.41341654 0.18876755]]
第99次状态吃饭、睡觉、学习的概率分别为:
[[0.39781591 0.41341654 0.18876755]]
第100次状态吃饭、睡觉、学习的概率分别为:
[[0.39781591 0.41341654 0.18876755]]

总结:从图中我们可以看出,最终状态的概率分布趋于同一个稳定的概率分布[0.39781591, 0.41341654, 0.18876755]。经过实验发现,更换初始状态,对最终状态的概率分布不会产生影响,也就是说,马尔可夫链模型的状态转移矩阵收敛得到的稳定概率分布和初始状态无关

二、隐马尔可夫模型

隐马尔可夫模型:统计模型,用来描述一个含有隐含未知参数的马尔可夫过程。 任何一个隐马尔可夫模型都可以通过下列的五元组来描述: 1、观测序列 2、隐含状态 3、初始概率(对应马尔可夫链中的初始状态分布矩阵) 4、转移概率(对应马尔可夫链中的状态转移概率矩阵) 5、发射概率

未完待续……