Classification

如何訓練 HMM 進行分類?

  • March 25, 2014

所以我知道,當你訓練 HMM 進行分類時,標準方法是:

  1. 將您的數據集分成每個類的數據集
  2. 每班訓練一個 HMM
  3. 在測試集上比較每個模型對每個窗口進行分類的可能性

但是我如何在每節課上訓練 HMM?我是否只是將與一個類有關的數據連接在一起?但是,時間序列數據不是應該是連續的嗎?如果我這樣做,那麼我是說某些數據點不是連續的?

更具體地說,我有一些 EEG 數據,它是一個 96xT 矩陣,其中我有 96 個特徵向量,它們是來自不同通道的不同頻率的功率譜密度,T 是信號的時間長度(在某些採樣率下)

這可以分為我從實驗協議中知道的窗口(數據已標記),因此我可以為每個類收集一組 96*t 矩陣。其中 t 小於 T 並表示每個窗口的大小。

然後我如何在這些數據上訓練 HMM?如果它有幫助,我正在嘗試使用 pmtk3 工具包,但我願意真正使用任何東西 - 它只需要能夠處理實值觀測,因為功率譜密度是連續的而不是離散的(默認的 MATLAB 工具箱只能處理離散觀察)。

目的是能夠將 EEG 數據窗口分類為已對標記數據進行訓練的給定心理狀態。這是一個使用柏林 BCI 競賽數據的腦機接口問題。

您描述的使用 HMM 進行分類的方法實際上僅適用於您具有要分類的獨立序列的設置。例如,如果我將句子的情緒分類為正面或負面,我可以按照您的描述為每個句子構建一個 HMM。請參閱我在這裡給出的相關答案。請注意,這是如何建立在假設我可以在比較後驗之前將序列分解成有意義的塊進行分類的。這似乎不是你的問題,因為你實際上有一個很大的長度時間序列。這是我會嘗試的。

你在reddit上提到過你對為每個類分配一個狀態猶豫不決。你試過這個嗎?它可能沒有你想像的那麼糟糕。在這種情況下,估計問題也容易得多。估計轉換概率很容易,您只需從本質上進行計數。此外,您可以根據觀察到的數據和相應的類別來擬合每個狀態的發射概率,而忽略時間方面。

如果您確信這是一個壞主意,或者發現它表現不佳但仍想堅持使用生成模型,您可以使用分層 HMM 之類的東西。例如,您可以讓頂層中的狀態表示類,然後允許較低級別的 HMM 對類內的時間變化進行建模。你也可以使用一個大的 HMM 來實現類似的東西。如果你有上課,分配每個類的狀態(所以完全州)的形式,,. 在訓練期間,您需要強制 HMM 只分配正概率來轉換到某個狀態在哪裡在時間匹配標籤. 我的措辭可能有點尷尬,所以我希望我的意思很清楚。顯然,您可以將其概括為每個類具有不同數量的狀態。您可能還可以使用其他類型的動態貝葉斯網絡。凱文墨菲的論文是一個很好的參考。他還討論了將 HHMM 轉換為 HMM。

最後,您可以切換到判別模型,例如條件隨機場。判別模型將允許您輕鬆合併更複雜的特徵並更直接地解決手頭的問題(估計條件密度)。這可能是我首先要嘗試的。

引用自:https://stats.stackexchange.com/questions/91290

comments powered by Disqus