隱馬爾科夫模型模型原理與應用

引入

爲了更方便地理解隱馬爾可夫模型,我們需要引入以下概念。

盒子模型與盒子問題(urn problem)

所謂盒子問題,就是將感興趣的實體視爲一系列的,帶有顏色的球。之後,人們從盒子中取出一個或多個的球,再根據這些球,估算某些概率或概率分佈。比如,估計某種顏色的球出現的概率。

所謂盒子模型,就是根據盒子問題引發而出的模型。最簡單的盒子模型如下:
假設有一個盒子問題,盒子中包含兩種顏色的球xxyy,分別代表黑白,於是盒子模型有如下:

  • 在置信水平α\alpha中從nn次抽樣中,推斷黑白顏色的球的比重。
  • 在知道兩種顏色的球的比重後,推斷nn次抽樣中,抽樣序列出現的概率(如,抽取出一黑一白這樣的序列)
  • 如果nn次抽樣中均遇到白球,那麼在置信水平下,盒子中無黑色球的概率。

隨機過程

隨機過程可以定義爲一系列於概率空間(Ω,F,P)(\Omega ,{\mathcal {F}},P)中的隨機變量,其中Ω\Omega爲採樣空間,F{\mathcal {F}}爲事件空間,而PP爲概率公理化定義。這些隨機變量,都有一個索引,就像數組的下標一樣。索引跟隨機變量一樣,其在一個度量空間(S,Σ)(S,\Sigma )中,其中SS爲取值空間,Σ\Sigma爲度量空間,例如時間的時分秒、或者長度單位的連續空間,反正能夠被統一的標準度量就行了。這些數學概念都比較較真,其實理解起來非常的通俗。大家可以略過。

簡單來說,隨機過程就是一個數組,數組中的每一個元素爲隨機變量,數組的索引可能不是0開始的整數序列。

用更加精確的定義,就是給定一個概率空間(Ω,F,P)(\Omega ,{\mathcal {F}},P),和度量空間(S,Σ)(S,\Sigma ),然後隨機過程就是一個隨機變量的集合,集合中的每個元素都有索引:
{X(t):tT}. {\displaystyle \{X(t):t\in T\}.}
在歷史定義中,都認爲TT是時間序列。於是X(t)X(t)就是某一個時刻tt的觀察下,隨機變量序列XX的取值。隨機過程亦可以寫成{X(t,ω):tT}{\displaystyle \{X(t,\omega ):t\in T\}},表示隨機序列XX的最終取值由兩個變量決定,一是索引TT,二是抽樣空間ωΩ\omega\in\Omega

索引集

TT爲索引集。其通常爲一個線性、一維的子集。比如自然數序列,於是通過這樣的線性序列,就可以解釋隨機序列的實時性了。當然,索引集亦可以用笛卡爾平面,或多維平面表示,此時可以表徵空間上的一個點。

狀態空間

狀態空間爲隨機變量的不同取值可能構成的空間。

採樣函數

採樣函數爲隨機過程的一種結果,其可以用如下表達:
X(,ω):TS {\displaystyle X(\cdot ,\omega ):T\rightarrow S}

增量

隨機過程的增量,可以視爲隨機過程通過兩個採樣函數後,其結果的。如下:
t1[0,)t1[0,){\displaystyle t_{1}\in [0,\infty )}{\displaystyle t_{1}\in [0,\infty )}t2[0,)t2[0,){\displaystyle t_{2}\in [0,\infty )}{\displaystyle t_{2}\in [0,\infty )},且t1t2t1t2{\displaystyle t_{1}\leq t_{2}}{\displaystyle t_{1}\leq t_{2}}。於是,隨機序列XX的增量爲:
Xt2Xt1 {\displaystyle X_{t_{2}}-X_{t_{1}}}

馬爾可夫鏈與馬爾可夫過程

馬爾可夫鏈是描述隨機事件序列的隨機模型。並且,每一個事件只取決於上一個事件的狀態。其可以視爲一個隨機過程,因此也叫馬爾可夫過程。如圖所示:
在這裏插入圖片描述
以上是隨機事件爲2的馬爾可夫過程,其中數字代表轉換的概率。

隱馬爾科夫模型定義

