我正在学习使用隐藏马尔可夫模型来对一系列t帧图像中的运动进行分类。
假设我从每一帧中提取了m维的特征。然后我将这些特征聚类成一个符号(用于可观察符号)。接着,我为k个类别创建了k个不同的HMM模型。
那么,我该如何确定每个模型的隐藏状态数量以优化预测呢?
顺便问一下,我的方法正确吗?如果我误解了如何使用它,请纠正我:)
谢谢:)
回答:
“我的方法已经正确了吗?”
你当前的方法是正确的。我几周前也做过同样的事情,并问过相同的问题。我构建了一个手势识别工具。
你说你有k个类别要识别,所以是的,你将训练k个HMM。对于每个HMM,你运行前向算法并获得P(HMM|observation)
,针对每个隐藏马尔可夫模型(或者也可以使用维特比解码)。然后你选择概率最高的那个。
将m维特征向量视为单个观察符号也是正确的。根据你的向量是什么样的,你可能想要使用连续隐藏马尔可夫模型或离散隐藏马尔可夫模型。使用离散模型通常更容易,并且在训练数据较少的情况下更容易训练。所以,如果你的特征向量空间是连续的,你可能需要考虑离散化,使所有值离散化(例如,通过均匀类别)。关于离散性的问题是:你将有多少个观察类别?
“如何确定每个模型的隐藏状态数量以获得最佳预测?”
然而,我无法完全回答你关于隐藏状态数量的实际问题。根据我在其他领域学到的,似乎需要大量的基准测试和试验。例如,在语音识别中,我们为每个音素(人类声音)使用3个HMM状态,因为声音在开始、中间和结束时听起来不同。然后每个不同的音素得到一个三元组。但那当然是工程上的考虑。
在我的应用中,我是这样想的:我想定义手势并将它们与方向关联。比如open_firefox = [UP, RIGHT]
。所以我决定为所有四个方向使用四个隐藏状态。我猜找到最佳状态数量很大程度上是关于工程和尝试不同方法的过程。