HI 这是我第一次阅读有关 HMM 的文章,但是我在网上阅读了很多文章,但我感到困惑的两件事是:
- 如何确定隐藏状态的数量(虽然 HMM 说我们不需要知道,但我们只需要猜测,即使猜测什么应该是最好的标准)
- 一旦定义了隐藏状态,比如说 5,那么如何定义每个隐藏状态的初始概率以及彼此之间的过渡概率......
如果有人能给我举个例子,我将不胜感激……但请不要给我举个天气系统的例子。
HI 这是我第一次阅读有关 HMM 的文章,但是我在网上阅读了很多文章,但我感到困惑的两件事是:
如果有人能给我举个例子,我将不胜感激……但请不要给我举个天气系统的例子。
1. 如何确定隐藏状态的数量(虽然 HMM 说我们不需要知道,但我们只需要猜测,即使猜测什么应该是最好的标准)
隐藏状态的数量取决于问题。例如在语音识别和合成中,通常使用 3 和 5 状态。使用这些的原因是语音是一个高度可变的数据。因此,语音声音(音素)在不同时刻的分布随时间而变化,并且每个状态都对不同的分布进行建模。
2.一旦定义了隐藏状态,比如说5,那么如何定义每个隐藏状态的初始概率以及彼此之间的过渡概率......
一个 HMM 可以定义为 (A, B,),其中 A 是状态转移概率矩阵,B 是状态发射概率向量,并且(A 的一个特殊成员)是初始状态分布的向量。采取以下步骤来估计这些参数:
参考:
对这个问题的通常、没有启发性和无信息的答案是“你的系统的动态/物理问题的性质将表明有多少隐藏状态”,这意味着:“选择并克服它”。但是,我不相信这一点。我认为大多数问题都比这更复杂,因此您的问题是一个非常有效的问题。
让我们假设您正在使用高斯分布来模拟您的发射(观察)变量。在拟合 HMM 时,您所做的基本上是时间聚类。因此,您可以利用一种快速且更简单的聚类方法来形成每个状态的高斯分布的初始猜测。Rabiner 的论文中也提到了这一点——HMM 的主要参考资料。
1)您可以在数据集上运行(简单)k-means,以粗略估计最佳聚类数和数据集中质心(平均向量)的位置。在此处查看有关如何确定集群数量的主题的大量报道。
2)更好的是,您可以选择在您的数据集上拟合高斯混合(或任何混合模型),以查看有多少混合组件最能解释您的数据集以及足够的统计数据(均值向量、协方差)是什么。您可以在训练 HMM 时使用这些输出来形成初始参数 - 这比训练混合模型(显然是 k-means 例程)在计算上更难,主要是由于进入对数似然的串行依赖关系(因此期望最大化) 计算。
现在,重要的是,这些聚类技术在计算哪个点最有可能属于哪个状态时,不会考虑串行依赖关系(就像 HMM 通过其转换矩阵所做的那样)。然而,它们会给你粗略估计你的起点(例如平均向量、协方差向量、先验分布)应该是什么。
例如,您可以计算以这种方式训练的 HMM 的对数似然,然后将其与使用随机初始值训练的 HMM 的对数似然进行比较,以自己观察差异。
这在某种程度上类似于,例如,开始一个非凸问题的全局优化,其最优值到其简化(近似)凸版本。您执行步骤 1 和/或 2 以减少搜索空间。不用说,您找到的最终值无论如何都不能保证是您的优化问题的全局解决方案 - 但可能对您的目的足够好。