2012-01-20 4 views
2

私はPythonでジェスチャー認識を行い、隠れマルコフモデルを管理できるより完全なライブラリはnltkです。しかし、私は理解できないことがあります。HiddenMarkovModelTrainerオブジェクトを初期化する

まず、データ。私はジェスチャーの座標を持っており、私はそれらを8クラスター(k-means)でクラスター化しています。これは私のジェスチャー構造です:

raw coordinates x,y: [[123,16], [120,16], [115,16], [111,16], [107,16], [103,17], ...] 

centroids x,y : [[ 132.375  56.625  ] 
       [ 122.45454545 30.09090909] 
       [ 70.5   27.33333333] 
       ...] 

labels: [5 6 6 6 6 6 6 2 2 2 2 2 2 4 4 4 ...] 

今私は私と一緒にHMMをバウムウェルチと訓練したいと思います。だからHiddenMarkovModelTrainerは私のクラスです。

私は、インターネットではいくつかのbaum welchの実装を見つけましたが、Matlabだけです。 - X(私の場合 - ラベル)の列車のためのデータである - 私の場合には(データの可能な値をアルファベット - 0,1

baum-welch(X, alphabet, H) 

:これの実装はtipicallyこの入力を必要とするアルゴリズム、2,3,4,5,6,7) - H ntlk.HiddenMarkovModelTrainerコンストラクタで、私は状態にシンボルを与えなければならないと私はドンので、隠れ状態の数が

今私は混乱しています」 Xを訓練するためのデータがHiddenMarkovModelTrainer.tのimputであることを考慮して、彼らが何をすべきかを知っているrain_unsupervised()メソッド私はアルファベットが記号であると思う。私は州に入れるべきものを知らない。

私の英語が貧弱であっても、私の説明が明確であることを望みます。

答えて

4

隠れマルコフモデルは、実際の状態が観測できないため、隠れマルコフモデルと呼ばれます。代わりに、州は一定の確率で観測を生成する。 NLTKでのHMMの古典的な使用は、観測が単語であり、隠れた内部状態がPOSタグであるPOSタギングです。この場合、statessymbolsのパラメータの意味を理解するには、this exampleを参照してください。 HMMとジェスチャー認識のために

、観察は幾何学的な入力データの特徴モデリング(symbols)のいくつかの種類の一時的な配列である - あなたのケースでは、あなたは、クラスタリング(とも呼ばれる「ゾーニング」を使用 - 他のいくつかの可能性のためにsection 3.2 of this paper ("Yang, Xu. Hidden Markov Model for Gesture Recognition")を参照してくださいモデル)。私の理解では、内部状態の集合は意味のある解釈を持たない。各ジェスチャのためのHMMの訓練に使用される内部状態の数は、単に実験されなければならないパラメータである。たとえば、this paper ("Yamato, Ohya, Ishii. Recognizing Human Action in Time-Sequential Images using HMM")を参照してください。状態の数は36に設定されていますが、これは変更可能なパラメータの例を挙げるにはthis master thesisで高すぎると批判されています。その答えとリンク、非常にclear.sorryため

observed_sequence = [5, 6, 6, 6, 6, 6, 6, 2, 2, 2, 2, 2, 2, 4, 4, 4] 
states = range(20) # experiment with this number 
symbols = set(observed_clusters) 
trainer = HiddenMarkovModelTrainer(states, symbols) 
model = trainer.train_unsupervised([observed_sequence]) 
+0

のおかげではなく、あなたの例では、私はいくつかのエラーを持っている:

だから私はこのコードでそれをしようとするだろう。まず、* 'set'オブジェクトはインデックス作成*をサポートしていません。 * '' int 'オブジェクトがサブスクライブできない' * – nkint

+0

、 'a'、 'b'、 'c'などのcharsのようにobserx_sequenceとsymbolsを使用すると、呼び出し時にリストが使用されます。私は* 'IndexError:文字列インデックスが範囲外です' * – nkint

+0

コード内のエラーについて申し訳ありません、私のバージョンのNLTKに苦しんでいますHMMトレーナーのバグ(http://code.google.com/p/nltk/issues/detail?id=681#c0)...「モデルの使い方について」''( '' '、' None ')、(' b '、None)] 'のように入力してみてください。 – wutz

関連する問題