2011-12-26 16 views
13

sto usando le Kmeans() in R ed ero curioso qual è la differenza tra la totss e tot.withinss attributi dell'oggetto restituito. Dalla documentazione sembrano restituire la stessa cosa, ma applicata sul mio set di dati il ​​valore di totss è 66213,63 e per tot.withinss è 6893.50. Per favore fatemi sapere se avete familiarità con i dettagli di mroe. Grazie!Kmeans restituiscono valore R

Marius.

risposta

19

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.

+0

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

+0

Ho aggiunto ulteriori chiarimenti. –

+0

Quindi, se si vuole scoprire il totale all'interno della variazione del cluster, allora * tot.whitinss * è quello. Grazie. – Marius

0

penso che hai trovato un errore nella documentazione ... che dice:

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). 

Se si utilizza il set di dati campione nell'esempio pagina di aiuto:

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

Credo che qualcuno dovrebbe scrivi una richiesta alla mailing list di r-devel chiedendo che la pagina di aiuto sia rivista. Sono disposto a farlo se non vuoi.

+0

Grazie per la rapida reazione. Stavo pensando lo stesso .. che c'è un errore nel doc .. purtroppo non è l'unico come ho visto. Puoi scrivere se vuoi una richiesta a loro. Il punto principale è che sto anche utilizzando un algoritmo di k-means genetico e volevo confrontare i risultati. Ora non so quale dovrebbe essere preso in considerazione .. – Marius

+0

Quale fare con cosa? (Ci sono troppi pronomi e aggettivi, non sufficienti nomi nella tua dichiarazione di confusione o nella mia contro-domanda.) –

+0

:/se non c'è sintassi del linguaggio di programmazione in questione, scegli la grammatica? Volevo confrontare i risultati dell'algoritmo di k-means genetico con i risultati della funzione kmea in R. Il punto principale è minimizzare la variazione all'interno del cluster. L'oggetto restituito kmea in R ha 2 attributi definiti uguali nel documento.C'è solo un risultato da confrontare. – Marius

Problemi correlati