Red de conocimiento informático - Problemas con los teléfonos móviles - Análisis de conglomerados de notas de aprendizaje del lenguaje R

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

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)

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)