Wybór klastrów dla k-średnich: przypadek 1 klastra

9

Czy ktoś zna dobrą metodę ustalenia, czy klastrowanie przy użyciu kmeans jest w ogóle odpowiednie? To znaczy, co jeśli twoja próbka jest rzeczywiście jednorodna? Wiem, że model mieszanki (za pośrednictwem mclust w R) zapewni statystyki dopasowania dla przypadku klastra 1: k, ale wydaje się, że wszystkie techniki oceny kmeans wymagają co najmniej 2 klastrów.

Czy ktoś zna technikę porównywania przypadków skupień 1 i 2 dla kmeans?

dmartin
źródło

Odpowiedzi:

10

Statystyka luk jest świetnym sposobem na to; Tibshirani, Hastie & Walther (2001).

http://stat.ethz.ch/R-manual/R-devel/library/cluster/html/clusGap.html - Odpowiedni pakiet R.

Chodzi o to, że wykonuje sekwencyjny test hipotezy grupowania danych dla K = 1,2,3, ... w porównaniu z zerową hipotezą losowego szumu, która jest równoważna jednemu klasterowi. Jego szczególną siłą jest to, że daje wiarygodne wskazanie, czy K = 1, tj. Czy nie ma klastrów.

Oto przykład, jak sprawdzałem kilka danych astronomicznych kilka dni temu - a mianowicie z tranzytowej ankiety egzoplanetowej. Chciałem wiedzieć, jakie są dowody dla (wypukłych) klastrów. Moje dane to „tranzyt”

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;
}

Ze statystyką luki szukasz pierwszej wartości K, w której test „kończy się niepowodzeniem”, tj. Statystyki luki znacznie spadają. Pętla powyżej wypisuje taki ak, jednak zwykłe wykreślenie cgap daje następujący rysunek:
wprowadź opis zdjęcia tutaj Zobacz, jak znaczny jest spadek w Gap od k = 1 do k = 2, co oznacza, że ​​w rzeczywistości nie ma klastrów (tj. 1 klaster).

Jacek
źródło
jak zrobić to samo dla hierarchicznego grupowania z pojedynczym łączeniem? Czy możesz wyjaśnić FUN argument clusGap? Uruchomiłem poniższy wiersz dla hierarchicznego kmax = 20 cgap <- clusGap (klaster_funkcji_bazy [, 2: ncol (klaster_funkcji_bazy)], FUN = hclust, K.max = kmax, B = 100). Ale daje błąd z informacją o błędzie w klastrze FUNcluster (X, kk, ...): nieprawidłowa metoda grupowania 2
GeorgeOfTheRF,
4

Możesz wypróbować również nowszą metodę: A. Kalogeratos i A.Likas, Dip-znaczy: przyrostowa metoda klastrowania do szacowania liczby klastrów , NIPS 2012.

Chodzi o to, by zastosować statystyczne testowanie hipotez na niejednorodność na wektorach zawierających podobieństwo / odległość między jednym punktem a resztą punktów zbioru. Testy przeprowadza się za pomocą testu zanurzeniowego Hartigan-Hartigan , Ann. Statystyk. 13 (1): 70–84.

Metoda rozpoczyna się od wszystkich zestawów danych jako jednego klastra i przyrostowo dzieli je, dopóki hipoteza o jednomodalności zostanie odrzucona (tzn. Istnieje więcej niż jeden klaster).

Zatem ta metoda wskazywałaby, czy w danych jest więcej niż jeden klaster (twoje pytanie), ale może również zapewnić ostateczne grupowanie.

Tutaj możesz znaleźć kod w Matlabie .

argyris
źródło
0

Załóżmy, że rozważam ten sam przykład,

biblioteka (klaster) cgap <- clusGap (tranzyt, FUN = kmeans, K.max = kmax, B = 100) dla (k w 1: (kmax-1)) {if (cgapT.zab[k,3)]>dosolzapTab [(k + 1), 3] -cgap $ Tab [(k + 1), 4]) {print (k)}; złamać; }

Jak mogę podzielić elementy klastrów odpowiadające najlepszemu rozwiązaniu klastrowemu w oparciu o statystyki maksymalnej przerwy? Tak, że mogę go użyć do dalszej analizy każdego z klastrów.

Wiem, że istnieje polecenie o nazwie podzbiór. Nie ma żadnych problemów z użyciem tego polecenia, gdy podaliśmy liczbę klastrów, które chcemy. Ale jak go rozdzielić, gdy chcemy go rozdzielić na podstawie optymalnej wartości k uzyskanej przy użyciu przerwy (w skrócie, podzbiór elementów klastrów, jeśli istnieje pętla)

Tharang
źródło