机器学习_隐马尔可夫模型HMM

1. 马尔可夫链

 马尔可夫链是满足马尔可夫性质的随机过程。马尔可夫性质是无记忆性。
 也就是说,这一时刻的状态,受且只受前一时刻的影响,而不受更往前时刻的状态的影响。我们下面说的隐藏状态序列就马尔可夫链。

2. 隐马尔可夫模型

 隐马尔可夫模型(Hidden Markov Model,HMM)是统计模型,用它处理的问题一般有两个特征:
 第一:问题是基于序列的,比如时间序列,或者状态序列。
 第二:问题中有两类数据,一类序列数据是可以观测到的,即观测序列;而另一类数据是不能观测到的,即隐藏状态序列,简称状态序列,该序列是马尔可夫链,由于该链不能直观观测,所以叫“隐”马尔可夫模型。
 简单地说,状态序列前项能算出后项,但观测不到,观测序列前项算不出后项,但能观测到,观测序列可由状态序列算出。
 HMM模型的主要参数是λ=(A,B,Π),数据的流程是通过初始状态Pi生成第一个隐藏状态h1,h1结合生成矩阵B生成观测状态o1,h1根据转移矩阵A生成h2,h2和B再生成o2,以此类推,生成一系列的观测值。

HMM

3. 举例

1) 问题描述

假设我关注了一支股票,它背后有主力高度控盘,我只能看到股票涨/跌(预测值:2种取值),看不到主力的操作:卖/不动/买(隐藏值:3种取值)。涨跌受主力操作影响大,现在我知道一周之内股票的涨跌,想推测这段时间主力的操作。假设我知道有以下信息:

i. 观测序列O={o1,o2,...oT}
一周的涨跌O={1, 0, 1, 1, 1}

ii. HMM模型λ=(A,B,Π)

  • 隐藏状态转移矩阵A
    主力从前一个操作到后一操作的转换概率A={{0.5, 0.3, 0.2},{0.2, 0.5, 0.3},{0.3, 0.2, 0.5}}
  • 隐藏状态对观测状态的生成矩阵B(3种->2种)
    主力操作对价格的影响B={{0.6, 0.3, 0.1},{0.2, 0.3, 0.5}}
  • 隐藏状态的初始概率分布Pi(Π)
    主力一开始的操作的可能性Pi={0.7, 0.2, 0.1}

2) 代码

import numpy as np
from hmmlearn import hmm

states = ["A", "B", "C"]
n_states = len(states)

observations = ["down","up"]
n_observations = len(observations)

p = np.array([0.7, 0.2, 0.1])
a = np.array([
  [0.5, 0.2, 0.3],
  [0.3, 0.5, 0.2],
  [0.2, 0.3, 0.5]
])
b = np.array([
  [0.6, 0.2],
  [0.3, 0.3],
  [0.1, 0.5]
])
o = np.array([[1, 0, 1, 1, 1]]).T

model = hmm.MultinomialHMM(n_components=n_states)
model.startprob_= p
model.transmat_= a
model.emissionprob_= b

logprob, h = model.decode(o, algorithm="viterbi")
print("The hidden h", ", ".join(map(lambda x: states[x], h)))

c) 分析

 这里我们使用了Python的马尔可夫库hmmlearn,可通过命令 $ pip install hmmlearn安装(sklearn的hmm已停止更新,无法正常使用,所以用了hmmlearn库)
 马尔可夫模型λ=(A,B,Π),A,B,Π是模型的参数,此例中我们直接给出,并填充到模型中,通过观测值和模型的参数,求取隐藏状态。

4. HMM的具体算法

 第一:根据当前的观测序列求解其背后的状态序列,即示例中decode()函数(Viterbi方法)。
 第二:根据模型λ=(A,B,Π),求当前观测序列O出现的概率(向前向后算法)
 第三:给出几组观测序列O,求模型λ=(A,B,Π)中的参数(Baum-Welch方法)。具体方法是随机初始化模型参数A,B,Π;用样本O计算寻找更合适的参数;更新参数,再用样本拟合参数,直至参数收敛。

 在实际使用中,比如语音识别,我们先用一些已有的观测数据O,训练模型λ的参数,然后用训练好的模型λ估计新的输入数据O出现的概率。

 至此,我们介绍了HMM的核心操作及对应算法,如果你对具体的Viterbi或者Baum-Welch算法的实现感兴趣,推荐以下两篇文章,一篇是算法公式及说明,一篇是具体Python代码实现,建议对照着看:
http://www.cnblogs.com/hanahimi/p/4011765.html
http://www.cnblogs.com/pinard/p/6945257.html

5. 最大期望EM算法

 EM(Expectation Maximization)最大期望算法是十大数据挖掘经典算法之一。之前一直没见过EM的实现工具和应用场景,直到看见HMM的具体算法。HMM的核心算法是通过观测值计算模型参数,具体使用Baum-Welch算法,它是EM的具体实现,下面来看看EM算法。
 假设条件是X,结果是Y,条件能推出结果X->Y,但结果推不出条件,现在手里有一些对结果Y的观测值,想求X,那么我们举出X的所有可能性,再使用X->Y的公式求Y,看哪个X计算出的Y和当前观测最契合,就选哪个X。这就是最大似然的原理。在数据多的情况下,穷举因计算量太大而无法实现,最大期望EM是通过迭代逼近方式求取最大似然。
 EM算法分为两个步骤:E步骤是求在当前参数值和样本下的期望函数,M步骤利用期望函数调整模型中的估计值,循环执行E和M直到参数收敛。

6. 隐马尔可夫模型HMM与循环神经网络RNN&LSTM

 RNN是循环神经网络,LSTM是RNN的一种优化算法,近年来,RNN在很多领域取代了HMM。下面我们来看看它们的异同。
 首先,RNN和HMM解决的都是基于序列的问题,也都有隐藏层的概念,它们都通过隐藏层的状态来生成可观测状态。

 从对比图中可以看出,它们的数据流程很相似(Pi与U,A与W,B与V对应),调参数矩阵的过程都使用梯度方法(对各参数求偏导),RNN利用误差函数在梯度方向上调U,V,W(其中还涉及了激活函数),而HMM利用最大期望在梯度方向上调Pi,A,B(Baum-Welch算法),调参过程中也都用到类似学习率的参数。
 不同的是,RNN中使用激活函数(红色方块)让该模型的表现力更强,以及LSTM方法修补了RNN中梯度消失的问题;相对来说RNN框架也更加灵活。
 RNN和HMM不是完全不同的两类算法,它们有很多相似之处,我们也可以把RNN看成HMM的加强版。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容