Выбор кластеров для k-средних: случай 1 кластера

9

Кто-нибудь знает хороший метод, чтобы определить, подходит ли даже кластеризация с использованием kmeans? То есть, что если ваш образец на самом деле является однородным? Я знаю, что нечто вроде смешанной модели (через mclust в R) предоставит статистику соответствия для случая кластера 1: k, но, похоже, что для всех методов оценки kmeans требуется как минимум 2 кластера.

Кто-нибудь знает методику сравнения 1 и 2 кластерных случаев для kmeans?

dmartin
источник

Ответы:

10

Статистика разрыва - отличный способ сделать это; Tibshirani, Hastie & Walther (2001).

http://stat.ethz.ch/R-manual/R-devel/library/cluster/html/clusGap.html - соответствующий пакет R.

Идея состоит в том, что он выполняет последовательную проверку гипотезы кластеризации ваших данных для K = 1,2,3, ... против нулевой гипотезы случайного шума, которая эквивалентна одному кластеру. Его особая сила заключается в том, что он дает вам достоверную информацию о том, есть ли K = 1, то есть нет ли кластеров.

Вот пример, я проверял некоторые астрономические данные несколько дней назад, как это происходит, а именно из транзитного опроса экзопланет. Я хотел знать, какие доказательства существуют для (выпуклых) кластеров. Мои данные «транзит»

library(cluster)
cgap <- clusGap(transit, FUN=kmeans, K.max=kmax, B=100)
for(k in 1:(kmax-1)) {
    if(cgap$Tab[k,3]>cgap$Tab[(k+1),3]-cgap$Tab[(k+1),4]) {print(k)}; 
    break;
}

Со статистикой разрыва вы ищете первое значение K, где тест «проваливается», то есть статистика разрыва значительно уменьшается. Приведенный выше цикл выведет такой ak, однако простое построение cgap даст вам следующий рисунок:
введите описание изображения здесь посмотрите, как в Gap наблюдается значительный провал от k = 1 до k = 2, что означает, что фактически нет кластеров (то есть 1 кластер).

Джек
источник
Как сделать то же самое для иерархической кластеризации с одной связью? Можете ли вы объяснить весёлый аргумент clusGap? Я запустил следующую строку для иерархического kmax = 20 cgap <- clusGap (cluster_feat_base [, 2: ncol (cluster_feat_base)], FUN = hclust, K.max = kmax, B = 100). Но выдает ошибку «Ошибка в FUNcluster (X, kk, ...): недопустимый метод кластеризации 2»
GeorgeOfTheRF
4

Вы также можете попробовать более новый метод: A. Kalogeratos и A.Likas, Dip-means: метод инкрементальной кластеризации для оценки количества кластеров , NIPS 2012.

Идея состоит в том, чтобы использовать статистическую проверку гипотез для унимодальности на векторах, содержащих сходство / расстояние между одной точкой и остальными точками множества. Тестирование проводится с использованием теста погружения Хартиган-Хартиган , Ann. Statist. 13 (1): 70-84.

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

Таким образом, этот метод будет указывать, есть ли в данных более одного кластера (ваш вопрос), но он может также обеспечить окончательную кластеризацию.

Здесь вы можете найти код в Matlab .

Аргирис
источник
0

Предположим, я рассматриваю тот же пример,

Taб[К,3]>сгaп

Как я могу подразделить элементы кластеров, соответствующие лучшему кластерному решению, основываясь на статистике максимального разрыва? Так что я могу использовать его для дальнейшего анализа на каждом из кластеров.

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

Tharang
источник