2011-12-26 9 views
13

mi stosując kmeans() funkcję R i ciekawy był co stanowi różnicę pomiędzy totss i tot.withinss atrybutów zwróconej obiektu. Z dokumentacji wynika, że ​​zwracają to samo, ale zastosowane na moim zestawie danych, wartość dybli wynosi 66213.63, a dla tot.withinss to 6893.50. Proszę dać mi znać, jeśli znasz szczegóły mroe. Dziękujemy!kmeans zwraca wartość w R

Marius.

Odpowiedz

19

Biorąc pod uwagę między sumą kwadratów betweenss i wektora ciągu sumy kwadratów dla każdego klastra withinss wzory są takie:

totss = tot.withinss + betweenss 
tot.withinss = sum(withinss) 

Na przykład, jeśli były tylko jeden klaster następnie betweenss byłoby 0, byłby tylko jeden składnik w withinss i totss = tot.withinss = withinss.

W celu uzyskania dalszych wyjaśnień, możemy sami obliczyć te różne ilości, biorąc pod uwagę przypisania do klastrów i które mogą pomóc w wyjaśnieniu ich znaczeń. Rozważmy dane x i przypisania klastra cl$cluster z przykładu w help(kmeans). Zdefiniowania funkcji sumy kwadratów w następujący sposób - jest odejmuje średnią każdej kolumny x od tej kolumny, a następnie sumy kwadratów każdej elementu pozostałej matrycy:

# or ss <- function(x) sum(apply(x, 2, function(x) x - mean(x))^2) 
ss <- function(x) sum(scale(x, scale = FALSE)^2) 

Następnie mają następujące. Zauważ, że cl$centers[cl$cluster, ] są dopasowanymi wartościami, tj. Są macierzami z jednym rzędem na punkt tak, że i-ty wiersz jest środkiem gromady, do której należy ten punkt.

example(kmeans) # create x and cl 

betweenss <- ss(cl$centers[cl$cluster,]) # or ss(fitted(cl)) 

withinss <- sapply(split(as.data.frame(x), cl$cluster), ss) 
tot.withinss <- sum(withinss) # or resid <- x - fitted(cl); ss(resid) 

totss <- ss(x) # or tot.withinss + betweenss 

cat("totss:", totss, "tot.withinss:", tot.withinss, 
    "betweenss:", betweenss, "\n") 

# compare above to: 

str(cl) 

EDIT:

Ponieważ kwestia ta została wysłuchana, R dodała dodatkowe podobnych kmeans przykłady (example(kmeans)) i nowa metoda fitted.kmeans i możemy teraz pokazać w jaki sposób zamontowany pasuje do powyższego w komentarzach spływu linie kodu.

+0

Ahum. Zatem wartość * tot.withinss * powinna być sumą w obrębie zmienności klastra, a * totss * powinna być całkowitą zmiennością danych. ogółem w obrębie zmienności klastra + ss centrów klastra. Dobrze? – Marius

+0

Dodałem trochę dalszych wyjaśnień. –

+0

Tak więc, jeśli chcemy poznać sumę w wariancie klastra, to * tot.whitinss * jest tą. Dziękuję Ci. – Marius

0

Chyba masz zauważony błąd w dokumentacji ... który mówi:

withinss  The within-cluster sum of squares for each cluster. 
totss  The total within-cluster sum of squares. 
tot.withinss  Total within-cluster sum of squares, i.e., sum(withinss). 

Jeśli używasz zestawu danych próbki w przykładzie stronie Pomoc:

> kmeans(x,2)$tot.withinss 
[1] 15.49669 
> kmeans(x,2)$totss 
[1] 65.92628 
> kmeans(x,2)$withinss 
[1] 7.450607 8.046079 

Myślę, że ktoś powinien napisz prośbę do listy dyskusyjnej r-devel z prośbą o poprawienie strony pomocy. Jestem gotów to zrobić, jeśli nie chcesz.

+0

Dzięki za szybką reakcję. Myślałem tak samo .. że jest błąd w dokumencie ... niestety nie jedynym, jaki widziałem. Możesz napisać, jeśli chcesz otrzymać do nich prośbę. Głównym punktem jest to, że używam również genetycznego algorytmu k-średnich i chciałem porównać wyniki. Teraz nie wiem, który powinien być tym, który należy wziąć pod uwagę .. – Marius

+0

Z którym to zrobić? (Jest zbyt dużo zaimków i przymiotników, niewystarczająco dużo rzeczowników w twoim stwierdzeniu pomyłki lub w moim kontrpropieku.) –

+0

:/jeśli nie ma składni języka programowania związanego z gramatyką? Chciałem porównać wyniki genetycznego algorytmu k-średnich z wynikami funkcji kmeans w R. Głównym celem jest zminimalizowanie zmienności wewnątrz klastra. Zwrócony obiekt kmeans w R ma 2 atrybuty zdefiniowane tak samo w dokumencie.Jest tylko jeden wynik, który należy porównać. – Marius

Powiązane problemy