K-Medoides en R: ejemplo paso a paso

La agrupación en clústeres es una técnica de aprendizaje automático que intenta encontrar grupos o agrupaciones 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 .

Desafortunadamente, este método puede verse influenciado por valores atípicos, por lo que una alternativa que se utiliza a menudo es la agrupación de k-medoides .

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

El agrupamiento de K-medoides es una técnica en la que colocamos cada observación en un conjunto de datos en uno de los grupos de K.

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 el vector de las p medianas 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 .

Nota tecnica:

Debido a que los k-medoides calculan los centroides de los conglomerados utilizando medianas en lugar de medias, tiende a ser más robusto a los valores atípicos en comparación con las k-medias.

En la práctica, si no hay valores atípicos extremos en el conjunto de datos, las k-medias y los k-medoides producirán resultados similares.

Agrupación de K-Medoides en R

El siguiente tutorial proporciona un ejemplo paso a paso de cómo realizar agrupaciones de k-medoides en R.

Paso 1: cargue los paquetes necesarios

Primero, cargaremos dos paquetes que contienen varias funciones útiles para la agrupación de k-medoids 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 de k-medoides en R, podemos usar la función pam () , que significa «particionamiento alrededor de medianas» y usa la siguiente sintaxis:

pam (data, k, metric = «euclidiana», stand = FALSE)

dónde:

  • data: Nombre del conjunto de datos.
  • k: el número de conglomerados.
  • métrica: la métrica que se utilizará para calcular la distancia. El valor predeterminado es euclidiano, pero también puede especificar manhattan .
  • stand: si estandarizar o no cada variable en el conjunto de datos. El valor predeterminado es FALSO.

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, pam, método = " wss ")

Clústeres óptimos para k-medoides

El total dentro de la suma de cuadrados generalmente siempre aumentará a medida que aumentamos el número de grupos, por lo que cuando creamos este tipo de gráfico buscamos un «codo» donde la suma de cuadrados comienza a «doblarse» o nivelarse.

El punto en el que se dobla la trama suele ser el número óptimo de conglomerados. Más allá de este número, es probable que se produzca un sobreajuste .

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 = pam,
                    K.max = 10, # clústeres máximos a considerar 
                    B = 50) # iteraciones totales de arranque

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

K-medoides número óptimo de conglomerados en R

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 de K-Medoids con Optimal K

Por último, podemos realizar agrupaciones de k-medoides 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-medoides con k = 4 agrupaciones
kmed <- pam (gl, k = 4)

#ver resultados
 kmed

              ID Asesinato Asalto UrbanPop Violación
Alabama 1 1,2425641 0,7828393 -0,5209066 -0,003416473
Michigan 22 0,9900104 1,0108275 0,5844655 1,480613993
Oklahoma 36 -0,2727580 -0,2371077 0,1699510 -0,131534211
Nueva Hampshire 29 -1.3059321 -1.3650491 -0.6590781 -1.252564419
Vector de agrupación:
       Alabama Alaska Arizona Arkansas California 
             1 2 2 1 2 
      Colorado Connecticut Delaware Florida Georgia 
             2 3 3 2 1 
        Hawái Idaho Illinois Indiana Iowa 
             3 4 2 3 4 
        Kansas Kentucky Luisiana Maine Maryland 
             3 3 1 4 2 
 Massachusetts Michigan Minnesota Misisipi Misuri 
             3 2 4 1 3 
       Montana Nebraska Nevada New Hampshire Nueva Jersey 
             3 3 2 4 3 
    Nuevo México Nueva York Carolina del Norte Dakota del Norte Ohio 
             2 2 1 4 3 
      Oklahoma Oregon Pensilvania Rhode Island Carolina del Sur 
             3 3 3 3 1 
  Dakota del Sur Tennessee Texas Utah Vermont 
             4 1 2 3 4 
      Virginia Washington Virginia Occidental Wisconsin Wyoming 
             3 3 4 4 3 
Función objetiva:
   construir intercambio 
1.035116 1.027102 

Componentes disponibles:
 [1] "medoides" "id.med" "agrupamiento" "objetivo" "aislamiento" 
 [6] "clusinfo" "silinfo" "diss" "call" "data"          

Tenga en cuenta que los cuatro centroides del conglomerado son observaciones reales en el conjunto de datos. Cerca de la parte superior de la salida podemos ver que los cuatro centroides son los siguientes estados:

  • Alabama
  • Michigan
  • Oklahoma
  • New Hampshire

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-
 medoides fviz_cluster (kmed, data = df)

Trazar grupos de k-medoides en R

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 = kmed $ cluster)

#ver datos finales
head (final_data)

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

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

Un gráfico de relieve es un tipo de gráfico que muestra las clasificaciones de diferentes grupos a lo largo del…
statologos comunidad-2

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

You have Successfully Subscribed!