2011-11-04 18 views
6

Mam prosty dwuwymiarowy zbiór danych, który chcę skupić w sposób aglomeracyjny (nie znając optymalnej liczby klastrów do użycia). Jedynym sposobem, w jaki udało mi się pomyślnie zebrać dane, jest nadanie tej funkcji wartości "maksimum".Aglomeracyjne klastrowanie w Matlab

Dla uproszczenia załóżmy, że jest to mój zestaw danych:

X=[ 1,1; 
    1,2; 
    2,2; 
    2,1; 
    5,4; 
    5,5; 
    6,5; 
    6,4 ]; 

Naturalnie chciałbym te dane do formularza 2 klastry. Rozumiem, że gdybym wiedział to, mogę tylko powiedzieć:

T = clusterdata(X,'maxclust',2); 

i znaleźć co wskazuje spadek w każdym klastrze mógłbym powiedzieć:

cluster_1 = X(T==1, :); 

i

cluster_2 = X(T==2, :); 

ale bez wiedząc, że 2 klastry będą optymalne dla tego zbioru danych, w jaki sposób mogę połączyć te dane w klastry?

Dzięki

+0

podobne pytanie: [Jakie kryteria zatrzymania aglomeracyjnego hierarchicznego grupowania są stosowane w praktyce?] (Http://stats.stackexchange.com/q/2597) – Amro

+0

@Amro Ładne linki! –

Odpowiedz

5

Istotą tej metody jest to, że reprezentuje klastry znajdujące się w hierarchii, i to do ciebie, aby ustalić, ile dane chcesz uzyskać ..

agglomerative dendogram

Pomyśl o tym, że ma poziomą linię przecinającą dendrogram, która porusza się począwszy od 0 (każdy punkt jest jej własnym klastrem) aż do maksymalnej wartości (wszystkie punkty w jednym klastrze). Możesz:

  • przystanek po osiągnięciu określonej liczby klastrów (example)
  • ręcznie umieścić go otrzymać pewną wartość wysokości (example)
  • wybrać go umieścić gdzie klastry są zbyt daleko od siebie w zależności kryterium odległości (czyli nie jest to duży skok do następnego poziomu) (example)

można to zrobić albo przez wykorzystując 'maxclust' lub 'cutoff' argumenty Funkcje CLUSTER/CLUSTERDATA

+0

Świetne wyjaśnienie, Amro. Zauważyłem, że jest to temat, z którym masz duże doświadczenie. Te linki były bardzo przydatne dla mojej aplikacji. Dzięki! –

5

Aby wybrać optymalną liczbę klastrów, jedno wspólne podejście jest, aby wykres podobny do Plot piargi. Następnie poszukujesz "łokcia" w działce, a to jest liczba wybranych przez ciebie gromad. Dla kryterium Tutaj będziemy używać wewnątrz klastrem suma-of-kwadraty:

function wss = plotScree(X, n) 

wss = zeros(1, n); 
wss(1) = (size(X, 1)-1) * sum(var(X, [], 1)); 
for i=2:n 
    T = clusterdata(X,'maxclust',i); 
    wss(i) = sum((grpstats(T, T, 'numel')-1) .* sum(grpstats(X, T, 'var'), 2)); 
end 
hold on 
plot(wss) 
plot(wss, '.') 
xlabel('Number of clusters') 
ylabel('Within-cluster sum-of-squares') 
>> plotScree(X, 5) 

ans = 

    54.0000 4.0000 3.3333 2.5000 2.0000 

enter image description here

+0

suma kwadratów wewnątrz klastra może nie zawsze być dobrym kryterium, zwłaszcza, że ​​hierarchiczne grupowanie domyślnie używa metody pojedynczego łączenia, która z definicji wymaga jedynie separacji (między klastrami) i nie dba o zwartość lub saldo (wewnątrz klastra) – Amro

+0

Dzięki za ten kod. Było to szczególnie przydatne w połączeniu z metodą użytą w trzecim łączu udostępnianym przez Amro. –

-1

Możesz użyć pakietu NbClust w R, który używa 30 wskaźników do określenia optymalnej liczby klastrów w zestawie danych.