Análisis de conglomerados de notas de aprendizaje del lenguaje R
Análisis de clústeres de notas de aprendizaje del lenguaje R
Paquetes necesarios para utilizar el clúster k-means:
factoextra
¿clúster?
biblioteca(factoextra)
biblioteca(clúster)l?
#Preparación de datos
Utilice el conjunto de datos R integrado USArrests
#cargar el conjunto de datos
datos("USArrests")
#eliminar cualquier valor faltante (es decir, valores NA para no disponibles)
#Eso podría estar presente en los datos
USArrests <- na.omit(USArrests)#ver las primeras 6 filas de los datos
head(USArrests, n= 6 )?
En este conjunto de datos, las columnas son variables y las filas son observaciones
Antes de agrupar, primero podemos realizar algunas comprobaciones de datos necesarias, es decir, estadísticas descriptivas de datos. como valor promedio, desviación estándar, etc.
desc_stats <- data.frame( Min=apply(USArrests, 2, min),#minimum
Med=apply(USArrests, 2, mediana), #mediana
Media=aplicar(USAarrests, 2, media),#media
SD=apply(USAarrests, 2, sd),#Desviación estándar p>
Max=apply(USArrests, 2, max)#maximum
)
desc_stats <- round(desc_stats, 1)#Retener un decimal head(desc_stats)
La estandarización es necesaria cuando las variables tienen grandes variaciones y medias
df <- scale(USArrests)
#Evaluación de conglomerados de datos
Uso get_clust_tendency ()Calcular estadística de Hopkins
res <- get_clust_tendency(df, 40, graph = TRUE)
res$hopkins_stat
## [1] 0.3440875
#Visualizar la matriz de disimilitud
res$plot
El valor de la estadística de Hopkins es <0,5, lo que indica que los datos son altamente agregables. Además, en la figura también se puede ver que los datos se pueden agregar.
#Número estimado de clústeres agregados
Dado que la agrupación de k-means requiere especificar la cantidad de clústeres que se generarán, usaremos la función clusGap() para calcular el número de agrupación óptimo. La función fviz_gap_stat() se utiliza para la visualización.
set.seed(123)
## Calcular la estadística de brecha
gap_stat <- clusGap(df, FUN = kmeans, nstart = 25, K. max = 10, B = 500)
# Trazar el resultado
fviz_gap_stat(gap_stat)
La figura muestra que la mejor agrupación se realiza en cuatro categorías (k = 4)
#Realizar agrupación
set.seed(123)
km.res <- kmeans(df, 4, nstart = 25) p>
head(km.res$cluster, 20)
# Visualizar clusters usando factoextra
fviz_cluster(km.res, USArrests)
# Verifique el gráfico de silueta del grupo
Recuerde que la silueta mide (SiSi) qué tan similar es un objeto ii a los otros objetos en su propio grupo versus los del grupo vecino. Los valores de SiSi varían de 1 a. - 1:
Un valor de SiSi cercano a 1 indica que el objeto está bien agrupado. En otras palabras, el objeto ii es similar a los demás objetos de su grupo.
Un valor de SiSi cercano a -1 indica que el objeto está mal agrupado y que la asignación a algún otro grupo probablemente mejoraría los resultados generales.
sil <- silueta(km.res$cluster, dist( df))
rownames(sil) <- rownames(USArrests)
head(sil[, 1:3])
#Visualize
fviz_silhouette(sil)
Se puede ver en la figura que hay valores negativos, y puedes determinar qué valor de observación es a través de la función silueta()
neg_sil_index <- which(sil[, "sil_width"] < 0)
sil[neg_sil_index, , drop = FALSE]
## ?cluster vecino sil_width
## Missouri 3 ?2 -0.07318144
#eclust(): análisis de conglomerados mejorado
En comparación con otros paquetes de análisis de conglomerados, eclust() tiene las siguientes ventajas:
Simplifica el flujo de trabajo del análisis de conglomerados
Se puede utilizar para calcular el agrupamiento jerárquico y el agrupamiento de particiones
eclust() calcula automáticamente el número óptimo de clústeres.
Proporciona automáticamente un gráfico de silueta
Se puede combinar con ggplot2 para dibujar hermosos gráficos
#K-means clustering usando eclust()
# Calcular k-means
res.km <- eclust(df, "kmeans")
# Gráfico de estadística de brecha
fviz_gap_stat(res.km$gap_stat )
# Silhouette plotfviz_silhouette(res.km)
## tamaño del clúster ave.sil.width
## 1 1 13 ?0.31
## 2 2 29 ?0.38
## 3 3 ?8 ?0.39
#Agrupación jerárquica usando eclust()
# Agrupación jerárquica mejorada
res.hc <- eclust(df, "hclust") # calcular hclust
fviz_dend(res.hc, rect = TRUE) # dendrogam
# El siguiente código R genera un gráfico de silueta y un gráfico de dispersión de agrupamiento jerárquico.
fviz_silhouette(res.hc) # gráfico de silueta
## ? tamaño del grupo ave.sil.width
## 1 1 19 ?0.26
## 2 2 19 ?0.28
## 3 3 12 ?0.43
fviz_cluster(res.hc) # diagrama de dispersión
#Infos
Este análisis se ha realizado utilizando el software R (R versión 3.3.2)