Utilizzo del pacchetto di statistiche in R per il raggruppamento dei kmean


10

Ho difficoltà a comprendere uno o due aspetti del pacchetto cluster. Sto seguendo da vicino l'esempio di Quick-R , ma non capisco uno o due aspetti dell'analisi. Ho incluso il codice che sto usando per questo esempio particolare.

## Libraries
library(stats)
library(fpc) 

## Data
mydata = structure(list(a = c(461.4210925, 1549.524107, 936.42856, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131.4349206, 0, 762.6110846, 
3837.850406), b = c(19578.64174, 2233.308842, 4714.514274, 0, 
2760.510002, 1225.392118, 3706.428246, 2693.353714, 2674.126613, 
592.7384164, 1820.976961, 1318.654162, 1075.854792, 1211.248996, 
1851.363623, 3245.540062, 1711.817955, 2127.285272, 2186.671242
), c = c(1101.899095, 3.166506463, 0, 0, 0, 1130.890295, 0, 654.5054857, 
100.9491289, 0, 0, 0, 0, 0, 789.091922, 0, 0, 0, 0), d = c(33184.53871, 
11777.47447, 15961.71874, 10951.32402, 12840.14983, 13305.26424, 
12193.16597, 14873.26461, 11129.10269, 11642.93146, 9684.238583, 
15946.48195, 11025.08607, 11686.32213, 10608.82649, 8635.844964, 
10837.96219, 10772.53223, 14844.76478), e = c(13252.50358, 2509.5037, 
1418.364947, 2217.952853, 166.92007, 3585.488983, 1776.410835, 
3445.14319, 1675.722506, 1902.396338, 945.5376228, 1205.456943, 
2048.880329, 2883.497101, 1253.020175, 1507.442736, 0, 1686.548559, 
5662.704559), f = c(44.24828759, 0, 485.9617601, 372.108855, 
0, 509.4916263, 0, 0, 0, 212.9541122, 80.62920455, 0, 0, 30.16525587, 
135.0501384, 68.38023073, 0, 21.9317122, 65.09052886), g = c(415.8909649, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 637.2629479, 0, 0, 
0), h = c(583.2213618, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0), i = c(68206.47387, 18072.97762, 23516.98828, 
13541.38572, 15767.5799, 19756.52726, 17676.00505, 21666.267, 
15579.90094, 14351.02033, 12531.38237, 18470.59306, 14149.82119, 
15811.23348, 14637.35235, 13588.64291, 12549.78014, 15370.90886, 
26597.08152)), .Names = c("a", "b", "c", "d", "e", "f", "g", 
"h", "i"), row.names = c(NA, -19L), class = "data.frame")

Quindi standardizzo le variabili:

# standardize variables
mydata <- scale(mydata) 

## K-means Clustering 

# Determine number of clusters
wss <- (nrow(mydata)-1)*sum(apply(mydata,2,var))
for (i in 2:15) wss[i] <- sum(kmeans(mydata, centers=i)$withinss)
# Q1
plot(1:15, wss, type="b", xlab="Number of Clusters",  ylab="Within groups sum of squares") 

# K-Means Cluster Analysis
fit <- kmeans(mydata, 3) # number of values in cluster solution

# get cluster means 
aggregate(mydata,by=list(fit$cluster),FUN=mean)

# append cluster assignment
mydata <- data.frame(mydata, cluster = fit$cluster)

# Cluster Plot against 1st 2 principal components - vary parameters for most readable graph
clusplot(mydata, fit$cluster, color=TRUE, shade=TRUE, labels=0, lines=0) # Q2

# Centroid Plot against 1st 2 discriminant functions
plotcluster(mydata, fit$cluster)

La mia domanda è: come può la trama che mostra il numero di cluster (indicato Q1nel mio codice) essere correlata ai valori effettivi (numero di cluster e nome della variabile)?

Aggiornamento: ora capisco che la clusplot()funzione è un diagramma bivariato, con PCA1 e PCA2. Tuttavia, non capisco il collegamento tra i componenti PCA e i gruppi di cluster. Qual è la relazione tra i valori di PCA e i gruppi di clustering? Ho letto altrove sul collegamento tra kmean e PCA, ma non capisco ancora come possano essere visualizzati sullo stesso grafico bivariato.


