2017-05-05 222 views
0

我無法理解如何在包HMM中使用方法baumWelch在R中使用HMM包

按照documentation我們首先要初始化我們隱馬爾可夫模型

hmm = initHMM(c("A","B"), c("L","R"), transProbs=matrix(c(.8,.2,.2,.8),2), 
       emissionProbs=matrix(c(.6,.4,.4,.6),2) 

這意味着國家命名爲「A」和「B」的排放量被命名爲「L」和「R」我們有傳輸和發射概率。

到目前爲止好,但現在的教程將創建觀察之列:

observations = sample(c("L","R"),prob=c(.8,.2),size=100,replace=TRUE) 

這是一個維向量作爲觀察名單。根據Rabiner的經典論文的描述,正向和反向概率是根據一系列觀察值計算出來的,例如上述代碼中的變量observations。即我們需要這種observations的矩陣,以便甚至遠程訓練任何東西。我該怎麼做?

編輯:

在排放上面的例子中是 「L」 和 「R」。應使用這些排放物創建obesevation序列O.例如O = LRRRLLLRR等假設長度爲t

在前向算法中使用了這種類型的觀察,該算法給定完整的馬爾可夫模型,觀察序列O將生成維度矩陣nxt,其中n是狀態數在我們的HMM中,這樣一個矩陣的第i個元素被解釋爲「在時間j,產生了觀測序列的第j個元素並處於狀態i」。

現在向前以及向後和其他幾種算法都用於Baum-Welch訓練算法。

我相信Baum-Welch的輸入應該是觀測序列列表,而不是排放列表。在我的版本中,矩陣輸入的維數應該是t乘以m,其中t是觀測序列的長度,m是這種序列的數量。

我如何理解這裏的輸入?我們有一百個長度爲1的觀測序列嗎?我該如何在HMM中提供這樣一個矩陣來保證方法

+0

如果你不明白統計方法的原理,你應該問[stats.se]或[datascience.se]。這實際上不是一個適用於堆棧溢出的特定編程問題。 – MrFlick

+0

我理解這些原則,實際上我應該更好地表述它,並不是說我認爲觀察應該是一個矩陣,它應該是一個不可改變的事實。我在這裏問的是,是否有人使用過這個軟件包,並且可以澄清如何理解這個特定的例子以及如何編寫正確的東西。 –

+0

現在還不清楚你的問題到底是什麼。你不明白他們爲什麼要創建觀測矢量而不是矩陣?預期矩陣的維度是什麼?它的內容是什麼?你指的是什麼文件的一部分? – MrFlick

回答

0

雖然剛纔問,但當我被同樣的事情困惑時,我發現了這個問題。

An Intoduction to Hidden Markov Models and Bayesian Networks第7頁引用Ghahramani:

「如果觀察矢量包括所有在貝氏網絡比對數似然函數每學期的變量進一步因素......」 see equation here

從什麼

本質我明白,因爲網絡中的每個節點只取決於它的父節點,所以不需要將訓練向量分離爲矩陣,而是可以使用一個完整的訓練向量。我想唯一的問題是在一個新的訓練矢量的開始,但是你可以通過創建一個特殊的開始狀態「*」來克服這個問題,該狀態始終是新序列中的第一個狀態。

0

據我所知,HMM包中的baumWelch函數只接受一個觀察序列作爲其次要參數。如果您的訓練數據由多個序列組成,您可以嘗試使用蚜蟲軟件包,該軟件包支持包含多序列列表的Baum Welch和Viterbi模型訓練。免責聲明:我撰寫了該軟件包,部分原因是我遇到了相同的問題。