隐马尔科夫HMM 算法

要知道隐马尔科夫我们先来了解什么是马尔科夫模型

举一个天气的例子:

我们知道某些天气出现的概率和天气之间转换的概率

比如我知道了昨天的天气,想知道今天的天气最可能是什么,由上图可以知道,昨天的天气是什么,会对今天可能的天气是有影响的。

那么这个时候我们可以说,一个一阶的马尔科夫模型是什么样的

此时,我们可以知道今天是晴天的概率是多少

计算今天是晴天的概率就需要去计算昨天所有可能天气转到今天是晴天的概率之和,也就有了上面的公式

那下面我们就可以引申出什么是隐马尔科夫模型。

相比马尔科夫模型,多了个隐,也就是在隐马尔科夫模型中,多了一个隐藏状态

同样是天气举例子,但是现在多了一个情况,我们观察海藻的情况

在这个情况下,我们是不知道天气情况的,只能从海藻的情况,来知道天气的情况

那么这个时候海藻就是我们观察出来的观察状态,天气就是我们想要知道的隐藏状态

而在这里需要注意的是,观察状态和隐藏状态并不是一一对应的,也就是说,晴天->Dry 晴天->Dryish 晴天->Damp 等等

有一个多对多的关系,一个观测序列(多个观察状态  比如说7天的海藻情况)对应的隐藏序列其实是可以有多个的。

这个是需要我们注意的。我们要做的是把所有可能的情况都要考虑进去。

在隐马尔科夫模型HMM中 ,我们有一个设定,就是以上两个,上面z是隐藏状态, 生成的是下面x观察状态

那么

这是HMM的三要素 pi A B 。下面举个例子来说:

pi:一开始晴天的概率

A :晴天转雨天的概率

B:晴天下海藻为Dryish的概率 

那么HMM主要解决的问题也是围绕这三者。

问题一 是 我们知道了所处地的气候而且观察了七天的海藻 都是Dry 状态 ,那么我们遇到的这个是多大几率的事情呢 是不是百年难得一遇的情况(求观测序列可能性)

问题二 是 我们不知道所处地的气候,但是观察了七天的海藻 都是Dry 状态,那么这片地区的天气是哪个最有可能的分布使出现这种情况最可能发生呢 是亚热带海洋气候还是温带海洋气候呢(求最贴合模型)

问题三 是 我们知道的所处地的气候,出现了七天的海藻 都是Dry 状态,那么是最有可能出现了什么天气(连续晴天?先多云后晴天?)导致了这种现象(求最有可能隐藏状态)

接下来针对每个问题逐一破解

问题一:我们知道了所处地的气候而且观察了七天的海藻 都是Dry 状态 ,那么我们遇到的这个是多大几率的事情呢 是不是百年难得一遇的情况(求观测序列可能性)

那么这个问题有两种解法,一是暴力破解 ,二是前向算法为例(还有一个后向算法这里就不讲解,需要的同学可以看下李航老师的统计学习方法)

暴力破解:

思想:出现了这个观测序列,那么我把所有可能导致这种情况的隐藏序列全都找出来不就好了吗

因此就有

那我们就先考虑某一个导致有该观测序列的隐藏序列

就等于 出现这个隐藏序列的概率 * 这个隐藏序列导致这个观测序列的概率

pi是初始概率 ai是隐藏状态转移概率 

以及

于是就有出现某一个隐藏序列也出现该观测序列的概率:

考虑多个隐藏序列:

暴力破解的复杂度为:

这是因为长度为T的观测序列 对应 长度为T的隐藏序列

一个隐藏序列上的T个状态,每个状态是N个状态都有可能的,

那么就是N的T次方,这是考虑了隐藏状态,然后还要考虑生成观察状态

一个隐藏序列是需要生成长度为T的观测序列,那么每个都需要也就是  T* N的T次方

N为常数,那么这是个指数函数。

可以知道暴力破解的复杂度太高,那么就需要后面讲解的前向算法,降低复杂度

