2

我正在 python 中进行手势识别,我发现可以管理隐藏马尔可夫模型的更完整的库之一是nltk。但是有一点我无法理解。

首先,数据。我有手势的坐标,我已经将它们聚集在 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 ...]

现在我想用我的 . 所以 HiddenMarkovModelTrainer 是我的课。

我在互联网上发现了一些更多的 baum welch 实现,但仅限于 Matlab。这个算法的实现通常需要这个输入:

baum-welch(X, alphabet, H)

其中 - X 是火车的数据(在我的情况下 - 标签) - 数据的可能值的字母表(在我的情况下 - 0,1,2,3,4,5,6,7) - H 隐藏的数量状态

现在我很困惑,因为在 ntlk.HiddenMarkovModelTrainer 构造函数中我必须给出状态符号,我不知道它们应该是什么,考虑到训练 X 的数据是 HiddenMarkovModelTrainer.train_unsupervised() 方法的输入,我认为我的字母表是符号..我不知道在州里放什么。

即使我的英语很差,我也希望我的解释清楚。

4

1 回答 1

4

隐马尔可夫模型之所以这样称呼是因为它们的实际状态是不可观察的;相反,这些状态以一定的概率产生观察。HMM 在 NLTK 中的经典用途是词性标注,其中观察是词,隐藏的内部状态是词性标签。查看此示例以了解statessymbols参数在这种情况下的含义。

对于使用 HMM 进行手势识别,观察结果是几何输入数据的某种特征建模symbols. 用于手势识别的隐马尔可夫模型”)用于其他一些可能的模型)。据我了解,这组内部状态没有任何有意义的解释。每个手势的 HMM 训练中使用的内部状态数量只是一个必须试验的参数。举个例子,见这篇论文(“Yamato, Ohya, Ishii.Recogning Human Action in Time-Sequential Images using HMM”) ——状态数设置为36,,仅举一个可修改参数的示例。

所以我会用这段代码试试:

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])
于 2012-01-21T11:04:28.023 回答