如何实现MFCC特征的K-Means聚类算法?

时间:2011-05-28 22:30:18

标签: java algorithm cluster-analysis k-means

我用MFCC算法得到了一些声音变量的特征。我想用K-Means聚类它们。我有70帧,每帧有一个语音样本的9个倒谱系数。这意味着我有类似70 * 9大小的矩阵。

我们假设A,B和C是语音记录,所以

A是:

List<List<Double>> -> 70*9 array (I can use Vector instead of List)

并且B和C也有相同的长度。

我不想对每个帧进行聚类,我想对每个帧块进行聚类(在我的例子中,一个组有70帧)。

如何在Java上使用K-Means实现它?

2 个答案:

答案 0 :(得分:2)

在这里,您对问题域的了解变得至关重要。你可能只使用70 * 9矩阵之间的距离,但你可能会更好。我不知道您提到的具体功能,但一些通用示例可能是每个功能70个值的平均值,标准偏差。您基本上希望减少维数,既可以提高速度,也可以使测量对sImple转换具有鲁棒性,例如将所有值偏移一步

答案 1 :(得分:0)

K-Means对您的数据有一些相当严格的假设。我不相信你的数据适合在它上运行k-means。

  1. K-means是为欧几里德距离设计的,可能会有更合适的距离测量数据。
  2. K-means需要能够计算合理的方法,这可能不适合您的数据
  3. 许多距离函数(和算法!)在70 * 9维度上不能很好地工作(“维数的诅咒”)
  4. 你需要事先知道k。
  5. 附注:远离Java泛型的原始类型,如Double。它会杀死性能。使用double[][]