Почему статистика разрыва для k-средних предполагает один кластер, хотя, очевидно, их два?


18

Я использую K-средства для кластеризации своих данных и искал способ предложить «оптимальный» номер кластера. Статистика зазоров, кажется, является распространенным способом найти хороший номер кластера.

По некоторым причинам он возвращает 1 в качестве оптимального номера кластера, но когда я смотрю на данные, становится очевидно, что есть 2 кластера:

! [1] (http://i60.tinypic.com/28bdy6u.jpg)

Вот как я называю пробел в R:

gap <- clusGap(data, FUN=kmeans, K.max=10, B=500)
with(gap, maxSE(Tab[,"gap"], Tab[,"SE.sim"], method="firstSEmax"))

Набор результатов:

> Number of clusters (method 'firstSEmax', SE.factor=1): 1
          logW   E.logW           gap    SE.sim
[1,]  5.185578 5.085414 -0.1001632148 0.1102734
[2,]  4.438812 4.342562 -0.0962498606 0.1141643
[3,]  3.924028 3.884438 -0.0395891064 0.1231152
[4,]  3.564816 3.563931 -0.0008853886 0.1387907
[5,]  3.356504 3.327964 -0.0285393917 0.1486991
[6,]  3.245393 3.119016 -0.1263766015 0.1544081
[7,]  3.015978 2.914607 -0.1013708665 0.1815997
[8,]  2.812211 2.734495 -0.0777154881 0.1741944
[9,]  2.672545 2.561590 -0.1109558011 0.1775476
[10,] 2.656857 2.403220 -0.2536369287 0.1945162

Я делаю что-то не так или кто-то знает лучший способ получить хороший номер кластера?

Ответы:


37

Кластеризация зависит от масштаба , между прочим. Обсуждение этой проблемы см. ( Среди прочего ). Когда следует центрировать и стандартизировать данные? а спс на ковариацию или корреляцию? ,

Вот ваши данные, полученные с соотношением сторон 1: 1, показывающие, насколько различны шкалы двух переменных:

фигура 1

Справа от графика статистики разрыва показана статистика по количеству кластеров ( ) со стандартными ошибками, нарисованными вертикальными сегментами, и оптимальное значение помеченное вертикальной пунктирной синей линией. Согласно помощи,кККclusGap

Метод по умолчанию «firstSEmax» ищет наименьшее , так что его значение составляет не более 1 стандартной ошибки от первого локального максимума.f ( k )Ке(К)

Другие методы ведут себя аналогично. Этот критерий не приводит к выделению какой-либо статистики пропусков, что приводит к оценке .Кзнак равно1

Выбор масштаба зависит от приложения, но разумной начальной точкой по умолчанию является мера разброса данных, например MAD или стандартное отклонение. Этот график повторяет анализ после повторного центрирования до нуля и масштабирования, чтобы получить стандартное отклонение для каждого компонента и :бaб

фигура 2

Решение K-средних обозначено изменением типа и цвета символа на диаграмме рассеяния данных слева. Среди множества , явно выступают в сюжете статистики разрыва справа: это первый локальный максимум и статистика для меньших (то есть, ) значительно ниже. Большие значения , вероятно, подходят для такого небольшого набора данных, и ни одно из них не значительно лучше, чем . Они показаны здесь только для иллюстрации общего метода. k { 1 , 2 , 3 , 4 , 5 } k = 2 k k = 1 k k = 2Кзнак равно2К{1,2,3,4,5}Кзнак равно2ККзнак равно1ККзнак равно2


Вот Rкод для получения этих цифр. Данные примерно соответствуют показанным в вопросе.

library(cluster)
xy <- matrix(c(29,391, 31,402, 31,380, 32.5,391, 32.5,360, 33,382, 33,371,
        34,405, 34,400, 34.5,404, 36,343, 36,320, 36,303, 37,344,
        38,358, 38,356, 38,351, 39,318, 40,322, 40, 341), ncol=2, byrow=TRUE)
colnames(xy) <- c("a", "b")
title <- "Raw data"
par(mfrow=c(1,2))
for (i in 1:2) {
  #
  # Estimate optimal cluster count and perform K-means with it.
  #
  gap <- clusGap(xy, kmeans, K.max=10, B=500)
  k <- maxSE(gap$Tab[, "gap"], gap$Tab[, "SE.sim"], method="Tibs2001SEmax")
  fit <- kmeans(xy, k)
  #
  # Plot the results.
  #
  pch <- ifelse(fit$cluster==1,24,16); col <- ifelse(fit$cluster==1,"Red", "Black")
  plot(xy, asp=1, main=title, pch=pch, col=col)
  plot(gap, main=paste("Gap stats,", title))
  abline(v=k, lty=3, lwd=2, col="Blue")
  #
  # Prepare for the next step.
  #
  xy <- apply(xy, 2, scale)
  title <- "Standardized data"
}

хорошо, спасибо за объяснение. Кстати: знаете ли вы какие-либо другие кластерные метрики, такие как статистика разрывов? Я нашел некоторые, но я не знаю, какие из них обычно используются с K-средних?
MikeHuber

+1. Очень хорошая демонстрация, и впечатляет, что вы, кажется, оцифровали цифру ОП, чтобы получить те же данные.
говорит амеба: восстанови Монику

3
@amoeba Я положил глаз на диаграмму рассеяния и набрал координаты в точности так, как вы видите здесь (то есть используемые цифры были моими собственными пальцами :-)). Иногда самый простой подход эффективен.
whuber

Можно ли использовать статистику разрыва для определения количества кластеров в одном массиве числовых значений 1-го порядка?
user1971988

xyxy <- xy[, 1, drop=FALSE]N×1R(Икся)(Икся,0)

9

xyКзнак равно1К>1невозможность отклонить нулевую гипотезу не делает ее верной . Методологический документ, описывающий статистику GAP, он доступен онлайн, если вы хотите больше узнать технические подробности.

К2×2К

ККзнак равно2


+1 Вы увидели потенциальную проблему, внимательно прочитав сюжет: молодец! Ссылка на статью Hastie также приветствует ваш ответ.
whuber

@whuber: у нас была эта дискуссия о масштабах, не так ли? :)
usεr11852 говорит восстановить Monic

Это был такой другой контекст, я не установил связь ...
whuber

Это был действительно другой контекст; Я упомянул это вам только потому, что там были «весы» и «весы» здесь.
usεr11852 говорит восстановить Monic

0

У меня была та же проблема, что и у оригинального постера. В документации R в настоящее время говорится, что исходная и заданная по умолчанию настройка d.power = 1 была неверной и должна быть заменена на d.power: «Значение по умолчанию, d.power = 1, соответствует« исторической »реализации R, тогда как d.power = 2 соответствует тому, что предложили Тибширани и др. Это было найдено Хуаном Гонсалесом в 2016-02 гг. "

Следовательно, изменение d.power = 2 решило проблему для меня.

https://www.rdocumentation.org/packages/cluster/versions/2.0.6/topics/clusGap

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.