3

MFCC Algorithm でいくつかのサウンド変数の機能を取得しました。K-Means でそれらをクラスター化したい。私は 70 フレームを持っており、各フレームには 1 つの音声サンプルに対して 9 つのケプストラム係数があります。これは、70*9 サイズのマトリックスのようなものがあることを意味します。

A、B、C が音声レコードであるとします。

A は:

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

また、B と C も同じ長さです。

各フレームをクラスター化するのではなく、各フレーム ブロックをクラスター化します (私の例では、1 つのグループに 70 フレームがあります)。

JavaでK-Meansを使用して実装するにはどうすればよいですか?

4

2 に答える 2

3

ここで、問題のドメインに関する知識が重要になります。70 * 9行列間の距離を使用することもできますが、おそらくもっと良いでしょう。あなたが言及している特定の機能はわかりませんが、いくつかの一般的な例は、機能ごとの70の値の平均標準偏差である可能性があります。基本的に、ディメンションの数を減らして、速度を向上させるだけでなく、すべての値を1ステップでオフセットするなど、単純な変換に対してメジャーを堅牢にすることを目指しています。

于 2011-05-29T06:46:19.407 に答える
0

K-Means には、データに関するかなり厳しい仮定があります。あなたのデータがk-meansを実行するのに適切であるとは確信していません.

  1. K-means はユークリッド距離用に設計されており、データにより適切な距離測定が存在する場合があります。
  2. K-means は適切な平均を計算できる必要がありますが、これはデータには適していない可能性があります
  3. 多くの距離関数 (およびアルゴリズム!) は、70*9 次元ではうまく機能しません (「次元の呪い」)。
  4. k を事前に知っておく必要があります。

補足: Double などのプリミティブ型の Java ジェネリックには近づかないでください。それはパフォーマンスを殺します。を使用しdouble[][]ます。

于 2012-07-10T08:25:36.987 に答える