Agrupación de K-medias en R: ejemplo paso a paso

La agrupación en clústeres es una técnica de aprendizaje automático que intenta encontrar grupos de observaciones dentro de un conjunto de datos.

El objetivo es encontrar grupos de modo que las observaciones dentro de cada grupo sean bastante similares entre sí, mientras que las observaciones en diferentes grupos sean bastante diferentes entre sí.

La agrupación es una forma de aprendizaje no supervisado porque simplemente intentamos encontrar una estructura dentro de un conjunto de datos en lugar de predecir el valor de alguna variable de respuesta .

La agrupación en clústeres se utiliza a menudo en marketing cuando las empresas tienen acceso a información como:

  • Ingresos del hogar
  • Tamaño del hogar
  • Ocupación del jefe de hogar
  • Distancia del área urbana más cercana

Cuando esta información está disponible, la agrupación se puede utilizar para identificar hogares que son similares y pueden tener más probabilidades de comprar ciertos productos o responder mejor a cierto tipo de publicidad.

Una de las formas más comunes de agrupación en clústeres se conoce como agrupación de k-medias .

¿Qué es la agrupación de K-medias?

La agrupación en clústeres de K-medias es una técnica en la que colocamos cada observación en un conjunto de datos en uno de los K clústeres.

El objetivo final es tener K grupos en los que las observaciones dentro de cada grupo sean bastante similares entre sí, mientras que las observaciones en diferentes grupos son bastante diferentes entre sí.

En la práctica, utilizamos los siguientes pasos para realizar la agrupación en clústeres de K-medias:

1. Elegir un valor de K .

  • Primero, debemos decidir cuántos grupos nos gustaría identificar en los datos. A menudo, simplemente tenemos que probar varios valores diferentes para K y analizar los resultados para ver qué número de grupos parece tener más sentido para un problema dado.

2. Asigne aleatoriamente cada observación a un grupo inicial, de 1 a K.

3. Realice el siguiente procedimiento hasta que las asignaciones de clústeres dejen de cambiar.

  • Para cada uno de los K clústeres, calcule el centroide del clúster . Este es simplemente el vector de las p medias de características para las observaciones en el k- ésimo grupo.
  • Asigne cada observación al grupo cuyo centroide sea el más cercano. Aquí, el más cercano se define utilizando la distancia euclidiana .

Agrupación de K-medias en R

El siguiente tutorial proporciona un ejemplo paso a paso de cómo realizar la agrupación en clústeres de k-medias en R.

Paso 1: cargue los paquetes necesarios

Primero, cargaremos dos paquetes que contienen varias funciones útiles para la agrupación en clústeres de k-medias en R.

biblioteca (factoextra)
 biblioteca (clúster)

Paso 2: Cargue y prepare los datos

Para este ejemplo, usaremos el conjunto de datos USArrests integrado en R, que contiene el número de arrestos por cada 100,000 residentes en cada estado de EE. UU. En 1973 por asesinato , asalto y violación junto con el porcentaje de la población en cada estado que vive en áreas urbanas. , UrbanPop .

El siguiente código muestra cómo hacer lo siguiente:

  • Cargar el conjunto de datos de USArrests
  • Elimina las filas con valores faltantes
  • Escale cada variable en el conjunto de datos para tener una media de 0 y una desviación estándar de 1
#Cargar datos
df <- USArrests

# eliminar filas con valores perdidos
 df <- na. Omitir (df)

#escala cada variable para que tenga una media de 0 y una
 df de 1 df <- scale (df)

#ver las primeras seis filas del conjunto de datos
cabeza (df)

               Asesinato Asalto UrbanPop Violación
Alabama 1,24256408 0,7828393 -0,5209066 -0,003416473
Alaska 0.50786248 1.1068225 -1.2117642 2.484202941
Arizona 0.07163341 1.4788032 0.9989801 1.042878388
Arkansas 0,23234938 0,2308680 -1,0735927 -0,184916602
California 0.27826823 1.2628144 1.7589234 2.067820292
Colorado 0,02571456 0,3988593 0,8608085 1,864967207