mi scuso se ho fatto troppe domande sul clustering negli ultimi giorni. Sto cercando di familiarizzare rapidamente con questo campo (ho anche pubblicato questa domanda su SO, stackoverflow.com/questions/4997870/… ma mi è stato suggerito di spostarlo qui)
Celenius

Va bene, questo non è TCS.SE (-;

# Determina il numero di cluster Potresti spiegare perché stiamo usando questa formula (mydata, 2, var) e perché 2:15?

Risposte:


8

Non ho capito completamente la domanda 1, ma cercherò una risposta. Il diagramma di Q1 mostra come la somma dei quadrati (wss) cambia al variare del numero di cluster. In questo tipo di grafici devi cercare i nodi nel grafico, un nodo a 5 indica che è una buona idea usare 5 cluster.

WSS ha una relazione con le variabili nel senso seguente, la formula per WSS è

jxiCj||xiμj||2

μjjxiiCj

La risposta alla domanda 2 è questa. Quello che stai effettivamente osservando clusplot()è la trama delle tue osservazioni sul piano principale. Ciò che questa funzione sta facendo è calcolare il punteggio del componente principale per ciascuna delle tue osservazioni, tracciare quei punteggi e colorare per gruppo.

L'analisi dei componenti principali (PCA) è una tecnica di riduzione dimensionale; "riassume" le informazioni di tutte le variabili in un paio di "nuove" variabili chiamate componenti. Ogni componente è responsabile della spiegazione di una certa percentuale della variabilità totale. Nell'esempio leggi "Questi due componenti spiegano il 73,95% della variabilità totale".

La funzione clusplot()viene utilizzata per identificare l'efficacia del clustering. Nel caso in cui il clustering abbia esito positivo, vedrai che i cluster sono chiaramente separati nel piano principale. D'altra parte, vedrai i cluster uniti nel piano principale quando il clustering non ha esito positivo.

Per ulteriori riferimenti sull'analisi dei componenti principali è possibile leggere wiki. se vuoi un libro ti suggerisco moderne tecniche multivariate di Izenmann, lì troverai PCA e k-medie.

Spero che sia di aiuto :)


1
La ringrazio per la risposta. Ho avuto un'ulteriore domanda sulla clusplot()funzione. Qual è la relazione tra i valori di PCA e i gruppi di clustering? Ho letto altrove sul collegamento tra kmean e PCA, ma ancora non capisco come possano essere visualizzati sullo stesso grafico bivariato. (Forse questa dovrebbe essere una nuova domanda in sé).
Celenius,

2
In realtà, i valori PCA e i gruppi di clustering sono indipendenti. PCA crea "nuove" coordinate per ogni osservazione mydata, questo è ciò che effettivamente vedi sulla trama. La forma dei punti viene tracciata usando fit$clusteril secondo parametro di clusplot(). Forse dovresti dare un'occhiata più approfondita al PCA. Fammi sapere se questo ti ha aiutato o se hai ulteriori riferimenti.
deps_stats,

1
Aiuta (nel senso che sto perfezionando il mio problema!). In che modo sono fit$clustercorrelate alle "coordinate" PCA? Penso di capire come funziona il PCA, ma come lo capisco, ogni Componente non può essere spiegato usando le variabili dei dati originali (piuttosto è una combinazione lineare dei dati grezzi), motivo per cui non capisco come possa essere in relazione ai cluster.
Celenius,

2
Hai quasi capito :) fit$clusternon è correlato a PCA. Quello che clusplot()fa è tracciare i punti usando le "nuove" coordinate ed etichettarle usando fit$cluster. Ho ottenuto '+' per il cluster 3, 'o' per il cluster 1 e un triangolo per il cluster 2. La funzione clusplot()è utile per visualizzare il clustering.
deps_stats,

1
Per "nuove" coordinate intendo PCA1 e PCA2. Hai ragione, sono completamente estranei a fit$cluster:)
deps_stats
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.