Ich habe Schwierigkeiten, einen oder zwei Aspekte des Cluster-Pakets zu verstehen. Ich verfolge das Beispiel von Quick-R genau, verstehe aber einen oder zwei Aspekte der Analyse nicht. Ich habe den Code eingefügt, den ich für dieses spezielle Beispiel verwende.
## 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")
Dann standardisiere ich die Variablen:
# 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)
Meine Frage ist, wie kann das Diagramm, das die Anzahl der Cluster ( Q1
in meinem Code markiert ) zeigt, mit den tatsächlichen Werten (Clusternummer und Variablenname) in Beziehung gesetzt werden?
Update: Ich verstehe jetzt, dass die clusplot()
Funktion ein bivariates Diagramm mit PCA1 und PCA2 ist. Ich verstehe jedoch die Verbindung zwischen den PCA-Komponenten und den Clustergruppen nicht. Welche Beziehung besteht zwischen den PCA-Werten und den Clustergruppen? Ich habe an anderer Stelle über die Verbindung zwischen kmeans und PCA gelesen, aber ich verstehe immer noch nicht, wie sie in demselben bivariaten Diagramm angezeigt werden können.
quelle
Antworten:
Ich habe Frage 1 nicht vollständig verstanden, aber ich werde versuchen, eine Antwort zu finden. Das Diagramm von Q1 zeigt, wie sich die innere Summe der Quadrate (wss) ändert, wenn sich die Clusternummer ändert. Bei dieser Art von Plots müssen Sie nach den Knicken im Diagramm suchen. Ein Knick bei 5 zeigt an, dass es eine gute Idee ist, 5 Cluster zu verwenden.
WSS hat eine Beziehung zu Ihren Variablen im folgenden Sinne, die Formel für WSS lautet
Dabei ist der Mittelwert für Cluster und die te Beobachtung. Wir bezeichnen Cluster j als . WSS wird manchmal als "wie ähnlich sind die Punkte in jedem Cluster" interpretiert. Diese Ähnlichkeit bezieht sich auf die Variablen. j x i i C jμj j xi i Cj
Die Antwort auf Frage 2 lautet: Was Sie tatsächlich in der sehen,
clusplot()
ist die Darstellung Ihrer Beobachtungen in der Hauptebene. Diese Funktion berechnet die Hauptkomponentenbewertung für jede Ihrer Beobachtungen, zeichnet diese Bewertungen auf und färbt sie nach Clustern.Die Hauptkomponentenanalyse (PCA) ist eine Technik zur Dimensionsreduzierung. Es "fasst" die Informationen aller Variablen in ein paar "neuen" Variablen zusammen, die als Komponenten bezeichnet werden. Jede Komponente ist dafür verantwortlich, einen bestimmten Prozentsatz der Gesamtvariabilität zu erklären. Im Beispiel lesen Sie "Diese beiden Komponenten erklären 73,95% der Gesamtvariabilität".
Die Funktion
clusplot()
wird verwendet, um die Effektivität von Clustering zu identifizieren. Wenn Sie ein erfolgreiches Clustering haben, werden Sie feststellen, dass die Cluster in der Hauptebene klar voneinander getrennt sind. Auf der anderen Seite werden die Cluster in der Hauptebene zusammengeführt, wenn das Clustering nicht erfolgreich ist.Weitere Informationen zur Hauptkomponentenanalyse finden Sie im Wiki. Wenn Sie ein Buch möchten, das ich Modern Multivariate Techniques von Izenmann vorschlage, finden Sie dort PCA und k-means.
Hoffe das hilft :)
quelle
clusplot()
Funktion. Welche Beziehung besteht zwischen den PCA-Werten und den Clustergruppen? Ich habe an anderer Stelle über die Verbindung zwischen kmeans und PCA gelesen, aber ich verstehe immer noch nicht, wie sie in demselben bivariaten Diagramm angezeigt werden können. (Vielleicht sollte dies eine neue Frage an sich sein).mydata
, das sehen Sie tatsächlich auf dem Plot. Die Form der Punkte wird mitfit$cluster
dem zweiten Parameter von aufgetragenclusplot()
. Vielleicht sollten Sie sich PCA genauer ansehen. Lassen Sie mich wissen, ob dies Ihnen geholfen hat oder ob Sie weitere Referenzen haben.fit$cluster
mit den PCA "Koordinaten" zusammen? Ich glaube, ich verstehe, wie PCA funktioniert, aber so wie ich es verstehe, kann nicht jede Komponente mit Variablen aus den Originaldaten erklärt werden (es handelt sich vielmehr um eine lineare Kombination der Rohdaten), weshalb ich nicht verstehe, wie es sein kann im Zusammenhang mit den Clustern.fit$cluster
hat nichts mit PCA zu tun. Sieclusplot()
zeichnen die Punkte mit den "neuen" Koordinaten und beschriften sie mitfit$cluster
. Ich habe '+' für Cluster 3, 'o' für Cluster 1 und ein Dreieck für Cluster 2. Die Funktionclusplot()
ist nützlich, um das Clustering zu visualisieren.fit$cluster
:)