前向算法(同样解决问题一:求观测序列的可能性)

前向算法的意思是 知道所处气候,但我们只知道第七天是晴天(这里只是为了举例子方便理解这样解释,实际上t时候的隐藏状态i是可以任一的)而发现前面七天的海藻都是dry的概率

而我们的目标是:

那么类似暴力破解的思想,我们也去考虑所有的i

那么如何去求解T时刻呢

我们先从第一时刻开始来理解。

相当于是考虑t时刻就是要去考虑t-1时刻,直到第一时刻

我们先这样假设 t时刻的i 状态是晴天,那么t-1时刻天气是N种的,也就是任意一种天气,他都有可能在下一时刻转换成晴天

而 i 其实也是需要考虑 N种,也就是任意一种的,因为 导致这样的一个观测序列,任一天气都是有可能的吧。

这是需要注意的一点。

下面用一个例子来弄明白前向算法

也就是

计算:

pi *A *B 这样一个顺序进行计算

因此出现红白红的概率是0.13

前向算法的计算复杂度为 O(N^2 * T)

因为有N个可能的j状态,转换到i状态上其实也有N个,*T也就是生成长度为T的观测序列

下面是解决问题二 我们不知道所处地的气候,但是观察了七天的海藻 都是Dry 状态,那么这片地区的天气是哪个最有可能的分布(是亚热带海洋气候还是温带海洋气候呢)使出现这种情况最可能发生呢 (求最贴合模型)

此时分两种情况,一种是知道隐藏序列(即知道当天天气以及对应的海藻情况),一种是不知道

第一种:

意思就是,

状态转移:知道晴天-> 晴天 晴天->多云 等等 比如要计算晴天-> 晴天 就看 晴天-> dry频率 占 晴天-> ? 频率的比值

生成观测概率:知道晴天-> dry 晴天->dryish 等等 比如要计算晴天-> dry 就看 晴天-> dry频率 占 晴天-> ? 频率的比值

初始状态概率可以有晴天出现频率来代替

第二种:

我们需要借助基于EM算法的Baum-Welch算法来求解

EM算法:https://blog.csdn.net/qq_40229367/article/details/88689306

Q函数:最有可能的隐藏序列是由某个模型来的

这里不多阐述Q函数 

接着对Q函数化简

而借鉴了暴力求解的式子,带进去得到

我们的参数是pi A B ,那么此时只要对三个式子各自求解(对应使用三个参数)

下面以求解pi为例

求偏导的时候,求和符号可以去掉,因为在i为某一值时,πi为自变量

之后我们的条件是所有的PI累和为1 (各种天气的概率之和=1)

之后把式子代回上式,得到pi表达式 

同理求AB ,可以参考 https://www.cnblogs.com/sjjsxl/p/6971900.html

此时就得到贴合的模型(得出最有可能的气候)

问题三:我们知道的所处地的气候,出现了七天的海藻 都是Dry 状态,那么是最有可能出现了什么天气(连续晴天?先多云后晴天?)导致了这种现象(求最有可能隐藏状态)

这个问题我们需要借助维特比算法

就是找最有可能的天气序列导致七天里海藻都是dry

那么可以化为

也就是 类似前向算法 第t时刻的状态为i 我们找到(最有可能的第t-1时刻的状态j * j->i的概率)

这就是维特比算法

下面同样用一个例子来理解维特比

记录为0 是因为这是初始时候

我们计算到,最后是第三个是最大的,最后一位为3 

之后看到选取第三个(【】中最大的一个值)来* 0.7 ,倒数第二位为3 

回到t2时刻前面选择的是第三个所以看第三个,发现 是第三个(【】中最大的一个值)* 0.3

因此倒数第三位是3 ,再回到上一时刻 t1发现为0,说明回到了起始,因此停止

(选的是上一时刻结合转换概率的最大值)

猜你喜欢

转载自blog.csdn.net/qq_40229367/article/details/88928350