initialize HiddenMarkovModelTrainer对象

我在Python中进行手势识别,发现了一个比较完整的库nltk,它可以处理隐马尔可夫模型。但我有一些不明白的地方。

首先是数据。我有手势的坐标,并将它们聚类到了8个簇(使用k-means)。所以这是我的手势结构:

原始坐标 x,y: [[123,16], [120,16], [115,16], [111,16], [107,16], [103,17], ...]
中心点 x,y : [[ 132.375        56.625     ]
               [ 122.45454545   30.09090909]
               [  70.5          27.33333333]
               ...]
标签: [5 6 6 6 6 6 6 2 2 2 2 2 2 4 4 4 ...]

现在我想使用Baum-Welch算法训练一个HMM。所以HiddenMarkovModelTrainer是我的类。

我在网上找到了一些Baum-Welch算法的实现,但仅限于Matlab。这些算法的实现通常需要以下输入:

baum-welch(X, alphabet, H)

其中 – X 是训练数据(在我的情况下 – 标签)
– alphabet 是数据的可能值(在我的情况下 – 0,1,2,3,4,5,6,7)
– H 是隐藏状态的数量

现在我很困惑,因为在ntlk.HiddenMarkovModelTrainer的构造函数中,我需要提供statessymbols,我不知道它们应该是什么,考虑到训练数据X是HiddenMarkovModelTrainer.train_unsupervised()方法的输入,我认为我的alphabet是symbol..我不知道在states中应该放什么。

尽管我的英语不好,我希望我的解释是清楚的。


回答:

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

对于使用HMM进行手势识别,观察是某种特征建模(symbols)的几何输入数据的时间序列 – 在你的情况下,你使用了聚类(也称为“分区” – 参见这篇论文的第3.2节(“Yang, Xu. Hidden Markov Model for Gesture Recognition”)以了解其他可能的模型)。据我所知,内部状态集没有任何有意义的解释。用于训练每个手势的HMM的内部状态数量只是一个需要实验的参数。例如,参见这篇论文(“Yamato, Ohya, Ishii. Recognizing 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) # 实验这个数字
symbols = set(observed_clusters)
trainer = HiddenMarkovModelTrainer(states, symbols)
model = trainer.train_unsupervised([observed_sequence])

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注