機器學習&數據挖掘筆記_25(PGM練習九:HMM用於分類)


 

  前言:

  本次實驗是用EM來學習HMM中的參數,並用學好了的HMM對一些kinect數據進行動作分類。實驗內容請參考coursera課程:Probabilistic Graphical Models 中的的最后一個assignmnet.實驗用的是kinect關節點數據,由於HMM是一個時序模型,且含有隱變量,所以這個實驗不是很好做。大家對HMM不熟悉的話可以參考網友的實驗:code.

  kinect人體關節數據中, 每個關節點由3個坐標數據構成,多個關節點數據(實驗中為10個)構成一個pose,多個pose構成一個action,每個action所包含的pose個數可能不等。其示意圖如下:

  

  圖中有3個action: clap, high kick, low kick. 而每個action可以由不同的pose序列構成,上面的每個action中列舉出了3種情況,其長短可不一。在HMM模型中,上面模型中每個節點代表的是觀察節點,代表一個pose,該pose可由狀態變量(隱變量)產生,比如具有3個pose的action示意圖如下:

   

  其中的狀態變量S1,S2,S3並不是該pose的action標簽,而是介於pose和action之間的一個隱藏類別,它與action和pose數據同時有關,這里state的物理意義不是十分明確,state節點的個數可由驗證集通過實驗來確定。

 

 

  實驗中一些函數的簡單說明:

  [P loglikelihood ClassProb] = EM_cluster(poseData, G, InitialClassProb, maxIter):

  實驗1的內容。poseData大小為N*10*3,表示N個pose的數據。G,P和練習八意思一樣,為模型的結構信息。InitialClassProb大小為N*K,表示這N個樣本分別屬於K個類別的初始概率,ClassProb表示EM聚類完成后這N個樣本屬於各個類別的概率值。loglikelihood中保存的是每次EM迭代時的log似然值。模型中的隱變量為每個樣本所屬的類別。程序中的E步是:給定模型中的參數(每個關節點的CLG參數),求出每個樣本屬於各個類別的概率。M步為:給定每個樣本屬於K個類別的概率后,來求模型中每個關節點的參數。

  [mu sigma] = FitG(X, W):

  該函數類似於練習八中的FitGaussianParameters(),只是這里每個樣本多了一個可信度權值,求高斯參數的時候需要把這個權值考慮進去。

  [Beta sigma] = FitLG(X, U, W):

  該函數類似於練習八中的FitGaussianParameters(),也是多了一個參數W,表示輸入進來的數據X和父節點數據U的可信度為W中對應的值。每個state都會學習到的自己的參數beta和sigma,為HMM模型中的發射矩陣。

  out = logsumexp(A):

  很明顯是求exp(A),然后求和,最后取log值,內部采用了防止數據溢出的方法。如果A是一個矩陣,則上面的操作是針對A的每一行進行的。

  [P loglikelihood ClassProb PairProb] = EM_HMM(actionData, poseData, G, InitialClassProb, InitialPairProb, maxIter):

  實驗2的內容。參數結構比較復雜,簡單介紹下。

  actionData結構體向量:該向量中的每一個元素都是一個action。action.action表示對應動作的名稱,在本函數中,因為是訓練某個類別的HMM模型,所以其名稱都一樣。action.marg_ind,表示該action的pose數據在poseData向量中的行索引,同時也為pose屬於各個state的概率值在ClassProb中的索引。action.pair_ind:action中連續的pose之間的邊在PairProb中的索引,PairProd矩陣中的每一行表示對應edge兩端之間的state轉移概率。

  poseData, G, InitialClassProb,maxIter和前面的差不多。

  InitialPairProb:大小為V*K^2的矩陣,其中V為模型中邊的數目,K為HMM模型中狀態的個數,該矩陣與HMM轉移矩陣的計算有關。

  博文前面的HMM action示意圖中對應的poseData, PairProb值形式如下所示:

   

  返回值P和以前的P結構稍有不同,因為這里考慮到了HMM之間的狀態轉移,所以有P.transMatrix來表示HMM中狀態轉移矩陣,尺寸為K*K。另外P.c不再表示每個pose所屬action的概率分布,而是初始狀態分布。P.c表示在這些數據下,這個action對應state的先驗概率。

  EM_HMM()函數的作用是:用某個action的序列樣本actionData來訓練它的HMM模型,對應的模型參數包括轉移概率,發射概率(包括各個狀態下的關節點參數),初始概率。主要分為2個步驟:E步:給定參數,通過clique tree求數據;M步:給定數據,求HMM參數,比如初始狀態分布計算:

   

  轉移概率的計算公式為:

   

  與發射概率相關的CLG參數計算參考練習八

  [M, PCalibrated] = ComputeExactMarginalsHMM(F):

  F為HMM模型的factorlist,M為在該模型上進行精確推導的條件概率,與以前練習4實驗中的推理類似。PCalibrated為校正好的clique tree,

  [accuracy, predicted_labels] = RecognizeActions(datasetTrain, datasetTest, G, maxIter):

  實驗3的內容。datasetTrain為訓練HMM模型時的樣本,它是長度為3的向量(本實驗只有3個動作類別),每個元素都是一個結構體。第1個結構體表示動作clap的數據,結構體中包含了actionData, poseData, InitialClassProb, InitialPairProb信息。第2個結構體為high_kick動作的數據,第3個結構體為low_kick動作的數據。datasetTest為測試樣本,也是一個結構體,里面有actionData,poseData和labels. labels對應每個action的標簽,“clap” = 1, “high kick” = 2, “low kick” = 3。實現該函數時首先用datasetTrain訓練3個HMM模型參數,然后針對datasetTest中的每個action數據,計算它的posedata在每個模型各個狀態下的概率。然后在這3個模型上分別建立clique tree,並算出生成這些樣本的概率,概率值最大的那個模型對應的action為其分類類別。

 

  相關理論知識點:

  這部分可參考Corsera中的課件以及網友demonstrate的blog:PGM 讀書筆記節選(十四)

  不完全數據(incomplete data)主要包含2部分:缺失數據(missing data)和含隱變量的數據。

  缺失數據又分2種情況:一是數據樣本中有一些沒有被觀察到的量,一般用問號代替。另外一種是數據樣本中直接少了一些數據,至於少了哪些數據,在哪些位置(序列數據)少了數據,都無法知道。

  Missing at Random(MAR):隨機缺失的一些樣本,此時在給定觀察到的樣本條件下,沒被觀察的樣本與控制缺失的開關變量相互獨立。

  帶有隱變量的Likelihood函數值會有多個極值點,並且極值點的個數與隱變量的個數成指數關系(實際上,這些局部極值的log似然值也不相同)。帶缺失數據的情形與之類似。有多個極值點的函數時即使學習到了其中一個極值點的參數,這組參數也未必就是模型中的true parameters. 隱變量的likelihood的另一個缺點就是likelihood函數不能按照變量和CPD等來局部分解,並且模型中一些不相關的參數也開始相關了(引入了新的v-structure)。

  帶隱變量likelihood函數參數的求解雖然可以采用一些高級的梯度下降法,但實際中用得較多的是EM算法。關於EM算法可以參考我前面的博文對EM算法的簡單理解. 在隱變量likelihood這里,簡單來說E步為給定模型參數,產生”完全”數據(把那些隱變量的數據也生成出來);M步為給定”完全”數據,計算模型參數。EM算法的特點是在前面迭代過程中收斂速度較快,越到后面收斂越慢。

  梯度下降法是沿着一條直線進行搜索,而EM算法是沿着一個凸函數曲線來搜索其極值,有理論保證EM算法迭代過程中對應似然函數值不會下降。

 

  參考資料:

       網友的實驗:code.

       PGM練習八:結構學習

       coursera課程:Probabilistic Graphical Models

       網友demonstrate的blog:PGM 讀書筆記節選(十四)

       PGM練習四:圖模型的精確推理

       EM算法學習筆記_1(對EM算法的簡單理解)

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM