CAPITULO 6

CLARA- CLUSTERING LARGE APLICATION

es una extensión de los métodos k-medoids para manejar datos que contienen una gran cantidad de objetos (más de varios miles de observaciones) con el fin de reducir el tiempo de cálculo y la memoria RAM. problema de almacenamiento Esto se logra utilizando el método de muestreo.

6.1 Concepto

CLARA considera una pequeña muestra de los datos con un tamaño fijo (sumpsize) y aplica el algoritmo PAM para generar un conjunto óptimo de medoides para la muestra. La calidad de los medoides resultantes se mide por la diferencia promedio entre cada objeto en el conjunto de datos completo y el medoide de su grupo, definido como la función de costo.

CLARA repite los procesos de muestreo y chistering un número predeterminado de veces para minimizar el sesgo de muestreo. Los resultados finales del agrupamiento corresponden al conjunto de medoides con el costo mínimo. El algoritmo CLARA se resume en la siguiente sección.

6.2 Algoritmo CLARA

Funcionamiento de CLARA:

1.Dividir aleatoriamente los conjuntos de datos en múltiples subconjuntos de tamaño fijo (sampsize).

2.Calcular el algoritmo PAM en cada subconjunto y elegir los k objetos representativos (medoides). 3. Asignar cada observación del conjunto de datos conjunto de datos al medoide más cercano.

3.Calcular la media (o la suma) de las disimilitudes de las observaciones con su medoide más cercano. Esto se utiliza como medida de la bondad de la agrupación. 4.Conservar el subconjunto de datos cuya media (o suma) sea mínima. Otro análisis de la partición final.

6.3 Cálculo de CLARA en R

6.3.1 Formato y preparación de los datos

para usar Clara los datos se deben de prepararse.Para eso usaremos un conjunto de datos aleatorios. para procesar el resultado se usa la función set.seed().

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 Paquetes y funciones de R necesarios

formato de la funcion Clara:

# clara(x, k, metric = "euclidean", stand = FALSE,
# samples = 5, pamLike = FALSE)

Donde: x: una matriz de datos numéricos o marco de datos, cada fila corresponde a una observación y cada columna corresponde a una variable. Se permiten valores perdidos (NA).

k: número de cluster.

métrica: la métrica de distancia que se utilizará. Las opciones disponibles son “euclidean” y “manhattan”. Las distancias euclidianas son la suma de los cuadrados de las diferencias, y las distancias las distancias manhattan son la suma de las diferencias absolutas. Nótese que la distancia manhattan es menos sensible a los valores atípicos.

stand: valor lógico; si es verdadero, las variables (columnas) de x se estandarizan antes de calcular las disimilitudes. calcular las disimilitudes. Tenga en cuenta que, se recomienda estandarizar las variables antes de agruparlas.

samples: número de muestras a extraer del conjunto de datos. El valor por defecto es 5 pero se recomienda un valor mucho mayor.

pamLike: lógico que indica si el mismo algoritmo en la función pam() debe ser utilizado. Esto debería ser siempre cierto.

Las librerias a usar son las siguientes:

library(cluster)
library(ggplot2)
library(factoextra)
## 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 estimar el número óptimo de clusters en sus datos. La función de R fviz_nbclust() [paquete factoextra] proporciona una solución para facilitar este paso.

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

conglomerados sugerido es 2.

6.3.4 Informática CLARA

El siguiente código 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"

La salida de la función clara() incluye los siguientes componentes:

+clustering: un vector que contiene el número de cluster de cada objeto

+muestra: etiquetas o números de caso de las observaciones de 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  -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

los medoids son S121, S455.

6.3.5 Visualización de clusters CLARA

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

fviz_cluster(clara.res,
palette = c("#00AFBB", "#FC4E07"), # color palette
ellipse.type = "t", # Concentration ellipse
geom = "point", pointsize = 1,
ggtheme = theme_classic()
)

6.4 Resumen

El algoritmo CLARA es una extensión del método PAM para grandes conjuntos de datos.Tiene como objetivo el reducir el tiempo de cálculo en el caso de grandes conjuntos de datos. Como casi todos los algoritmos de particionamiento, requiere que el usuario especifique el número apropiado de clusters que se van a producir. Se puede estimarse utilizando la función fviz_nbclust.