使用 dhmm_em 从歌曲片段中形成 mfccs 的 hmm

数据挖掘 机器学习 马尔科夫过程 音频识别
2022-01-25 16:55:11

我正在做一个关于音乐流派分类的项目,并决定使用一个 hmm 来对我的数据进行建模。从多个歌曲剪辑中提取 mfcc' 后,我得到多个大小为 13 * x 的矩阵(取决于歌曲长度)。

据我了解,hmm_train 不能用于向量序列,而 murphyk 的工具箱可能会起作用。我尝试如下修改演示文件以尝试一首歌曲,但我收到错误“尝试访问 obsmat(:,61.6357); 索引必须是正整数或逻辑......'

O = 5;
Q = 10;

v=wavread('We are the champions');
coeff=melfcc(v);
data=coeff';

% initial guess of parameters
prior1 = normalise(rand(Q,1));
transmat1 = mk_stochastic(rand(Q,Q));
obsmat1 = mk_stochastic(rand(Q,O));

% improve guess of parameters using EM
[LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', 5);
LL    

我以前没有研究过这些东西,所以如果我的问题真的很基本,我提前道歉。如果有人能告诉我哪里出错了,那就太好了。同样对于多个剪辑,我是否应该简单地将生成的矩阵附加到我上面提供的矩阵中?谢谢。

编辑:事实证明,上面的 hmm 只能应用于离散值,这可能是我遇到错误的原因。看来我必须使用另一个函数来代替“高斯输出”,mhmm_em。我会发布另一个问题来弄清楚它的工作原理。

1个回答

编辑:事实证明,上面的 hmm 只能应用于离散值,这可能是我遇到错误的原因。看来我必须使用另一个函数来代替“高斯输出”,mhmm_em。我会发布另一个问题来弄清楚它的工作原理。

为了澄清这一点。您尝试使用的函数确实是为由概率质量函数表示的离散数据定义的。

在处理连续数据并使用 HMM 对其进行建模时,需要确定哪种概率分布最能代表数据。当数据具有无限支持时,高斯通常是一个不错的首选,并且大多数机器学习工具箱都内置了用于训练这些 HMM 的函数。但是,可以使用其他概率分布来训练 HMM,例如 Dirichlet 分布(如果您的数据是成比例的),或者 Student-t、Weibull 分布,...

请记住,您选择的分布是针对您拥有的数据所做的建模假设。如果假设没有意义,则结果可能不准确。不幸的是,这些其他分布的使用主要依赖于您来推导和编码所需的方程(但是,在某些情况下,一些科学论文中提供了这些方程)。