2011-05-28 98 views
2

我用MFCC算法得到了一些聲音變量的特徵。我想用K-Means對它們進行聚類。我有70幀,每個幀有9個倒譜系數用於一個音色樣本。這意味着我有一個像70 * 9大小的矩陣。如何實現MFCC特徵的K均值聚類算法?

讓我們假設A,B和C是語音記錄,這樣

A是:

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

而且B和C具有相同的長度了。

我不想聚簇每個幀,我想聚集每個幀塊(在我的例子中,一個組有70幀)。

如何在Java中使用K-Means實現它?

回答

2

以下是您對問題領域知識變得至關重要的地方。您可能只需使用70 * 9矩陣之間的距離,但您可能會更好。我不知道您提到的特定功能,但一些通用示例可能是平均值,每個功能70個值的標準差。您基本上希望減少維度的數量,這既能提高速度,又能使度量對抗簡單變換,例如將所有值偏移一步

+0

哦,一旦你確定你的最終特徵是正常化的,你的最後距離測量可能只是特徵之間差異的總和 – Nicolas78 2011-05-29 06:50:10

0

K-Means對您的數據有一些非常艱難的假設。我不相信你的數據適合在其上運行k-means。

  1. K均值設計爲歐幾里德距離,並且可能會有更適合您的數據的距離度量。許多距離函數(和算法!)在70 * 9尺寸下效果不佳(「維度詛咒」 )
  2. 您需要事先知道k。

附註:遠離基本類型的Java泛型,如Double。它殺死了性能。使用double[][]