CLARA - Agrupación de grandes Aplicaciones
CLARA (Clustering Large Applications, Kaufman and Rousseeuw, 1990) es una ampliación de los métodos k-medoids (Capítulo 5) diseñada para abordar conjuntos de datos que contienen un gran número de objetos (más de varios miles de observaciones), con el objetivo de reducir el tiempo de cálculo y los problemas de almacenamiento en memoria RAM. Para lograrlo, se emplea el método de muestreo.
6.1 Concepto CLARA
CLARA es una extensión de k-medoids para grandes conjuntos de datos. En lugar de considerar todos los datos, utiliza una muestra pequeña y aplica el algoritmo PAM para encontrar medoides óptimos. Repite el proceso varias veces para minimizar el sesgo de muestreo y selecciona los medoides con el menor coste. Esto ayuda a reducir el tiempo de cálculo y los problemas de almacenamiento RAM. CLARA se resume como un método de muestreo y agrupación iterativo para obtener los medoides finales.
6.2 Algoritmo CLARA
El algoritmo consta de los siguientes pasos:
Se dividen aleatoriamente los datos en múltiples subconjuntos de tamaño fijo (sampsize).
Se aplica el algoritmo PAM a cada subconjunto y se seleccionan los k objetos representativos (medoides). Se asigna cada observación del conjunto de datos completo al medoide más cercano.
Se calcula la media (o suma) de las disimilitudes entre las observaciones y sus medoides más cercanos. Esta medida se utiliza como evaluación de la calidad del agrupamiento.
Se conserva el subconjunto de datos con la menor media (o suma). La partición final se somete a un nuevo análisis.
Cabe destacar que cada subconjunto debe contener los medoides obtenidos del mejor subconjunto hasta el momento. Además, se añaden observaciones seleccionadas aleatoriamente hasta alcanzar el tamaño de la muestra.
6.3 Computando CLARA en R
6.3.1 Datos y preparación
Para calcular el algoritmo CLARA en R, los datos deben prepararse como se indica en el Capítulo 2.
Aquí, generaremos usar un conjunto de datos aleatorios. Para que el resultado sea reproducible, empezamos utilizando la función set.seed().
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 6.006908 -9.786750
## S2 7.551471 -8.893914
## S3 8.109794 -8.149646
## S4 7.204771 -8.924518
## S5 -4.909675 4.849407
## S6 2.767999 5.285597
6.3.2 Paquetes y funciones requeridos
Puedes emplear la función clara() del paquete cluster para llevar a cabo el cálculo de CLARA. El formato simplificado para utilizarla es el siguiente:
#clara(x, k, metric = "euclidean", stand = FALSE,
#samples = 5, pamLike = FALSE)➥ X: Un conjunto de datos representado como una matriz numérica o un marco de datos. Cada fila en X corresponde a una observación y cada columna corresponde a una variable. Los datos pueden contener valores perdidos (NA).
➥k:El número de conglomerados o grupos deseados para realizar el agrupamiento.
➥métrica: La medida de distancia utilizada para calcular las similitudes entre las observaciones. Las opciones disponibles son “euclidean” (euclidiana) y “manhattan” (Manhattan). La distancia euclidiana es la suma de los cuadrados de las diferencias, mientras que la distancia de Manhattan es la suma de las diferencias absolutas. La distancia de Manhattan es menos sensible a los valores atípicos.
➥stand: Un valor lógico que indica si se debe estandarizar las variables (columnas) de X antes de calcular las disimilitudes. Se recomienda estandarizar las variables antes de realizar el agrupamiento.
➥samples: El número de muestras a extraer del conjunto de datos. El valor predeterminado es 5, pero se recomienda utilizar un valor mucho mayor.
Para generar una visualización atractiva de los conglomerados generados con la función pam(), se empleará el paquete factoextra.
1. Instalar los paquetes requeridos:
install.packages(c("cluster", "factoextra"))## Installing packages into '/cloud/lib/x86_64-pc-linux-gnu-library/4.3'
## (as 'lib' is unspecified)
2. Cargar los paquetes:
library(cluster)
library(factoextra)## Loading required package: ggplot2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
6.3.3 Estimación del número óptimo de conglomerados
Para determinar el número ideal de conglomerados en sus datos, se puede utilizar el método de la silueta media, como se explica en el capítulo de clustering de PAM (Capítulo 5). La función fviz_nbclust() del paquete factoextra en R ofrece una solución conveniente para este proceso.
library(cluster)
library(factoextra)
fviz_nbclust (df, clara, method = "silhouette")+
theme_classic()Basándonos en el gráfico, se sugiere un número de 2 conglomerados. En la sección siguiente, procederemos a clasificar las observaciones en estos 2 conglomerados.
6.3.4 Computación de 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
## S165 -0.1023373 1.451448
## S474 50.9971814 50.545496
## Objective function: 9.440705
## 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] S12 S14 S17 S19 S24 S34 S57 S70 S87 S92 S128 S139 S149 S150 S165
## [16] S167 S181 S203 S205 S232 S233 S238 S265 S267 S285 S287 S294 S298 S305 S307
## [31] S312 S320 S329 S332 S342 S347 S381 S428 S433 S448 S463 S467 S474 S478
##
## Available components:
## [1] "sample" "medoids" "i.med" "clustering" "objective"
## [6] "clusinfo" "diss" "call" "silinfo" "data"
La salida de la función clara() incluye los siguientes componentes:
✤ Medoides: Objetos que representan conglomerados.
✤ Clustering: Un vector que contiene el número de cluster de cada objeto.
✤ Muestra: Etiquetas o números de caso de las observaciones en la mejor muestra, es decir,la muestra utilizada por el algoritmo clara para la partición final.
dd <- cbind(df, cluster = clara.res$cluster)
head(dd, n = 4)## x y cluster
## S1 6.006908 -9.786750 1
## S2 7.551471 -8.893914 1
## S3 8.109794 -8.149646 1
## S4 7.204771 -8.924518 1
clara.res$medoids## x y
## S165 -0.1023373 1.451448
## S474 50.9971814 50.545496
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
los medoids son S121, S455
6.3.5 Visualización de conglomerados CLARA
Para visualizar los resultados de la partición, utilizaremos la función fviz_cluster() del paquete factoextra. Esta función nos permitirá generar un gráfico de dispersión de puntos de datos, donde los puntos estarán coloreados según los números de clúster asignados.
fviz_cluster(clara.res,
palette = c("#B19ED7", "#61FAA6"), # color palette
ellipse.type = "t", # Concentration ellipse
geom = "point", pointsize = 1,
ggtheme = theme_classic()
)6.4 Resumen
CLARA (Clustering Large Applications) es una extensión del método de clustering PAM (Partitioning Around Medoids) diseñada específicamente para manejar grandes conjuntos de datos. Requiere especificar el número de conglomerados, el cual puede ser estimado utilizando la función fviz_nbclust. La función clara() del paquete cluster se utiliza para calcular el algoritmo CLARA. Una vez calculado, los resultados pueden ser visualizados utilizando la función fviz_cluster() del paquete factoextra. CLARA tiene como objetivo reducir el tiempo de cálculo en conjuntos de datos grandes, proporcionando un enfoque eficiente para el clustering. Al determinar el número óptimo de conglomerados y visualizar los resultados, CLARA facilita el análisis de conjuntos de datos complejos