Чому статистика розривів для 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

Кластеризація залежить, зокрема, від масштабу . Для обговорення цього питання див. (У тому числі ) Коли слід зосередити та стандартизувати дані? і PCA на коваріації чи кореляції? .

Ось ваші дані, складені у співвідношенні сторін 1: 1, які розкривають, наскільки масштаби двох змінних відрізняються:

Фігура 1

Праворуч графік статистики розриву показує статистику за кількістю кластерів ( ) зі стандартними помилками, намальованими вертикальними відрізками, та оптимальним значенням позначеним вертикальною пунктирною синьою лінією. Згідно довідки,kkkclusGap

Метод за замовчуванням "firstSEmax" шукає найменший такий, що його значення не більше 1 стандартної помилки від першого локального максимуму.f ( k )kf(k)

Інші методи поводяться аналогічно. Цей критерій не спричиняє виділення жодної статистики розривів, в результаті чого .k=1

Вибір масштабу залежить від програми, але розумною початковою точкою за замовчуванням є міра розповсюдження даних, наприклад, MAD або стандартне відхилення. Цей графік повторює аналіз після повторного перегляду на нуль і масштабування, щоб зробити одиничне стандартне відхилення для кожного компонента і :bab

Малюнок 2

Рішення K-засобів позначається різними типами символів та кольором у розкиданні даних ліворуч. Серед безлічі , явно виступають в сюжеті статистики розриву справа: це перший локальний максимум і статистика для менших (тобто, ) значно нижчі. Більш великі значення , ймовірно, є надлишковими для такого невеликого набору даних, і жодне не суттєво краще, ніж . Вони показані тут лише для ілюстрації загального методу. k { 1 , 2 , 3 , 4 , 5 } k = 2 k k = 1 k k = 2k=2k{1,2,3,4,5}k=2kk=1kk=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"
}

добре дякую за пояснення. Btw: Чи знаєте ви будь-яку іншу метрику кластера, як статистику пробілу? Я знайшов деякі, але не знаю, які з них зазвичай використовуються з k-засобами?
MikeHuber

+1. Дуже приємна демонстрація, і вражає те, що ви, здається, оцифрували фігуру ОП, щоб отримати ті самі дані.
амеба каже, що поверніть Моніку

3
@amoeba Я окомпонував очі на розсіювач і набрав координати саме так, як ви бачите тут (тобто цифри, що стосуються, були моїми пальцями :-)). Іноді найпростіший підхід є ефективним.
whuber

Чи можна використати статистику розриву для пошуку кількості кластерів в одному 1-d масиві числових значень?
користувач1971988

@ user1971988 Чому б не спробувати? Замініть xyв коді на xy <- xy[, 1, drop=FALSE](щоб перетворити його в масив ). Якщо ви не використовуєте , то врахуйте цей непродуманий експеримент: будь-який 1-d масив можна вважати масивом не змінюючи жодної відстані. Кластеризація останнього скупчить першу. ( x i ) ( x i , 0 )n×1R(xi)(xi,0)
whuber

9

Я думаю, що ви не розумієте нічого поганого у використанні статистики GAP. Я вважаю, що ви частково вводите в оману масштабом даних у візуалізації. Ви бачите два кластери, але насправді xнапрямок досить малий порівняно з yнапрямком. Виходячи з цього, ви могли б очікувати двох розширених кластерів. Тим не менш, схоже, що ваш режим варіації домінує над іншим. Оскільки статистика GAP передбачає нульову модель з одним компонентом ( ), а потім намагається відхилити цю модель для альтернативної з ; те, що ви спостерігаєте, це неможливість відхилити нуль. Зверніть увагу, що неможливість відхилити нульову гіпотезу не робить її істинноюК > 1K=1K>1. Методичний документ, що описує статистику GAP , доступний в Інтернеті, якщо ви хочете більше перевірити технічні характеристики.

Я запускаю вашу модель за допомогою Гауссової моделі сумішей (GMM - узагальнення значень , див. Цю нитку для отримання детальної інформації з цього питання). Правда, і в цьому випадку статистика GAP запропонувала єдиний кластер. BIC також запропонував єдиний кластер. AIC пропонує 4 кластери (!), Що є чіткою ознакою, яку ми починаємо переповнювати. Використовуваний зразок не надто великий; у вас 21 точка, де один режим дисперсії домінує над іншим. Це трохи розтягнення, щоб мати два 2-D кластери (тобто, помістити дві 2-D засоби та дві матриці коваріації) з лише 21 2-D балами. :) (У випадку -значень ваша матриця коваріації є більш структурованою (ви не дивитесь на коваріації), але я б не зосереджувався на цьому питанні.)2 × 2 kk2×2k

EDIT: Просто для повноти: @whuber показав, що два кластери видаються оптимальними для -меж, якщо один стандартизує його дані; критерій GAP, застосований для придатності GMM, також дасть як оптимальну кількість кластерів, якщо один стандартизує дані.K = 2kK=2


+1 Ви побачили потенційну проблему, уважно прочитавши сюжет: молодець! Посилання на папір Хасті є також підтримкою вашої відповіді.
whuber

@whuber: У нас була дискусія про ваги, чи не так? :)
usεr11852 повідомляє Відновити Моніку


Це був справді інший контекст; Я згадав про вас лише тому, що там було "ваги", і "ваги" тут.
usεr11852 повідомляє Відновити Моніку

0

У мене була така ж проблема, як і в оригінальному плакаті. Документація R в даний час говорить про те, що початковий і типовий параметр d.power = 1 був невірним і його слід замінити на d.power: "Типова, d.power = 1, відповідає" історичній "реалізації R, тоді як d.power = 2 відповідає тому, що запропонували Tibshirani та ін. Це було встановлено Хуаном Гонсалесом у 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.