【機(jī)器學(xué)習(xí)】用摸魚學(xué)來解釋隱馬爾可夫模型(HMM)

假如小明一周工作六天,每天工作狀態(tài)都不相同,比如有活少、活多、心情好、心情差和雙倍工資5種狀態(tài),不同工作狀態(tài)下工作效率也不相同,活少和心情差的時(shí)候摸魚時(shí)間多,活多、心情好和雙倍工資的時(shí)候摸魚時(shí)間少。
從小明的工作日常中可以提煉出5種狀態(tài)和2種觀測(cè)和觀測(cè)6天。
狀態(tài):活少、活多、心情好、心情不好、雙倍工資
觀測(cè):摸魚、認(rèn)真上班
將涉及到的可能情況展開如下圖所示。

每一行對(duì)應(yīng)相同狀態(tài),每一列對(duì)應(yīng)每一天。其中紅色塊在矩形中的占比表示一天中摸魚的程度,也就是摸魚的觀測(cè)概率。藍(lán)色箭頭表示不同狀態(tài)間的轉(zhuǎn)移概率。那么狀態(tài)序列總共有5^6種。
假設(shè)天數(shù)為T(列數(shù)),狀態(tài)數(shù)為N(行數(shù))。
問題1(概率計(jì)算問題):假如觀察小明的六天,得到的觀測(cè)序列為:摸魚 -> 認(rèn)真工作 -> 摸魚 -> 認(rèn)真工作 -> 摸魚 -> 認(rèn)真工作,并且已知藍(lán)色箭頭的狀態(tài)轉(zhuǎn)移概率和摸魚的觀測(cè)概率,請(qǐng)問該觀測(cè)序列的概率為多少?
從上圖就可以知道只要求出所有能夠得到該觀測(cè)序列的狀態(tài)序列概率之和就行了。總共有N^T種狀態(tài)序列(窮舉所有藍(lán)色箭頭路徑),并且每種狀態(tài)序列需要T個(gè)觀測(cè)概率相乘(每個(gè)狀態(tài)一個(gè)觀測(cè)概率),所以總的計(jì)算復(fù)雜度為O(N^T)。這種暴力求解的方法計(jì)算復(fù)雜度太高了,可以用前向-后向算法來減少計(jì)算量。

以前向算法為例(后向算法可以認(rèn)為是狀態(tài)序列的反轉(zhuǎn),計(jì)算方法相同),簡(jiǎn)單來說,就是利用分治和動(dòng)態(tài)規(guī)劃的思想,把6天拆分成5個(gè)重復(fù)單元,然后先計(jì)算出第一個(gè)重復(fù)單元紅色虛線框中每個(gè)狀態(tài)的觀測(cè)概率,并且保存下來當(dāng)作下一個(gè)重復(fù)單元的初始狀態(tài),循環(huán)5次就得了最終的觀測(cè)概率。每個(gè)重復(fù)單元總共有N^2種狀態(tài)序列,并且每種狀態(tài)序列需要2個(gè)觀測(cè)概率相乘,所以一個(gè)重復(fù)單元的計(jì)算復(fù)雜度為O(N^2),那么總的計(jì)算復(fù)雜度為O(TN^2)。比起暴力求解觀測(cè)概率,復(fù)雜度大大降低。
問題2(學(xué)習(xí)問題):已知小明加上同事,總共有10人的觀測(cè)序列,請(qǐng)問如何估計(jì)不同狀態(tài)之間的轉(zhuǎn)移概率和摸魚的觀測(cè)概率呢?

如圖所示,紅色塊和藍(lán)色箭頭是需要通過10人的觀測(cè)序列估計(jì)出來的。這里需要用到Baum-Welch算法,簡(jiǎn)單來說,就是通過EM算法構(gòu)建出帶隱函數(shù)的優(yōu)化函數(shù)Q,然后用拉格朗日函數(shù)求解。
問題3(預(yù)測(cè)問題):假如觀察小明的六天,得到的觀測(cè)序列為:摸魚 -> 認(rèn)真工作 -> 摸魚 -> 認(rèn)真工作 -> 摸魚 -> 認(rèn)真工作,并且已知藍(lán)色箭頭的狀態(tài)轉(zhuǎn)移概率和摸魚的觀測(cè)概率,請(qǐng)問該觀測(cè)序列最有可能的狀態(tài)序列是什么?
這個(gè)問題跟問題1很相似,不同的地方在于問題1是求該觀測(cè)序列的所有狀態(tài)序列概率之和,而問題3求的是該觀測(cè)序列的所有狀態(tài)序列中最有可能出現(xiàn)的狀態(tài)序列。

所以求解方式和問題1類似,只不過需要從所有可能狀態(tài)序列中找出概率最大的狀態(tài)序列。上圖綠色路徑可能就是概率最大的狀態(tài)序列。
可見隱馬爾可夫模型簡(jiǎn)直太有用了!老板可以通過公司的規(guī)章制度來引導(dǎo)員工的身心健康!或者根據(jù)員工的摸魚情況來預(yù)測(cè)員工的身心健康,從而更好的優(yōu)化公司的規(guī)章制度!


往期精彩回顧 本站qq群851320808,加入微信群請(qǐng)掃碼:
