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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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