Xn,YnX_n,Y_n分別爲離散時間的隨機過程,n1n\geq 1。於是數對(Xn,Yn)(X_n,Y_n)就是一個隱馬爾科夫模型,當且僅當:

  • XnX_n爲一個馬爾可夫過程,且其不能被直接觀察,是隱藏的
  • P(YnA  X1=x1,,Xn=xn)=P(YnA  Xn=xn){\displaystyle \operatorname {\mathbf {P} } {\bigl (}Y_{n}\in A\ {\bigl |}\ X_{1}=x_{1},\ldots ,X_{n}=x_{n}{\bigr )}=\operatorname {\mathbf {P} } {\bigl (}Y_{n}\in A\ {\bigl |}\ X_{n}=x_{n}{\bigr )}}
    其中,XnX_n被稱爲隱藏狀態,P(YnA  Xn=xn)P(YnA  Xn=xn){\displaystyle \operatorname {\mathbf {P} } {\bigl (}Y_{n}\in A\ {\bigl |}\ X_{n}=x_{n}{\bigr )}}{\displaystyle \operatorname {\mathbf {P} } {\bigl (}Y_{n}\in A\ {\bigl |}\ X_{n}=x_{n}{\bigr )}}爲發射概率。

示例——幫助理解

精靈、盒子與球

假設在一個觀察者不可見的房間中,有一個小精靈、若干個盒子、若干個不同標籤的小球。假設盒子中包含的球都是已知的(對盒子有先驗認識)。

小精靈根據某種規則,從任意一個盒子中,隨機抽取出一個小球,並把他放到一個傳送帶中。外面的觀察者通過傳送帶,觀察到小精靈抽取出來的小球,但卻不能觀察到精靈是從哪個盒子抽取出來的。另外,小精靈抽取的規則,與其上一次抽取的盒子有關,但不僅僅是(即還夾雜着某些其他因素)。

於是,讓我們假設盒子爲XnX_n,而小球爲yny_n。如圖所示,小球馬爾可夫序列XnX_n是不可見的,而yny_n小球是可見的。因此,對於這種序列,也稱之爲隱馬爾科夫模型序列。假設小精靈從中抽取三個小球放到傳送帶中,但觀測者仍舊無法看出小精靈的第三個小球是從哪個盒子抽取的。然而,卻可以推斷出,第三個小球來源於這些盒子的概率。
在這裏插入圖片描述

天氣估計

假設有兩個夥伴 A 和 B,A是個超級大宅男,B是一個受習慣支配的超級單調鬼。雖然 A 喜歡宅在家裏,但是他要通過 B 知道今天的天氣如何。於是,每天 A 就會打電話給 B,詢問 B 今天做了什麼?而如是回答也是 B 的習慣之一。

已知單調鬼 B 一天只喜歡做一件事,並且無外乎這三件中的一件:散步、購物和打掃衛生。並且,每天做哪件事,取決於今天的天氣。於是,B今天做了哪件事,就是可以觀察到的 y,而今天的天氣,對 A 來說,就是觀察不到的 X。

用 Python 描述:

states = ('Rainy', 'Sunny')   #假設天氣只有晴雨天兩種可能。
 
observations = ('walk', 'shop', 'clean')
 
start_probability = {'Rainy': 0.6, 'Sunny': 0.4}
 
transition_probability = {
   'Rainy' : {'Rainy': 0.7, 'Sunny': 0.3},
   'Sunny' : {'Rainy': 0.4, 'Sunny': 0.6},
   }
 
emission_probability = {
   'Rainy' : {'walk': 0.1, 'shop': 0.4, 'clean': 0.5},
   'Sunny' : {'walk': 0.6, 'shop': 0.3, 'clean': 0.1},
   }

表示成圖像,如下所示:
在這裏插入圖片描述
其中,開始概率是 A 向 B 詢問的第一天,根據他的統計得到的可能概率,或者說第一印象。因此,天氣、B做的事情,就可以視爲兩個 隨機過程,兩者組成一個 隱馬爾科夫模型。其中,天氣爲 隱馬爾科夫過程。

原理描述

以下是隱馬爾科夫模型的數學描述,先放上圖:
在這裏插入圖片描述
如上圖所示,x(t)x(t)是隨機變量,在時間tt的一個隱藏狀態(不可見),比如x(t){x1,x2,x3}x(t)\in\{ x1, x2, x3\}。而隨機變量y(t)y(t)是觀察變量(可見)在tt時的取值,比如y(t){y1,y2,y3,y4}y(t)\in\{ y1, y2, y3, y4 \}。而箭頭表示條件依賴

