Вибір кластерів для k-означає: 1 випадок кластера


9

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

Хтось знає про техніку порівняння 1 і 2 випадків кластеру для kmeans?

Відповіді:


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, де тест "провалюється", тобто статистика розриву значно зменшується. Цикл вище буде надрукувати такий ак, однак просто складання cgap дає вам наступну фігуру:
введіть тут опис зображення Подивіться, як є значне занурення в проміжок від k = 1 до k = 2, що означає, що насправді немає кластерів (тобто 1 кластер).


як зробити те ж саме для ієрархічної кластеризації з одним зв’язком? Чи можете ви пояснити FUN аргумент 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-означає: метод додаткового кластеризації для оцінки кількості кластерів , NIPS 2012.

Ідея полягає у використанні статистичного тестування гіпотез щодо однозначності на векторах, що містять подібність / відстань між однією точкою та рештою точок множини. Тестування проводиться за допомогою тесту Hartigan-Hartigan dip , Енн. Статист. 13 (1): 70-84.

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

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

Тут ви можете знайти якийсь код у Matlab .


0

Припустимо, я розглядаю той самий приклад,

бібліотека (кластер) cgap <- clusGap (транзит, FUN = kmeans, K.max = kmax, B = 100) для (k in 1: (kmax-1)) {if (cgap Tab [(k + 1), 3] -cgap $ Tab [(k + 1), 4]) {print (k)}; перерва; }Tab[k,3]>cgap

Як я можу підмножити елементи кластерів, що відповідають кращому рішенню кластеризації, базуючись на статистиці максимального розриву? Так що я можу використовувати його для подальшого аналізу кожного кластеру.

Я знаю, що існує команда під назвою підмножина. Проблеми з цією командою не виникають, коли ми задали потрібну кількість кластерів. Але як підмножити його, коли ми хочемо підмножитися на основі оптимального k, отриманого за допомогою розриву (коротше, підмножини елементів кластерів, якщо є цикл)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.