CLARA

CLARA (Clustering Large Applications) es una adaptación de los métodos k-medoides (descritos en el Capítulo 5) para abordar conjuntos de datos de gran tamaño. Esta adaptación se enfoca en situaciones donde se manejan cantidades masivas de información, específicamente cuando se trata de un gran número de objetos (superando varias miles de observaciones). El objetivo de CLARA es reducir el tiempo de cálculo y abordar el problema de almacenamiento en la memoria RAM. Para lograr esto, se emplea el método de muestreo.

library(cluster)
library(factoextra)
## Loading required package: ggplot2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa

6.1 CLARA concept

En lugar de realizar el cálculo de los medoides para todo el conjunto de datos, el método CLARA adopta un enfoque en el que se selecciona una muestra reducida de tamaño fijo (sampsize) y se aplica el algoritmo PAM (Capítulo 5) para obtener un conjunto óptimo de medoides basado en dicha muestra. CLARA repite este proceso de muestreo y agrupación un número determinado de veces con el fin de minimizar cualquier sesgo inherente al muestreo. Los resultados finales del proceso de agrupación corresponden al conjunto de medoides que presenta el menor costo.

6.2 CLARA Algorithm

El algoritmo es de la siguiente forma

  1. Realizar una partición aleatoria de los datos en varios conjuntos más pequeños de tamaño fijo (sampsize).
  2. Aplicar el algoritmo PAM a cada subconjunto y seleccionar los k elementos representativos (medoides).
  3. Asignar cada observación del conjunto de datos al medoide más cercano.
  4. Calcular la media (o suma) de las diferencias entre las observaciones y sus respectivos medoides. Este valor se utiliza como medida de la calidad del agrupamiento.
  5. Conservar el subconjunto de datos que tenga la menor media (o suma). Realizar un análisis adicional de la partición final.

6.2 Computing CLARA in R

6.3.1 Data format and preparation

Para realizar el cálculo del algoritmo CLARA en R, es necesario realizar la preparación de los datos. En este caso, generaremos un conjunto de datos de forma aleatoria. Con el fin de obtener resultados reproducibles, utilizaremos la función set.seed() al inicio del proceso.

set.seed(1234)
df <- rbind(cbind(rnorm(200, 0, 8), rnorm(200, 0, 8)),
            cbind(rnorm(300, 50, 8), rnorm(300, 50, 8)))

colnames(df) <- c("x", "y")
rownames(df) <- paste0("S", 1:nrow(df))

head(df, nrow = 6)
##             x        y
## S1  -9.656526 3.881815
## S2   2.219434 5.574150
## S3   8.675529 1.484111
## S4 -18.765582 5.605868
## S5   3.432998 2.493448
## S6   4.048447 6.083699

6.3.2 Required R packages and functions

La función clara() del paquete cluster puede utilizarse para calcular CLARA. El formato simplificado es el siguiente:

clara(x, k, metric = “euclidean”, stand = FALSE, samples = 5, pamLike = FALSE)

  • x: Una matriz o marco de datos que contiene datos numéricos. Cada fila representa una observación y cada columna representa una variable. Se permiten valores faltantes (NA).

  • k: El número de clústeres que se desea obtener.

  • métrica: La medida de distancia que se utilizará. Las opciones disponibles son “euclidean” y “manhattan”. La distancia euclidiana es la suma de los cuadrados de las diferencias, mientras que la distancia Manhattan es la suma de las diferencias absolutas. La distancia Manhattan es menos sensible a valores atípicos.

  • stand: Un valor booleano que indica si se deben estandarizar las variables (columnas) de x antes de calcular las disimilitudes. Se recomienda estandarizar las variables antes de realizar la agrupación.

  • samples: El número de muestras a extraer del conjunto de datos. El valor predeterminado es 5, pero se recomienda utilizar un valor más grande.

  • pamLike: Un valor booleano que indica si se debe utilizar el mismo algoritmo que en la función pam(). Se recomienda que este valor sea siempre verdadero.

Para generar un gráfico visualmente atractivo de los clústeres generados utilizando la función pam(), haremos uso del paquete factoextra.

  1. Se instalan los paquetes cluster y factoestra
  2. Se llaman los paquetes

6.3.3 Estimating the optimal number of clusters

Para determinar el número ideal de agrupaciones en los datos, se puede emplear el método de la silueta media, tal como se detalla en la sección de clustering de PAM. Una alternativa útil para llevar a cabo este proceso se encuentra en la función fviz_nbclust() de R, la cual está incluida en el paquete factoextra.

fviz_nbclust(df, clara, method = "silhouette")+
  theme_classic()

Basándonos en el análisis del gráfico, se recomienda utilizar 2 grupos. En el próximo apartado, procederemos a clasificar las observaciones en estos 2 grupos.

6.3.4 Computing CLARA

El siguiente código R calcula el algoritmo PAM con k = 2:

clara.res <- clara(df, 2, samples = 50, pamLike = TRUE)

print(clara.res)
## Call:     clara(x = df, k = 2, samples = 50, pamLike = TRUE) 
## Medoids:
##              x         y
## S121 -1.531137  1.145057
## S455 48.357304 50.233499
## Objective function:   9.87862
## Clustering vector:    Named int [1:500] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...
##  - attr(*, "names")= chr [1:500] "S1" "S2" "S3" "S4" "S5" "S6" "S7" ...
## Cluster sizes:            200 300 
## Best sample:
##  [1] S37  S49  S54  S63  S68  S71  S76  S80  S82  S101 S103 S108 S109 S118 S121
## [16] S128 S132 S138 S144 S162 S203 S210 S216 S231 S234 S249 S260 S261 S286 S299
## [31] S304 S305 S312 S315 S322 S350 S403 S450 S454 S455 S456 S465 S488 S497
## 
## Available components:
##  [1] "sample"     "medoids"    "i.med"      "clustering" "objective" 
##  [6] "clusinfo"   "diss"       "call"       "silinfo"    "data"

El resultado obtenido al utilizar la función clara() presenta los siguientes elementos:

Si se desea agregar las clasificaciones puntuales a los datos originales, se puede emplear esta opción:

dd <- cbind(df, cluster = clara.res$cluster)
head(dd, n = 4)
##             x        y cluster
## S1  -9.656526 3.881815       1
## S2   2.219434 5.574150       1
## S3   8.675529 1.484111       1
## S4 -18.765582 5.605868       1
clara.res$medoids
##              x         y
## S121 -1.531137  1.145057
## S455 48.357304 50.233499
head(clara.res$clustering, 10)
##  S1  S2  S3  S4  S5  S6  S7  S8  S9 S10 
##   1   1   1   1   1   1   1   1   1   1

6.3.5 Visualizing CLARA clusters

Para visualizar los resultados de la partición, utilizaremos la función fviz_cluster() del paquete factoextra. Dibuja un gráfico de dispersión de puntos de datos coloreados por números de clúster.

fviz_cluster(clara.res,
             palette = c("#EA899A", "#FFC0CB"),
             ellipse.type = "t",
             geom = "point", pointsize = 1,
             ggtheme = theme_classic()
             )

6.4 Summary

El algoritmo CLARA (Clustering Large Applications) se presenta como una ampliación del método PAM (Partitioning Around Medoids) diseñado para abordar conjuntos de datos de gran escala.

Su principal propósito es agilizar el proceso de cálculo cuando se trabajan con grandes conjuntos de datos. Al igual que la mayoría de los algoritmos de particionamiento, se requiere que el usuario determine el número adecuado de clústeres a generar. Una forma de estimar esta cantidad se encuentra disponible a través de la función fviz_nbclust() en el paquete factoextra de R.