首发于 机器学习及NLP

马尔可夫与隐马尔可夫模型

写在前面,小学生往往不需要知道极限,二阶导数,高阶导数,他只需要知道怎么求解。

Background requirements:

1、基础的概率学知识

2、动态规划是加分项

3、有实际运用Markov Model的应用会帮助学以致用


NOTE:

对于下面的介绍,我们依据这个节奏, 参考。

1)指定模型参数

2)如何估计这些参数 【这个没有进行介绍】

3)利用这些参数进行预测

这三大类适用于任何统计机器学习模型

马尔可夫链

马尔可夫链(英语:Markov chain),又称离散时间马尔可夫链(discrete-time Markov chain,缩写为DTMC[ 1]),因俄国数学家 安德烈·马尔可夫(俄语:Андрей Андреевич Марков)得名,为 状态空间中经过从一个状态到另一个状态的转换的 随机过程。该过程要求具备“无记忆”的性质:下一状态的概率分布只能由当前状态决定,在时间序列中它前面的事件均与之无关。这种特定类型的“无记忆性”称作 马尔可夫性质。马尔科夫链作为实际过程的统计模型具有许多应用。

一阶马尔可夫如下:

NOTE:下一刻状态如果只由当前状态决定,就叫一阶马尔可夫,如果由当前和前一刻,那就叫二阶,同理。所以有m阶马尔可夫链。m阶马尔可夫如下:

我就不给出很多公式了,就给这几个,理论上这些应该比较好懂了。好了我就不多说了。我个人觉得别的概念这里没有必要说。接下来我们来看隐马尔可夫模型

隐马尔可夫模型

正常的马尔可夫模型中,状态对于观察者来说是直接可见的。这样状态的转换概率便是全部的参数。而在马尔可夫模型中,状态并不是直接可见的,但受状态影响的某些变量则是可见的。每一个状态在可能输出的符号上都有一 概率分布。因此输出符号的序列能够透露出状态序列的一些信息。


HMM有三个典型(canonical)问题:

通常使用 前向算法解决.

通常使用 前向-后向算法解决.

, 通常使用 Viterbi算法解决.【我们这里只关心这个问题,前面的两个不操心】【BTW,HMM是生成模型。。。in case you are interested】

预警

我要抄袭了(整个都是抄的)。这个例子来自维基百科,我们来理解一下隐马尔可夫链,以及Verterbi解码算法怎么运行的。

整个流程是这样的,我们遇到一个问题,他刚好满足了隐马尔可夫的特性,然后我们将问题建模,抽象为一个隐马尔可夫的求解问题,怎么求解呢?使用Viterbi算法。

想象一个乡村诊所。村民有着非常理想化的特性,要么健康要么发烧。他们只有问诊所的医生的才能知道是否发烧。 聪明的医生通过询问病人的感觉诊断他们是否发烧。村民只回答他们感觉正常、头晕或冷。

假设一个病人每天来到诊所并告诉医生他的感觉。医生相信病人的健康状况如同一个离散 马尔可夫链。病人的状态有两种“健康”和“发烧”,但医生不能直接观察到,这意味着状态对他是“隐含”的。每天病人会告诉医生自己有以下几种由他的健康状态决定的感觉的一种:正常、冷或头晕。这些是观察结果。 整个系统为一个隐马尔可夫模型(HMM)。

医生知道村民的总体健康状况,还知道发烧和没发烧的病人通常会抱怨什么症状。 换句话说,医生知道隐马尔可夫模型的参数。我在这里讲解一下隐马尔可夫模型究竟有哪些参数:

H(Hidden state):隐藏状态集合

O(Observations state):观测状态集合

SP(Start Probability):隐藏状态初始化的概率值

HT(Hidden Transition_Probability):隐藏状态概率转移矩阵

HO(Hidden to Observations Probability,又叫做 emission_probability):隐藏状态对应到某种观测状态概率集合【我认为emission概率在这里不太好记忆】


这些初始参数这可以用 Python语言表示如下:

下面的图片是对代码中的数据的一个刻画,看看就好。


故事继续:病人连续三天看医生,医生发现第一天他感觉正常,第二天感觉冷,第三天感觉头晕。 于是医生产生了一个问题:怎样的健康状态序列最能够解释这些观察结果。维特比算法解答了这个问题。

函数viterbi 具有以下参数: obs 为观察结果序列, 例如 ['normal', 'cold', 'dizzy']states 为一组隐含状态; start_p 为起始状态概率; trans_p 为隐藏状态转移概率; 而 h2o_p 为隐藏状态到观测状态的放射概率。 为了简化代码,我们假设观察序列 obs 非空且 trans_p[i][j]h2o_p[i][j] 对所有状态 i,j 有定义。

在运行的例子中正向/维特比算法使用如下:

完整代码,参考:

an维特比算法揭示了观察结果 ['normal', 'cold', 'dizzy'] 最有可能由状态序列 ['Healthy', 'Healthy', 'Fever']产生。 换句话说,对于观察到的活动, 病人第一天感到正常,第二天感到冷时都是健康的,而第三天发烧了。

下图是一个计算过程:

P(finalstate) = P(y_{1})*P(x_{1}|y_{1})\prod_{i=2}^{n}P(y_{i}|y_{i-1})P(x_{i}|y_{i})

其中,P(y1)是初始状态(即医生假设的身体状态分布),P(x1|y1)是第一天的观测状态,即我们这里说的病人第一天说自己是正常的。最后我们要求的就是概率最大的那个finalstate。每一天都累乘,最后求得的结果就是最后的状态对应的概率。


最后我们得到,健康的概率是:0.00588,发烧的概率是:0.01512。相信医生就可以很容易的做出诊断了。

分词实例:

请同学麻烦将观测结果换成标注结果,状态序列换成汉字。然后代入,理论上就可以理解了。

拼音输入法:

看到一个哥们写了一个拼音输入法的code,很有意思,感觉没太看明白解析,就在这里做了一步步的推导。当然,代码不能这么写,不然跑不动。。。解码要用viterbi。

NOTE:

在实现维特比算法时需注意许多编程语言使用 浮点数计算,当 p 很小时可能会导致结果 下溢。 避免这一问题的常用技巧是在整个计算过程中使用 对数概率,在 对数系统中也使用了同样的技巧。 当算法结束时,可以通过适当的幂运算获得精确结果。

之后我们还要继续了解CRF。


本质上,CRF和HMM都是试图从训练数据中统计找到发射概率和转移概率。但是CRF可以定义更多的特征来学习【以下内容取自李宏毅老师的ppf】

而且其学习过程更加优化:

天下网标王坪地高端网站设计推荐光明网站优化按天收费价格宣城网站改版价格肇庆网站设计推荐盐田网站优化公司垦利营销网站报价迁安关键词按天扣费报价乐山关键词按天扣费公司佛山关键词排名报价辽源网站优化软件公司衡水关键词排名包年推广坂田网站设计价格抚州百度网站优化排名推荐济宁阿里店铺托管价格株洲推广网站价格沈阳网站推广工具昌吉网站设计模板公司爱联模板推广多少钱长春设计公司网站推荐张北SEO按天收费价格天门网站优化推广价格南阳关键词按天扣费哪家好苏州企业网站设计多少钱泸州seo网站优化多少钱合肥企业网站建设多少钱张掖网站优化按天计费多少钱秦皇岛外贸网站设计滨州网站设计哪家好吕梁外贸网站制作推荐陇南网站优化按天收费香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

天下网标王 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化