J'ai du mal à comprendre un ou deux aspects du package de cluster. Je suis de près l'exemple de Quick-R , mais je ne comprends pas un ou deux aspects de l'analyse. J'ai inclus le code que j'utilise pour cet exemple particulier.
## 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")
Ensuite, je standardise les variables:
# 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)
Ma question est, comment le graphique qui montre le nombre de clusters (marqué Q1
dans mon code) peut-il être lié aux valeurs réelles (numéro de cluster et nom de variable)?
Mise à jour: je comprends maintenant que la clusplot()
fonction est un tracé bivarié, avec PCA1 et PCA2. Cependant, je ne comprends pas le lien entre les composants PCA et les groupes de clusters. Quelle est la relation entre les valeurs PCA et les groupes de clustering? J'ai lu ailleurs sur le lien entre kmeans et PCA, mais je ne comprends toujours pas comment ils peuvent être affichés sur le même graphique bivarié.
la source
Réponses:
Je n'ai pas complètement saisi la question 1, mais je vais tenter une réponse. Le tracé de Q1 montre comment la somme intérieure des carrés (wss) change à mesure que le numéro de cluster change. Dans ce type de graphique, vous devez rechercher les plis dans le graphique, un pli à 5 indique que c'est une bonne idée d'utiliser 5 clusters.
WSS a une relation avec vos variables dans le sens suivant, la formule pour WSS est
La réponse à la question 2 est la suivante. Ce que vous regardez réellement dans le
clusplot()
graphique, c'est l'intrigue de vos observations dans le plan principal. Cette fonction consiste à calculer le score de la composante principale pour chacune de vos observations, à tracer ces scores et à les colorier par grappe.L'analyse en composantes principales (ACP) est une technique de réduction de dimension; il "résume" les informations de toutes les variables en deux "nouvelles" variables appelées composants. Chaque composante est responsable d'expliquer un certain pourcentage de la variabilité totale. Dans l'exemple, vous lisez "Ces deux composantes expliquent 73,95% de la variabilité totale".
La fonction
clusplot()
est utilisée pour identifier l'efficacité du clustering. Dans le cas où vous avez réussi un clustering, vous verrez que les clusters sont clairement séparés dans le plan principal. En revanche, vous verrez les clusters fusionnés dans le plan principal lorsque le clustering échoue.Pour plus d'informations sur l'analyse des composants principaux, vous pouvez lire le wiki. si vous voulez un livre que je suggère Modern Multivariate Techniques by Izenmann, vous y trouverez PCA et k-means.
J'espère que cela t'aides :)
la source
clusplot()
fonction. Quelle est la relation entre les valeurs PCA et les groupes de clustering? J'ai lu ailleurs sur le lien entre kmeans et PCA, mais je ne comprends toujours pas comment ils peuvent être affichés sur le même graphique bivarié. (Peut-être que cela devrait être une nouvelle question en soi).mydata
, c'est ce que vous voyez réellement sur l'intrigue. La forme des points est tracée à l'aidefit$cluster
du deuxième paramètre declusplot()
. Vous devriez peut-être approfondir votre connaissance de l'ACP. Faites-moi savoir si cela vous a aidé ou si vous avez d'autres références.fit$cluster
lien avec les "coordonnées" PCA? Je pense que je comprends le fonctionnement de l'ACP, mais si je comprends bien, chaque composant ne peut pas être expliqué en utilisant des variables des données d'origine (c'est plutôt une combinaison linéaire des données brutes), c'est pourquoi je ne comprends pas comment il peut être liés aux clusters.fit$cluster
n'a aucun rapport avec PCA. Ce quiclusplot()
fait est de tracer les points en utilisant les "nouvelles" coordonnées et de les étiqueter en utilisantfit$cluster
. J'ai obtenu «+» pour le cluster 3, «o» pour le cluster 1 et un triangle pour le cluster 2. La fonctionclusplot()
est utile pour visualiser le clustering.fit$cluster
:)