Paso 3: Encuentre la cantidad óptima de clústeres

Para realizar la agrupación en clústeres de k-means en R, podemos usar la función kmeans () incorporada, que usa la siguiente sintaxis:

kmeans (datos, centros, nstart)

dónde:

  • data: Nombre del conjunto de datos.
  • centros: El número de conglomerados, denotado k .
  • nstart: el número de configuraciones iniciales. Debido a que es posible que diferentes clústeres de inicio inicial puedan dar lugar a resultados diferentes, se recomienda utilizar varias configuraciones iniciales diferentes. El algoritmo de k-medias encontrará las configuraciones iniciales que conducen a la variación más pequeña dentro del clúster.

Como no sabemos de antemano cuántos clústeres son óptimos, crearemos dos gráficos diferentes que pueden ayudarnos a decidir:

1. Número de conglomerados frente al total dentro de la suma de cuadrados

Primero, usaremos la función fviz_nbclust () para crear una gráfica del número de clústeres frente al total dentro de la suma de cuadrados:

fviz_nbclust (df, kmeans, método = " wss ")

Número óptimo de clústeres en clústeres de k-medias

Normalmente, cuando creamos este tipo de gráfico buscamos un «codo» donde la suma de cuadrados comienza a «doblarse» o nivelarse. Este suele ser el número óptimo de clústeres.

Para este gráfico, parece que hay un poco de codo o «curvatura» en k = 4 conglomerados.

2. Número de conglomerados frente a la estadística de brechas

Otra forma de determinar el número óptimo de conglomerados es utilizar una métrica conocida como estadística de brecha , que compara la variación intragrupo total para diferentes valores de k con sus valores esperados para una distribución sin conglomerados.

Podemos calcular la estadística de brechas para cada número de clústeres usando la función clusGap () del paquete de clústeres junto con un gráfico de clústeres frente a la estadística de brechas usando la función fviz_gap_stat () :

#calcular la estadística de brecha en función del número de clústeres
 gap_stat <- clusGap (df,
                    DIVERSIÓN = k significa,
                    nstart = 25,
                    K.max = 10,
                    B = 50)

# trazar el número de conglomerados frente a la estadística de
 brechas fviz_gap_stat (gap_stat)

Estadística de brecha para el número óptimo de conglomerados

En la gráfica podemos ver que la estadística de brecha es más alta en k = 4 conglomerados, lo que coincide con el método del codo que usamos anteriormente.

Paso 4: Realice la agrupación en clústeres de K-medias con Optimal K

Por último, podemos realizar la agrupación de k-medias en el conjunto de datos utilizando el valor óptimo para k de 4:

#Haga que este ejemplo sea reproducible
 set.seed (1)

# realizar agrupaciones de k-medias con k = 4 agrupaciones
km <- kmedias (gl, centros = 4, nstart = 25)

#ver resultados
 km

Agrupación de K-medias con 4 grupos de tamaños 16, 13, 13, 8

Clúster significa:
      Asesinato Asalto UrbanPop Violación
1 -0,4894375 -0,3826001 0,5758298 -0,26165379
2 -0,9615407 -1,1066010 -0,9301069 -0,96676331
3 0,6950701 1,0394414 0,7226370 1,27693964
4 1.4118898 0.8743346 -0.8145211 0.01927104

Vector de agrupación:
       Alabama Alaska Arizona Arkansas California Colorado 
             4 3 3 4 3 3 
   Connecticut Delaware Florida Georgia Hawái Idaho 
             1 1 3 4 1 2 
      Illinois Indiana Iowa Kansas Kentucky Luisiana 
             3 1 2 1 2 4 
         Maine Maryland Massachusetts Michigan Minnesota Mississippi 
             2 3 1 3 2 4 
      Missouri Montana Nebraska Nevada New Hampshire New Jersey 
             3 2 2 3 2 1 
    Nuevo México Nueva York Carolina del Norte Dakota del Norte Ohio Oklahoma 
             3 3 4 2 1 1 
        Oregón Pensilvania Rhode Island Carolina del Sur Dakota del Sur Tennessee 
             1 1 1 4 2 4 
         Texas Utah Vermont Virginia Washington Virginia Occidental 
             3 1 2 1 1 2 
     Wisconsin Wyoming 
             2 1 

