Eksperymentuję z klasyfikowaniem danych do grup. Jestem całkiem nowy w tym temacie i staram się zrozumieć wyniki niektórych analiz.
Korzystając z przykładów z Quick-R , R
sugerowanych jest kilka pakietów. Próbowałem użyć dwóch z tych pakietów ( fpc
używając kmeans
funkcji i mclust
). Jednym aspektem tej analizy, którego nie rozumiem, jest porównanie wyników.
# comparing 2 cluster solutions
library(fpc)
cluster.stats(d, fit1$cluster, fit2$cluster)
Przeczytałem odpowiednie części fpc
instrukcji i nadal nie jestem pewien, do czego powinienem dążyć. Na przykład jest to wynik porównania dwóch różnych metod grupowania:
$n
[1] 521
$cluster.number
[1] 4
$cluster.size
[1] 250 119 78 74
$diameter
[1] 5.278162 9.773658 16.460074 7.328020
$average.distance
[1] 1.632656 2.106422 3.461598 2.622574
$median.distance
[1] 1.562625 1.788113 2.763217 2.463826
$separation
[1] 0.2797048 0.3754188 0.2797048 0.3557264
$average.toother
[1] 3.442575 3.929158 4.068230 4.425910
$separation.matrix
[,1] [,2] [,3] [,4]
[1,] 0.0000000 0.3754188 0.2797048 0.3557264
[2,] 0.3754188 0.0000000 0.6299734 2.9020383
[3,] 0.2797048 0.6299734 0.0000000 0.6803704
[4,] 0.3557264 2.9020383 0.6803704 0.0000000
$average.between
[1] 3.865142
$average.within
[1] 1.894740
$n.between
[1] 91610
$n.within
[1] 43850
$within.cluster.ss
[1] 1785.935
$clus.avg.silwidths
1 2 3 4
0.42072895 0.31672350 0.01810699 0.23728253
$avg.silwidth
[1] 0.3106403
$g2
NULL
$g3
NULL
$pearsongamma
[1] 0.4869491
$dunn
[1] 0.01699292
$entropy
[1] 1.251134
$wb.ratio
[1] 0.4902123
$ch
[1] 178.9074
$corrected.rand
[1] 0.2046704
$vi
[1] 1.56189
Moim podstawowym pytaniem tutaj jest lepsze zrozumienie, jak interpretować wyniki tego porównania klastrów.
Wcześniej pytałem o efekt skalowania danych i obliczania macierzy odległości. Jednak odpowiedziała na to wyraźnie Maria Marianna i po prostu reorganizuję moje pytanie, aby podkreślić, że interesuje mnie interpretacja moich wyników, która jest porównaniem dwóch różnych algorytmów klastrowania.
Poprzednia część pytania : Czy w przypadku klastrowania należy zawsze skalować dane? Na przykład używam funkcji dist()
z mojego skalowanego zestawu danych jako danych wejściowych do cluster.stats()
funkcji, jednak nie do końca rozumiem, co się dzieje. Czytam o tym dist()
tutaj i stwierdzam, że:
ta funkcja oblicza i zwraca macierz odległości obliczoną przy użyciu określonej miary odległości do obliczenia odległości między wierszami macierzy danych.
źródło
Odpowiedzi:
Najpierw powiem wam, że nie wyjaśnię tutaj dokładnie wszystkich środków, ale dam wam pomysł, jak porównać, jak dobre są metody grupowania (załóżmy, że porównujemy 2 metody klastrowania z tym samym numerem klastrów).
Są to dwa najczęściej używane wskaźniki. Sprawdź te linki, aby zrozumieć, co oznaczają:
Aby lepiej zrozumieć powyższe dane, sprawdź to .
Następnie powinieneś przeczytać instrukcję obsługi biblioteki i funkcji, których używasz, aby zrozumieć, które miary reprezentują każdą z nich, a jeśli nie są uwzględnione, spróbuj znaleźć znaczenie dołączonej. Jednak nie zawracałbym sobie głowy i nie trzymałem się tych, które tu podałem.
Przejdźmy do zadanych pytań:
Funkcje odległości obliczają wszystkie odległości od jednego punktu (instancji) do drugiego. Najczęstszą miarą odległości jest euklidesowa, więc załóżmy na przykład, że chcesz zmierzyć odległość od instancji 1 do instancji 2 (załóżmy, że dla uproszczenia masz tylko 2 instancje). Również załóżmy, że każdy przykład ma wartość 3
(x1, x2, x3)
, takI1=0.3, 0.2, 0.5
aI2=0.3, 0.3, 0.4
więc od odległości euklidesowej i I1 I2 to:sqrt((0.3-0.2)^2+(0.2-0.3)^2+(0.5-0.4)^2)=0.17
, a więc matrycę odległość spowoduje:Zauważ, że macierz odległości jest zawsze symetryczna.
Euklidesowa formuła odległości nie jest jedyną, która istnieje. Istnieje wiele innych odległości, które można wykorzystać do obliczenia tej macierzy. Sprawdź na przykład w Wikipedii Manhattain Distance i jak ją obliczyć. Na końcu strony Wikipedii dotyczącej odległości euklidesowej (gdzie można również sprawdzić jej wzór) można sprawdzić, jakie inne odległości istnieją.
źródło
Myślę, że najlepszą miarą jakości dla klastrowania jest założenie klastra, podane przez Seegera w Uczeniu się z danymi oznaczonymi i nieznakowanymi :
Tak, to sprowadza cały pomysł na centroidy i centra. W końcu są to raczej arbitralne pojęcia, jeśli pomyślisz o tym, że twoje dane mogą znajdować się w nieliniowym podfolderze przestrzeni, w której faktycznie działasz.
Możesz łatwo zbudować syntetyczny zestaw danych, w którym rozkładają się modele mieszanin. Np ten jeden: .
Krótko mówiąc: mierzę jakość algorytmu klastrowania w sposób minimaksowy. Najlepszy algorytm grupowania to taki, który minimalizuje maksymalną odległość punktu do najbliższego sąsiada tego samego gromady, a maksymalizuje minimalną odległość punktu do najbliższego sąsiada od innego gromady.
Możesz być także zainteresowany Algorytmem teorii informacji nieparametrycznych .
źródło
x<-rnorm(N);rnorm(N)->y
) podzielona na 3 części przez r (z jedną usuniętą).