有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何为MFCC特性实现KMeans聚类算法?

我用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) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

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

    1. K-means是为欧几里德距离而设计的,可能有一个更适合您的数据的距离度量
    2. K-means需要能够计算合理的平均值,这可能不适合您的数据
    3. 许多距离函数(和算法!)在70*9维度(“维度诅咒”)下表现不佳
    4. 你需要事先知道k

    旁注:对于Double这样的基本类型,不要使用Java泛型。这会扼杀性能。使用double[][]