Dentro del grupo, suma de cuadrados por grupo:
[1] 16,212213 11,952463 19,922437 8,316061
 (entre_SS / total_SS = 71,2%)

Componentes disponibles:

[1] "cluster" "centra" "totss" "withinss" "tot.withinss" "entre"   
[7] "tamaño" "iter" "ifault"         

De los resultados podemos ver que:

  • Se asignaron 16 estados al primer grupo
  • 13 estados fueron asignados al segundo grupo
  • 13 estados fueron asignados al tercer grupo
  • 8 estados fueron asignados al cuarto grupo

Podemos visualizar los grupos en un diagrama de dispersión que muestra los dos primeros componentes principales en los ejes usando la función fivz_cluster () :

#plotar los resultados del modelo final de k-medias
 fviz_cluster (km, data = df)

Gráfico de agrupamiento de K-medias en R

También podemos usar la función aggregate () para encontrar la media de las variables en cada grupo:

# encontrar las medias de cada grupo
 agregado (USArrests, by = list (cluster = km $ cluster), mean)

racimo Asesinato Asalto UrbanPop Violación
				
1 3.60000 78.53846 52.07692 12.17692
2 10.81538 257.38462 76.00000 33.19231
3 5,65625 138,87500 73,87500 18,78125
4 13,93750 243,62500 53,75000 21,41250

Interpretamos que esta salida es la siguiente:

  • El número medio de asesinatos por cada 100.000 ciudadanos entre los estados del conglomerado 1 es 3,6 .
  • El número medio de agresiones por cada 100.000 ciudadanos entre los estados del grupo 1 es 78,5 .
  • El porcentaje medio de residentes que viven en un área urbana entre los estados del conglomerado 1 es del 52,1% .
  • El número medio de violaciones por cada 100.000 ciudadanos entre los estados del grupo 1 es 12,2 .

Y así.

También podemos agregar las asignaciones de clúster de cada estado al conjunto de datos original:

#add asignación de clúster a los datos originales
 final_data <- cbind (USArrests, cluster = km $ cluster)

#ver datos finales
head (final_data)

	    Asesinato Asalto UrbanPop   Rape	  cluster
				
Alabama	     13,2	 236 58	   21,2	  4
Alaska	     10,0 263 48	   44,5	  2
Arizona	      8.1 294 80	   31.0	  2
Arkansas      8,8 190 50	   19,5	  4
California    9,0 276 91	   40,6	  2
Colorado      7,9 204 78	   38,7	  2

Ventajas y desventajas de la agrupación en clústeres de K-medias

La agrupación en clústeres de K-means ofrece los siguientes beneficios:

  • Es un algoritmo rápido.
  • Puede manejar grandes conjuntos de datos.

Sin embargo, tiene los siguientes posibles inconvenientes:

  • Requiere que especifiquemos el número de clústeres antes de realizar el algoritmo.
  • Es sensible a los valores atípicos.

Dos alternativas al agrupamiento de k-medias son el agrupamiento de k-medoides y el agrupamiento jerárquico .

Puede encontrar el código R completo utilizado en este ejemplo aquí .

  • https://r-project.org
  • https://www.python.org/
  • https://www.stata.com/

Deja un comentario

A menudo, es posible que desee encontrar las filas en un marco de datos cuyo valor en una determinada columna…
statologos comunidad-2

Compartimos información EXCLUSIVA y GRATUITA solo para suscriptores (cursos privados, programas, consejos y mucho más)

You have Successfully Subscribed!