О k-означает, в частности, вы можете использовать статистику Gap. По сути, идея состоит в том, чтобы вычислить достоверность показателя кластеризации на основе средней дисперсии по сравнению с эталонным распределением для растущего числа кластеров. Более подробную информацию можно найти в оригинальной статье:
Tibshirani, R., Walther, G. и Hastie, T. (2001). Оценка количества кластеров в наборе данных с помощью статистики разрыва . JR Statist. Soc. B 63 (2): 411-423.
Ответ, который я дал на связанный вопрос, выдвигает на первый план другие общие индексы достоверности, которые можно использовать для проверки того, демонстрирует ли данный набор данных какую-то структуру.
Если у вас нет представления о том, что вы ожидаете найти, если бы был только шум, хорошим подходом является использование повторной выборки и исследования устойчивости кластеров. Другими словами, повторите выборку ваших данных (с помощью начальной загрузки или добавив в них небольшой шум) и вычислите «близость» результирующих разделов, измеренную по сходству Жакара . Короче говоря, это позволяет оценить частоту, с которой подобные кластеры были восстановлены в данных. Этот метод легко доступен в пакете fpc R как clusterboot()
. Он принимает в качестве входных данных либо необработанные данные, либо матрицу расстояний и позволяет применять широкий спектр методов кластеризации (иерархические, k-средние, нечеткие методы). Метод обсуждается в связанных ссылках:
Hennig, C. (2007) Кластерная оценка кластерной стабильности .
Вычислительная статистика и анализ данных , 52, 258-271.
Хенниг, C. (2008) Точка растворения и надежность изоляции: критерии устойчивости для общих методов кластерного анализа . Журнал многомерного анализа , 99, 1154-1176.
Ниже приведена небольшая демонстрация с алгоритмом k-средних.
sim.xy <- function(n, mean, sd) cbind(rnorm(n, mean[1], sd[1]),
rnorm(n, mean[2],sd[2]))
xy <- rbind(sim.xy(100, c(0,0), c(.2,.2)),
sim.xy(100, c(2.5,0), c(.4,.2)),
sim.xy(100, c(1.25,.5), c(.3,.2)))
library(fpc)
km.boot <- clusterboot(xy, B=20, bootmethod="boot",
clustermethod=kmeansCBI,
krange=3, seed=15555)
Результаты весьма положительны в этом искусственном (и хорошо структурированном) наборе данных, поскольку ни один из трех кластеров ( krange
) не был растворен по выборкам, и среднее кластерное сходство Жакара составляет> 0,95 для всех кластеров.
Ниже приведены результаты по 20 образцам начальной загрузки. Как можно видеть, статистические единицы, как правило, остаются сгруппированными в одном кластере, за немногими исключениями для этих наблюдений, лежащих между ними.
Конечно, вы можете распространить эту идею на любой индекс достоверности: выберите новую серию наблюдений с помощью начальной загрузки (с заменой), вычислите свою статистику (например, ширину силуэта, копенетическую корреляцию, гамму Хьюберта, в пределах суммы квадратов) для диапазона номера кластеров (например, от 2 до 10), повторите 100 или 500 раз и посмотрите на графическое поле вашей статистики как функцию от числа кластеров.
Вот что я получаю с тем же набором смоделированных данных, но используя иерархическую кластеризацию Уорда и учитывая копенетическую корреляцию (которая оценивает, насколько хорошо информация о расстоянии воспроизводится в результирующих разделах) и ширину силуэта (комбинированная мера, оценивающая внутрикластерную однородность и разделение кластеров).
Копенетическая корреляция колеблется от 0,6267 до 0,7511 с медианным значением 0,7031 (500 образцов начальной загрузки). Ширина силуэта кажется максимальной, когда мы рассматриваем 3 кластера (медиана 0,8408, диапазон 0,7371-0,8769).