Как реализовать алгоритм кластеризации K-средних для функций MFCC? - PullRequest
2 голосов
/ 29 мая 2011

Я получил функции некоторых звуковых переменных с помощью алгоритма MFCC. Я хочу объединить их с помощью K-Means. У меня есть 70 кадров, и каждый кадр имеет 9 кепстральных коэффициентов для одной голосовой выборки. Это значит, что у меня есть что-то вроде матрицы размера 70 * 9.

Предположим, что A, B и C являются голосовыми записями, поэтому

А это:

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

, а также B и C. тоже имеют одинаковую длину.

Я не хочу кластеризовать каждый кадр, я хочу кластеризовать каждый кадр (в моем примере одна группа имеет 70 кадров).

Как я могу реализовать это с K-Means в Java?

Ответы [ 2 ]

2 голосов
/ 29 мая 2011

Здесь ваше знание проблемной области становится критически важным.Вы можете просто использовать расстояние между матрицами 70 * 9, но вы, вероятно, можете лучше.Я не знаю, какие именно функции вы упоминаете, но некоторые общие примеры могут быть средними, стандартным отклонением 70 значений для функции.В основном вы стремитесь уменьшить количество измерений, как для повышения скорости, так и для обеспечения устойчивости меры к преобразованиям sImple, таким как смещение всех значений на один шаг

0 голосов
/ 10 июля 2012

K-Means имеет довольно жесткие предположения относительно ваших данных. Я не уверен, что ваши данные подходят для запуска k-средних.

  1. К-среднее рассчитано на евклидово расстояние, и для ваших данных может быть более подходящая мера расстояния.
  2. K-означает, что должен уметь вычислять разумные средства, которые могут не подходить для ваших данных
  3. Многие функции расстояния (и алгоритмы!) Плохо работают при 70 * 9 измерениях ("проклятие размерности")
  4. Тебе нужно знать k заранее.

Примечание: держитесь подальше от обобщений Java для примитивного типа, такого как Double. Это убивает производительность. Используйте double[][].

...