維特比演算法(Viterbi Algorithm)

勿在浮沙築高臺LS發表於2017-04-21

尋找最可能的隱藏狀態序列 (Finding most probable sequence of hidden states)

對於一個特殊的隱馬爾科夫模型(HMM)及一個相應的觀察序列,我們常常希望能找到生成此序列最可能的隱藏狀態序列。

之前的那個問題變轉,http://blog.csdn.net/jeiwt/article/details/8076019

假設連續觀察3天的海藻溼度為(Dry,Damp,Soggy),求這三天最可能的天氣情況。天氣只有三類(Sunny,Cloudy,Rainy),而且海藻溼度和天氣有一定的關係。

已知:

  1. 隱藏的狀態:Sunny,Cloudy, Rainy;海藻溼度有四類{Dry,Dryish, Damp,Soggy }

  2. 觀察狀態序列:{Dry, Damp, Soggy };

  3. 初始狀態序列:Sunny(0.63),Cloudy(0.17),Rainy(0.20);

  4. 狀態轉移矩陣:

sunny cloudy rainy
sunny 0.5 0.375
cloudy 0.25 0.125
rainy 0.25 0.375

Cloudy(昨天)->Sunny(今天)的概率是0.25;

Sunny(昨天)->Rainy(今天)的概率是0.125.

  1. 混淆矩陣(海藻溼度與天氣的相關性):
Dry Dryish Damp Soggy
Sunny 0.6 0.2 0.15
cloudy 0.25 0.25 0.25
Rainy 0.05 0.10 0.35

由HMM可知,Day2的天氣僅取決於Day1;Day3的天氣又只取決於Day2的天氣。

Day1由於是初始狀態,我們分別求

P(Day1-Sunny)=0.63*0.6;

P(Day1-Cloudy)=0.17*0.25;

P(Day1-Rain)=0.20*0.05;

Choose max{ P(Day1-Sunny) , P(Day1-Cloudy),P(Day1-Rainy)}, 得到P(Day1-Sunny)最大,得出第1天Sunny的概率最大。

Day2的天氣又取決於Day1的天氣狀況,同時也受Day2觀察的海藻情況影響。

P(Day2-Sunny)= max{ P(Day1-Sunny)*0.5, P(Day1-Cloudy)*0.25, P(Day1-Rainy)*0.25} *0.15;

P(Day2-Cloudy)= max{ P(Day1-Sunny)*0.375, P(Day1-Cloudy)*0.125, P(Day1-Rainy)*0.625} *0.25;

P(Day2-Rainy)= max{ P(Day1-Sunny)*0.125, P(Day1-Cloudy)*0.625 , P(Day1-Rainy)*0.375} *0.35;

Choosemax{ P(Day2-Sunny) , P(Day2-Cloudy), P(Day2-Rainy)},得到P(Day2-Rainy)最大,得出第2天Rainy的概率最大。

故{Sunny,Rainy}是前兩天最大可能的天氣序列。

Day3的天氣又取決於Day2的天氣狀況,同時也受Day3觀察的海藻情況影響。

P(Day3-Sunny)= max{ P(Day2-Sunny)*0.5, P(Day2-Cloudy)*0.25, P(Day2-Rainy)*0.25} *0.05;

P(Day3-Cloudy)= max{ P(Day2-Sunny)*0.375, P(Day2-Cloudy)*0.125, P(Day2-Rainy)*0.625} *0.25;

P(Day3-Rainy)= max{ P(Day2-Sunny)*0.125, P(Day2-Cloudy)*0.625, P(Day2-Rainy)*0.375} *0. 05;

Choosemax{ P(Day3-Sunny) , P(Day3-Cloudy), P(Day3-Rainy)},得到 P(Day3-Rainy)最大,得出第3天Rainy的概率最大。

故{Sunny,Rainy,Rainy}是這三天最可能的天氣序列。

相關文章