1. 馬爾可夫鏈
?馬爾可夫鏈?zhǔn)菨M(mǎn)足馬爾可夫性質(zhì)的隨機(jī)過(guò)程烟零。馬爾可夫性質(zhì)是無(wú)記憶性。
?也就是說(shuō)祝谚,這一時(shí)刻的狀態(tài),受且只受前一時(shí)刻的影響酣衷,而不受更往前時(shí)刻的狀態(tài)的影響交惯。我們下面說(shuō)的隱藏狀態(tài)序列就馬爾可夫鏈。
2. 隱馬爾可夫模型
?隱馬爾可夫模型(Hidden Markov Model穿仪,HMM)是統(tǒng)計(jì)模型席爽,用它處理的問(wèn)題一般有兩個(gè)特征:
?第一:?jiǎn)栴}是基于序列的,比如時(shí)間序列啊片,或者狀態(tài)序列只锻。
?第二:?jiǎn)栴}中有兩類(lèi)數(shù)據(jù),一類(lèi)序列數(shù)據(jù)是可以觀測(cè)到的紫谷,即觀測(cè)序列齐饮;而另一類(lèi)數(shù)據(jù)是不能觀測(cè)到的,即隱藏狀態(tài)序列笤昨,簡(jiǎn)稱(chēng)狀態(tài)序列祖驱,該序列是馬爾可夫鏈,由于該鏈不能直觀觀測(cè)瞒窒,所以叫“隱”馬爾可夫模型捺僻。
?簡(jiǎn)單地說(shuō),狀態(tài)序列前項(xiàng)能算出后項(xiàng)崇裁,但觀測(cè)不到匕坯,觀測(cè)序列前項(xiàng)算不出后項(xiàng),但能觀測(cè)到寇壳,觀測(cè)序列可由狀態(tài)序列算出。
?HMM模型的主要參數(shù)是λ=(A,B,Π)妻怎,數(shù)據(jù)的流程是通過(guò)初始狀態(tài)Pi生成第一個(gè)隱藏狀態(tài)h1壳炎,h1結(jié)合生成矩陣B生成觀測(cè)狀態(tài)o1,h1根據(jù)轉(zhuǎn)移矩陣A生成h2,h2和B再生成o2匿辩,以此類(lèi)推腰耙,生成一系列的觀測(cè)值。
3. 舉例
1) 問(wèn)題描述
假設(shè)我關(guān)注了一支股票铲球,它背后有主力高度控盤(pán)挺庞,我只能看到股票漲/跌(預(yù)測(cè)值:2種取值),看不到主力的操作:賣(mài)/不動(dòng)/買(mǎi)(隱藏值:3種取值)稼病。漲跌受主力操作影響大选侨,現(xiàn)在我知道一周之內(nèi)股票的漲跌,想推測(cè)這段時(shí)間主力的操作然走。假設(shè)我知道有以下信息:
i. 觀測(cè)序列O={o1,o2,...oT}
一周的漲跌O={1, 0, 1, 1, 1}
ii. HMM模型λ=(A,B,Π)
- 隱藏狀態(tài)轉(zhuǎn)移矩陣A
主力從前一個(gè)操作到后一操作的轉(zhuǎn)換概率A={{0.5, 0.3, 0.2},{0.2, 0.5, 0.3},{0.3, 0.2, 0.5}} - 隱藏狀態(tài)對(duì)觀測(cè)狀態(tài)的生成矩陣B(3種->2種)
主力操作對(duì)價(jià)格的影響B(tài)={{0.6, 0.3, 0.1},{0.2, 0.3, 0.5}} - 隱藏狀態(tài)的初始概率分布Pi(Π)
主力一開(kāi)始的操作的可能性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的馬爾可夫庫(kù)hmmlearn援制,可通過(guò)命令 $ pip install hmmlearn安裝(sklearn的hmm已停止更新,無(wú)法正常使用芍瑞,所以用了hmmlearn庫(kù))
?馬爾可夫模型λ=(A,B,Π)晨仑,A,B,Π是模型的參數(shù),此例中我們直接給出拆檬,并填充到模型中洪己,通過(guò)觀測(cè)值和模型的參數(shù),求取隱藏狀態(tài)竟贯。
4. HMM的具體算法
?第一:根據(jù)當(dāng)前的觀測(cè)序列求解其背后的狀態(tài)序列答捕,即示例中decode()函數(shù)(Viterbi方法)。
?第二:根據(jù)模型λ=(A,B,Π)澄耍,求當(dāng)前觀測(cè)序列O出現(xiàn)的概率(向前向后算法)
?第三:給出幾組觀測(cè)序列O噪珊,求模型λ=(A,B,Π)中的參數(shù)(Baum-Welch方法)。具體方法是隨機(jī)初始化模型參數(shù)A,B,Π齐莲;用樣本O計(jì)算尋找更合適的參數(shù)痢站;更新參數(shù),再用樣本擬合參數(shù)选酗,直至參數(shù)收斂阵难。
?在實(shí)際使用中,比如語(yǔ)音識(shí)別芒填,我們先用一些已有的觀測(cè)數(shù)據(jù)O呜叫,訓(xùn)練模型λ的參數(shù),然后用訓(xùn)練好的模型λ估計(jì)新的輸入數(shù)據(jù)O出現(xiàn)的概率殿衰。
?至此朱庆,我們介紹了HMM的核心操作及對(duì)應(yīng)算法,如果你對(duì)具體的Viterbi或者Baum-Welch算法的實(shí)現(xiàn)感興趣闷祥,推薦以下兩篇文章娱颊,一篇是算法公式及說(shuō)明,一篇是具體Python代碼實(shí)現(xiàn),建議對(duì)照著看:
http://www.cnblogs.com/hanahimi/p/4011765.html
http://www.cnblogs.com/pinard/p/6945257.html
5. 最大期望EM算法
?EM(Expectation Maximization)最大期望算法是十大數(shù)據(jù)挖掘經(jīng)典算法之一箱硕。之前一直沒(méi)見(jiàn)過(guò)EM的實(shí)現(xiàn)工具和應(yīng)用場(chǎng)景拴竹,直到看見(jiàn)HMM的具體算法。HMM的核心算法是通過(guò)觀測(cè)值計(jì)算模型參數(shù)剧罩,具體使用Baum-Welch算法栓拜,它是EM的具體實(shí)現(xiàn),下面來(lái)看看EM算法惠昔。
?假設(shè)條件是X幕与,結(jié)果是Y,條件能推出結(jié)果X->Y舰罚,但結(jié)果推不出條件纽门,現(xiàn)在手里有一些對(duì)結(jié)果Y的觀測(cè)值,想求X营罢,那么我們舉出X的所有可能性赏陵,再使用X->Y的公式求Y,看哪個(gè)X計(jì)算出的Y和當(dāng)前觀測(cè)最契合饲漾,就選哪個(gè)X蝙搔。這就是最大似然的原理。在數(shù)據(jù)多的情況下考传,窮舉因計(jì)算量太大而無(wú)法實(shí)現(xiàn)吃型,最大期望EM是通過(guò)迭代逼近方式求取最大似然。
?EM算法分為兩個(gè)步驟:E步驟是求在當(dāng)前參數(shù)值和樣本下的期望函數(shù)僚楞,M步驟利用期望函數(shù)調(diào)整模型中的估計(jì)值勤晚,循環(huán)執(zhí)行E和M直到參數(shù)收斂。
6. 隱馬爾可夫模型HMM與循環(huán)神經(jīng)網(wǎng)絡(luò)RNN&LSTM
?RNN是循環(huán)神經(jīng)網(wǎng)絡(luò)泉褐,LSTM是RNN的一種優(yōu)化算法赐写,近年來(lái),RNN在很多領(lǐng)域取代了HMM膜赃。下面我們來(lái)看看它們的異同挺邀。
?首先,RNN和HMM解決的都是基于序列的問(wèn)題跳座,也都有隱藏層的概念端铛,它們都通過(guò)隱藏層的狀態(tài)來(lái)生成可觀測(cè)狀態(tài)。
?從對(duì)比圖中可以看出疲眷,它們的數(shù)據(jù)流程很相似(Pi與U禾蚕,A與W,B與V對(duì)應(yīng))狂丝,調(diào)參數(shù)矩陣的過(guò)程都使用梯度方法(對(duì)各參數(shù)求偏導(dǎo))换淆,RNN利用誤差函數(shù)在梯度方向上調(diào)U,V,W(其中還涉及了激活函數(shù))虚倒,而HMM利用最大期望在梯度方向上調(diào)Pi,A,B(Baum-Welch算法),調(diào)參過(guò)程中也都用到類(lèi)似學(xué)習(xí)率的參數(shù)产舞。
?不同的是,RNN中使用激活函數(shù)(紅色方塊)讓該模型的表現(xiàn)力更強(qiáng)菠剩,以及LSTM方法修補(bǔ)了RNN中梯度消失的問(wèn)題易猫;相對(duì)來(lái)說(shuō)RNN框架也更加靈活。
?RNN和HMM不是完全不同的兩類(lèi)算法具壮,它們有很多相似之處准颓,我們也可以把RNN看成HMM的加強(qiáng)版。