其中,tt時刻的隨機變量xx,僅條件依賴於t1t-1時刻的xx。同樣的,tt時刻的隨機變量yy,僅條件依賴於tt時刻的xx。這種屬性稱爲馬爾可夫屬性

xx的狀態空間是離散的,而yy可以是離散的(服從範疇分佈),或連續的(服從正態分佈)。隱馬爾科夫模型的參數有二:一是轉移參數,其表示隱藏狀態之間狀態轉換的概率,決定着x(t1)x(t-1)x(t)x(t)的轉變。二是發射參數,其表示某個隱藏狀態下,輸出各個觀測(y)的概率。

另外,對於轉移參數,設隱藏狀態xx的取值可能爲N個。則轉移參數共N2N^2個。由於一個狀態,轉移到其他狀態的概率和爲1,故所需要求解的轉移參數有N2NN^2-N個。

  • 設觀測變量yy屬於離散取值,且可能取值爲M個,則發射參數共MNMN個。同樣,由於概率和爲1,故所需要求解的發射參數共N(M1)N(M-1)個。
  • yy屬於連續性變量,則可以用正態分佈擬合它。設輸出yy爲一個向量,向量的長度爲M。於是,所需要求解的正態分佈的參數爲M個均值、以及M(M+1)2{\frac {M(M+1)}{2}}個參數的協方差。因此,所需要求解的發射參數就是N(M+M(M+1)2)=NM(M+3)2=O(NM2)N\left(M+{\frac {M(M+1)}{2}}\right)={\frac {NM(M+3)}{2}}=O(NM^{2})個。

推斷問題

瞭解以上概念後,隱馬爾科夫模型有什麼用呢?

估算觀測序列出現的概率

給定觀測序列:Y=y(0),y(1),,y(L1)Y=y(0),y(1),\dots ,y(L-1),求出其概率P(Y)=XP(YX)P(X)P(Y)=\sum _{X}P(Y\mid X)P(X),其中累加遍歷所有的X=x(0),x(1),,x(L1)X=x(0),x(1),\dots ,x(L-1)

計算隱藏變量的概率

即根據觀測序列y(1),,y(t)y(1),\dots ,y(t),計算變量(一個或多個)xx

過濾問題

計算P(x(t)  y(1),,y(t))P(x(t)\ |\ y(1),\dots ,y(t)),而x(t1),x(t2),,x(0)x(t-1),x(t-2),\dots,x(0)均未知。通常採用前向算法計算出。

平滑問題

平滑問題與過濾類似,其不是計算終端隱藏變量,而是計算序列中間的隱藏變量。即P(x(k)  y(1),,y(t))P(x(k)\ |\ y(1),\dots ,y(t))其中k<t{\displaystyle k<t}

最可能解釋問題

最可能即使計算的是隱藏變量序列的出現的聯合概率。一般用在諸如序列標註的問題上。比如給定一些詞彙,然後判斷每個詞彙的詞性。
在這裏插入圖片描述
如上所示,已知觀測序列如上。如是可以獲得幾個候選序列:
5 3 2 5 3 2
4 3 2 5 3 2
3 1 2 5 3 2
於是,我們可以從這些序列的聯合概率中,找到最優可能的序列。這類問題一般可以用維特比算法解決。

模型訓練

模型訓練的過程,其實就是根據數據集(序列數據),來學習隱馬爾科夫模型的參數

實現

綜上,隱馬爾科夫模型(以下稱爲HMM)用於解決下面三個問題:

  • 根據模型參數和觀測序列,找出最優可能的隱藏序列
  • 根據模型參數以及觀測數據,計算likelihood(概率)
  • 根據觀測數據,計算模型參數(訓練)

搭建一個 HMM 併產生數據集

import numpy as np
from hmmlearn import hmm
np.random.seed(42)

model = hmm.GaussianHMM(n_components=3, covariance_type="full")
model.startprob_ = np.array([0.6, 0.3, 0.1])
model.transmat_ = np.array([[0.7, 0.2, 0.1],
                             [0.3, 0.5, 0.2],
                            [0.3, 0.3, 0.4]])
model.means_ = np.array([[0.0, 0.0], [3.0, -3.0], [5.0, 10.0]])
model.covars_ = np.tile(np.identity(2), (3, 1, 1))
Y,X = model.sample(100)    #其中X爲隱藏序列、Y爲標註序列

運行上述代碼,生成的數據集如下:
Y:在這裏插入圖片描述
X:在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章