Подтвердить что ты не робот

Kmeans, не зная количества кластеров?

Я пытаюсь применить k-средство на множестве высокоразмерных точек данных (около 50 измерений) и задавался вопросом, есть ли какие-либо реализации, которые находят оптимальное количество кластеров.

Я помню, как где-то читал, что алгоритм обычно делает это так, что расстояние между кластерами максимизируется, а расстояние внутри кластера минимизировано, но я не помню, где я это видел. Было бы здорово, если бы кто-то мог указать мне на любые ресурсы, которые обсуждают это. Я использую SciPy для k-средств в настоящее время, но любая связанная библиотека также будет прекрасна.

Если есть альтернативные способы достижения того же или лучшего алгоритма, пожалуйста, дайте мне знать.

4b9b3361

Ответ 1

Один подход - cross-validation.

В сущности, вы выбираете подмножество своих данных и кластерируете его в кластеры k, и вы спрашиваете, насколько хорошо это кластеры, по сравнению с остальными данными: назначают ли данные точки одному члену кластера или они попадание в разные кластеры?

Если членство примерно одинаково, данные хорошо вписываются в кластеры k. В противном случае вы можете попробовать другой k.

Кроме того, вы можете сделать PCA (анализ основных компонентов), чтобы уменьшить ваши 50 измерений до более приемлемого числа. Если запуск PCA предполагает, что большая часть вашего отклонения исходит, скажем, из из пяти измерений, то вы можете выбрать k на этой основе, чтобы узнать, как назначаются четыре членства кластера.

Ответ 2

Взгляните на страницу wikipedia на определение количества кластеров в наборе данных.

Также вы можете попробовать Агломеративная иерархическая кластеризация. Этот подход не должен знать количество кластеров, он будет постепенно создавать кластеры кластера, пока не будет существовать только один. Этот метод также существует в SciPy (scipy.cluster.hierarchy).

Ответ 3

Один интересный подход - это метод накопления доказательств Фреда и Джаина. Это основано на объединении нескольких прогонов k-средних с большим количеством кластеров, объединяя их в общее решение. Хорошие аспекты подхода включают в себя то, что количество кластеров определяется в процессе и что конечные кластеры не должны быть сферическими.

Ответ 4

Есть визуализация, которая должна подсказывать хорошие параметры. Для k-средств вы можете визуализировать несколько прогонов с разными k, используя Graphgrams (см. Пакет графа WEKA - лучше всего получить менеджер пакетов или здесь. введение и примеры также можно найти здесь.

Ответ 5

Один из способов сделать это - запустить k-средство с большим k (намного больше, чем то, что вы считаете правильным числом), скажем 1000. Затем выполняется алгоритм среднего сдвига в этих 1000 точках (средний сдвиг использует целые данные, но вы будете "перемещать" эти 1000 баллов). тогда средний сдвиг найдет количество кластеров. Запуск среднего сдвига без k-средств до этого является возможностью, но он слишком медленный, как правило, O (N ^ 2 * # шагов), поэтому запуск k-средств до этого ускорит работу: O (NK # шагов)

Ответ 6

Вы также должны убедиться, что каждое измерение фактически независимо. Многие так называемые многомерные наборы данных имеют несколько представлений одной и той же вещи.

Неправильно иметь эти данные. Неправильно использовать несколько версий того же типа, что и поддержка аргумента кластера.

http://en.wikipedia.org/wiki/Cronbach 's_alpha

Ответ 7

Если номер кластера неизвестен, почему бы не использовать иерархическую кластеризацию вместо этого?

В начале каждого изолированного кластера, то каждый два кластера будут объединены, если их расстояние ниже порога, алгоритм закончится, когда больше не произойдет слияние.

Иерархический алгоритм кластеризации может выполнять подходящий "K" для ваших данных.