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:
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).
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 .
źródło
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.a b [ k , 3 ] > c gp Tab [(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)
źródło