Data la tra somma dei quadrati betweenss
e il vettore di entro somma dei quadrati per ogni cluster withinss
le formule sono questi:
totss = tot.withinss + betweenss
tot.withinss = sum(withinss)
Ad esempio, se ci fosse un solo cluster allora betweenss
sarebbe 0
, ci sarebbe solo un componente in withinss
e totss = tot.withinss = withinss
.
Per ulteriori chiarimenti, possiamo calcolare queste varie grandezze noi stessi date le assegnazioni di cluster e che possono aiutare a chiarire il loro significato. Considerare i dati x
e le assegnazioni di cluster cl$cluster
dall'esempio in help(kmeans)
. Definire la somma dei quadrati funzione come segue - questo sottrae la media di ogni colonna x da quella colonna e quindi somme dei quadrati di ogni elemento della matrice rimanente:
# or ss <- function(x) sum(apply(x, 2, function(x) x - mean(x))^2)
ss <- function(x) sum(scale(x, scale = FALSE)^2)
Poi abbiamo la seguente. Notare che cl$centers[cl$cluster, ]
sono i valori adattati, cioè è una matrice con una riga per punto tale che la riga ith è il centro del cluster a cui appartiene il punto ith.
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:
Dal momento che questa domanda è stato risposto, R ha aggiunto ulteriori simili kmeans
esempi (example(kmeans)
) e un nuovo metodo fitted.kmeans
e che oggi mostra come il metodo attrezzato si inserisce quanto sopra nei commenti finali le linee di codice.
fonte
2011-12-26 17:31:15
Ahum. Quindi * tot.withinss * dovrebbe essere il totale all'interno della variazione del cluster e * totss * dovrebbe essere la variazione complessiva dei dati. totale all'interno della variazione del cluster + ss dei centri del cluster. Destra? – Marius
Ho aggiunto ulteriori chiarimenti. –
Quindi, se si vuole scoprire il totale all'interno della variazione del cluster, allora * tot.whitinss * è quello. Grazie. – Marius