lerking

隐马尔可夫模型

0
阅读(560)

<高老板与马尔代夫的故事>

 

假如高老板在马尔代夫有一个科考站,科考站每个月月底都会将两份重要的科学数据通过一部CDMA制式的手机发回来: 一份是该月份的土壤湿度信息,另一份是该月份的天气信息。有一次在数据传输的过程中,高老板手机突然没电了,所有的天气信息都丢失了,只有土壤湿度信息。

 

现在我们已知土壤湿度(可见状态),如何用这些数据来预测这一个月的天气信息(隐含状态),最大可能弥补高老板的损失呢?

 

首先定义几个概念:

 

隐含状态: 是指需要预测的天气信息;记为:

state = {晴天, 阴天, 下雨}

 

可见状态: 是指可观察到的土壤湿度;记为: 

obs = {干燥, 一般, 潮湿}

 

初始概率: 是指这个月第一天天气状况的概率; 

start_p = {晴天: 0.33, 阴天: 0.33, 下雨: 0.33}

 

转移概率: 是指每天天气(隐含状态)转变的概率,比如:今天天气是阴天,明天天气要下雨的概率;记为:

transition_p = {

晴天: {晴天: 0.6, 阴天: 0.3; 下雨: 0.1},

阴天: {晴天: 0.3, 阴天: 0.4; 下雨: 0.3},

下雨: {晴天: 0.1, 阴天: 0.4; 下雨: 0.5}

}

 

映射概率: 是指观察到土壤状态对应天气状态的概率,比如今天观察到土壤潮湿时,今天天气为下雨的概率。记为:

emission_p = {

晴天: {干燥: 0.7; 一般: 0.2; 潮湿: 0.1},

阴天: {干燥: 0.2; 一般: 0.6; 潮湿: 0.2},

下雨: {干燥: 0.1; 一般: 0.2; 潮湿: 0.7}

}

 

假设上面的定义及其概率根据去年土壤湿度信息和天气信息计算得到,为已知量。

 

计算:

第一步,假设第一天观察到的土壤湿度为干燥,则计算如下:

该天为晴天的概率V(0)(晴天) = 起始为晴天的概率0.33 * 观测为干燥时晴天的概率0.7 = 0.231

该天为阴天的概率V(0)(阴天) = 起始为阴天的概率0.33 * 观测为干燥时阴天的概率0.2 = 0.066

该天为下雨的概率V(0)(下雨) = 起始为下雨的概率0.33 * 观测为干燥时下雨的概率0.1 = 0.033

 

通过选取概率的最大值max: V(0)(阴天) = 0.231,确定第一天很大概率为晴天;

 

可以看出第一天由于没有前一天的天气情况信息,只能使用初始概率与映射概率一起参与概率计算,通俗一点也就是说: 第一天的天气概率与初始概率和该天观察到的土壤湿度有关。

 

 

第二步,假设第二天观察到的土壤湿度为一般,则计算如下:

 

该天为晴天的概率V(1)(晴天) = 

max(

昨天晴天的概率0.231 * 昨天晴天今天晴天的转移概率0.6 * 观测为一般时晴天的概率0.2 = 0.02772,

昨天阴天的概率0.066 * 昨天阴天今天晴天的转移概率0.3 * 观测为一般时晴天的概率0.2 = 0.00396,

昨天下雨的概率0.033 * 昨天下雨今天晴天的转移概率0.1 * 观测为一般时晴天的概率0.2 = 0.00066

) = 0.02772

 

该天为阴天的概率V(1)(阴天) = 

max(

昨天晴天的概率0.231 * 昨天晴天今天阴天的转移概率0.3 * 观测为一般时阴天的概率0.6 = 0.04158,

昨天阴天的概率0.066 * 昨天阴天今天阴天的转移概率0.4 * 观测为一般时阴天的概率0.6 = 0.01584,

昨天下雨的概率0.033 * 昨天下雨今天阴天的转移概率0.4 * 观测为一般时阴天的概率0.6 = 0.00792

) = 0.04158

 

该天为下雨的概率V(1)(下雨) = 

max(

昨天晴天的概率0.231 * 昨天晴天今天下雨的转移概率0.1 * 观测为一般时下雨的概率0.2 = 0.00462,

昨天阴天的概率0.066 * 昨天阴天今天下雨的转移概率0.3 * 观测为一般时下雨的概率0.2 = 0.00396,

昨天下雨的概率0.033 * 昨天下雨今天下雨的转移概率0.5 * 观测为一般时下雨的概率0.2 = 0.00330

) = 0.00462

 

通过选取概率的最大值max: V(1)(阴天)=0.04158,确定第二天很大概率为阴天;

 

可以看出第二天由于有了前一天的天气情况信息,计算时用到了前一天天气概率信息,天气转移概率和映射概率一起参与概率计算,也就是说: 第二天的天气概率与前一天天气,天气变换(转移)规律和该天观察到的土壤湿度三者有关。

 

同理根据后面28天的土壤信息,我们可以计算或者预测出后面28天的天气信息(假设这个月总共30天)。

 

 

 

可以看出,当天的天气信息跟前一天的天气信息有关,而跟大前天或者大大前天的天气信息无关,这里是一个大前提或者条件。

 

 

类似地,

如果将土壤信息换成汉字信息,那么天气信息可以换成汉语的分词信息;

 

如果将土壤信息换成通信码元编码信息,那么天气信息可以换成通信码元解码信息;

 

如果将土壤信息换成股票信息,那么天气信息可以换成股票的涨跌信息(好像找到一条致富之路)。

 

 

上面的模型叫做隐马尔可夫模型,算法是由高通公司创始人Andrew Viterbi先生发明,国内叫做维特比算法。

 

 

PS: 大量别扭的名词极大地提高了门槛,如果把马尔可夫模型改成马尔代夫模型,维特比改成高老板算法,会让人更容易接受吧。