Introducción: En este informe, se trabajará el resumen junto con todos los algoritmos implementados en la parte II “Partitioning clustering” del librio “Multivariate Analysis”. En dichos capitulos se describen los clústeres de partición más utilizados, dichos agrupamientos de partición son métodos de agrupación utilizados para clasificar las observaciones, con un conjunto de datos, en múltiples grupos basados en su similitud. Además, los algoritmos requieren que se especifique el número de agrupaciones que deben generarse.
Los clústeres de partición más utilizados son:
K-means clustering (MacQueen, 1967) indica que cada cluster está representado por el centro o la media de los puntos de datos que pertenecen al cluster. El método K-means es sensible a los puntos de datos anómalos y a los valores atípicos.
El método K-medoids clustering o PAM (Partitioning Around Medoids, Kaufman & Rousseeuw, 1990), en el que cada cluster está representado por uno de los objetos del cluster. PAM es menos sensible a los valores atípicos que k-means.
El algoritmo CLARA (Clustering Large Applications), que es una extensión de PAM adaptada a grandes conjuntos de datos.
Así mismo, para cada uno de estos métodos, se proporciona:
-la idea básica y los conceptos matemáticos clave.
-el algoritmo de clustering y su implementación en el software R.
-secciones de laboratorio en R con muchos ejemplos de análisis y visualización de clusters.
Para finalizar, se utilizarán los siguientes paquetes de R para calcular y visualizar el agrupamiento de partición:
-paquete de estadísticas para calcular K-means.
-Paquete de cluster para calcular los algoritmos PAM y CLARA.
-factoextra para una hermosa visualización de los clusters.
El clustering de K-means descrito por MacQueen (1967), es el algoritmo de aprendizaje automático no supervisado más utilizado para dividir un conjunto de datos dado en un conjunto de k grupos (k clusters), donde k representa el número de grupos preestablecido por el analista. Este algoritmo clasifica los objetos en múltiples grupos (clusters), de forma que los objetos de un mismo cluster sean lo más parecidos posible (alta similitud intraclase), mientras que los objetos de clusters diferentes sean lo más disímiles posible (baja similitud intraclase).En el clustering de k-means, cada cluster está representado por su centro (centroide), que corresponde a la media de los puntos asignados al cluster.
4.1. Idea básica de k-means: consiste en definir los clusters de forma que se minimice la variación total dentro del cluster. El algoritmo estándar es el de Hartigan-Wong (1979), que define la variación total dentro del cluster como la suma de las distancias cuadradas euclidianas entre los elementos y el centroide correspondiente:
\[W(C_k)=\Sigma_{x_i∈C_k}(x_i-μ_k)^2\ \]
Donde:
\(x_i\) designa un punto de datos perteneciente al clúster \(C_k\) de modo que, la distancia de la suma de cuadrados (ss) de la observación a sus centros de clúster asignados μk sea mínima.
μk es el valor medio de los puntos asignados al clúster \(C_k\)
De otro modo, se puede definir la variación total dentro del cluster de la siguiente manera:
\[tot.withinss=\Sigma^k_{k=1}W(C_k)=\Sigma^k_{k=1}\Sigma_{x_i∈C_k}(x_i-μ_k)^2\\ \]
Cuya suma total de cuadrados dentro del clúster mide la compacidad de este, la cual queremos que sea lo más pequeña posible.
4.2. Algoritmo K-means: Para crear el algoritmo es necesario seguir los singuientes pasos:
Primero, hay que especificar el número de clusters (k).
Segundo, se debe seleccionar aleatoriamente k objetos del conjunto de datos como centros o medios iniciales de los clusters.
Tercero, hay que asignar cada observación a su centroide más cercano, basándose en la distancia de Euclides entre el objeto y el centroide.
Cuarto, para cada uno de los k clusters hay qye actualizar el centroide del cluster calculando los nuevos valores medios de todos los puntos de datos en el cluster. El centoide de un cluster \(K_{th}\) es un vector de longitud p que contiene las medias de todas las variables para dichas observaciones; siendo p el número de variables.
Por último, hay que iterar los pasos 3 y 4 hasta que las asignaciones de cluster dejen de cambiar o se alcance el número máximo de iteraciones.
4.3. Cálculo de la agrupación de k-means en R:
4.3.1. Datos: Se utilizará el conjunto de datos de demostración “USArrests”. Dichos datos deben contener sólo variables continuas, ya que el algoritmo de k-means utiliza medias variables. Como no queremos que el algoritmo de k-means dependa de una unidad variable arbitraria, empezamos por escalar los datos utilizando la función de R “scale()” como se indica a continuación:
data("USArrests") # Cargar el conjunto de datos
df <-scale(USArrests) # Escalar los datos
# Ver las 3 primeras filas de los datos
head(df,n=3)
## Murder Assault UrbanPop Rape
## 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
4.3.2. Required R packages and functions: La función de R estándar para la conglomeración de k-means es kmeans() [paquete stats], cuyo formato abreviado es el siguiente:
kmeans(x, centers,iter.max =10,nstart =1)
x: matriz numérica, marco de datos o vector numéricos. Los centros serán los posibles valores son el número de clusters (k) o un conjunto de centros de clusters iniciales. Si es un número, se elige un conjunto aleatorio de filas (distintas) en x como centros iniciales. El iter.max: indica el número máximo de iteraciones permitido. El valor por defecto es 10. Y nstart es el número de particiones iniciales aleatorias cuando los centros son un número. Generalmente se recomienda que nstart > 1. Para crear un hermoso gráfico de los clústeres generados con la
función kmeans(), usaremos el paquete factoextra. Ahora se instala el paquete factoextra y se carga respectivamente con:
install.packages("factoextra")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.2'
## (as 'lib' is unspecified)
library(factoextra)
## Loading required package: ggplot2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
4.3.3. Estimating the optimal number of clusters: El clustering de k-means requiere que los usuarios especifiquen el número de clusters a generar. Una cuestión fundamental es: ¿cómo elegir el número correcto de clusters previstos (k)? En el capítulo “Evaluación de clusters y estadísticas de validación” se presentarán diferentes métodos. estadísticas”. Aquí ofrecemos una solución sencilla. La idea es calcular la agrupación de k-means utilizando de conglomerados k. A continuación, se extrae el wss (dentro de la suma de cuadrados) en función del número de conglomerados. el número de conglomerados. La ubicación de una curva (rodilla) en el trazado se considera generalmente se considera un indicador del número adecuado de conglomerados. La función de R fviz_nbclust() [en el paquete factoextra] proporciona una solución conveniente para estimar el número óptimo de conglomerados.
library(factoextra)
fviz_nbclust(df, kmeans,method ="wss")+
geom_vline(xintercept =4,linetype =2)
El gráfico anterior representa la varianza dentro de los clusters. Disminuye a medida que aumenta k, pero puede verse una curva en k = 4, la cual indica que los clusters adicionales más allá del cuarto tienen poco valor. En la siguiente sección, se clasificarán las observaciones en 4 clusters.
4.3.4. Computing k-means clustering: Como el algoritmo de clustering de k-means comienza con k centros seleccionados aleatoriamente, siempre se recomienda utilizar la función set.seed() para establecer una semilla para el generador de números aleatorios de R generador de números aleatorios de R. El objetivo es hacer reproducibles los resultados, para que el lector de este artículo obtenga exactamente los mismos resultados que se muestran a continuación. El código de R que se muestra a continuación realiza la agrupación de k-means con k = 4:
# Computar k-means con k = 4
set.seed(123)
km.res <-kmeans(df,4,nstart =25)
Como el resultado final del clustering de k-means es sensible a las asignaciones iniciales aleatorias, especificamos nstart = 25. Por tanto, R probará 25 asignaciones iniciales aleatorias diferentes y luego seleccionará los mejores resultados correspondientes a la que tenga la menor variación dentro del cluster. El valor por defecto de nstart en R es uno. Sin embargo, se recomienda calcular el clustering de k-means con un valor grande de nstart, como 25 o 50, para tener un resultado más estable.
# Imprimir los resultados
print(km.res)
## K-means clustering with 4 clusters of sizes 8, 13, 16, 13
##
## Cluster means:
## Murder Assault UrbanPop Rape
## 1 1.4118898 0.8743346 -0.8145211 0.01927104
## 2 -0.9615407 -1.1066010 -0.9301069 -0.96676331
## 3 -0.4894375 -0.3826001 0.5758298 -0.26165379
## 4 0.6950701 1.0394414 0.7226370 1.27693964
##
## Clustering vector:
## Alabama Alaska Arizona Arkansas California
## 1 4 4 1 4
## Colorado Connecticut Delaware Florida Georgia
## 4 3 3 4 1
## Hawaii Idaho Illinois Indiana Iowa
## 3 2 4 3 2
## Kansas Kentucky Louisiana Maine Maryland
## 3 2 1 2 4
## Massachusetts Michigan Minnesota Mississippi Missouri
## 3 4 2 1 4
## Montana Nebraska Nevada New Hampshire New Jersey
## 2 2 4 2 3
## New Mexico New York North Carolina North Dakota Ohio
## 4 4 1 2 3
## Oklahoma Oregon Pennsylvania Rhode Island South Carolina
## 3 3 3 3 1
## South Dakota Tennessee Texas Utah Vermont
## 2 1 4 3 2
## Virginia Washington West Virginia Wisconsin Wyoming
## 3 3 2 2 3
##
## Within cluster sum of squares by cluster:
## [1] 8.316061 11.952463 16.212213 19.922437
## (between_SS / total_SS = 71.2 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
La salida impresa muestra: primero las medias de los clusters o centros de los clusters: una matriz, cuyas filas son el número de clusters (1 a 4) y las columnas son las variables. Y también el vector de clustering: Un vector de enteros (1:k) que indica el cluster al que se asigna cada punto al que se asigna cada punto. Es posible calcular la media de cada una de las variables por clusters utilizando los datos originales:
aggregate(USArrests, by=list(cluster=km.res$cluster), mean)
## cluster Murder Assault UrbanPop Rape
## 1 1 13.93750 243.62500 53.75000 21.41250
## 2 2 3.60000 78.53846 52.07692 12.17692
## 3 3 5.65625 138.87500 73.87500 18.78125
## 4 4 10.81538 257.38462 76.00000 33.19231
Si desea añadir las clasificaciones de punto a los a los datos originales, se emplea esto:
dd <-cbind(USArrests,cluster =km.res$cluster)
head(dd)
## Murder Assault UrbanPop Rape cluster
## Alabama 13.2 236 58 21.2 1
## Alaska 10.0 263 48 44.5 4
## Arizona 8.1 294 80 31.0 4
## Arkansas 8.8 190 50 19.5 1
## California 9.0 276 91 40.6 4
## Colorado 7.9 204 78 38.7 4
4.3.5. Accessing to the results of kmeans() function: La función kmeans() devuelve una lista de componentes, incluyendo. luster: Un vector de enteros (de 1:k) que indica el cluster al que se asigna cada punto se asignan los centros: Una matriz de los centros de los clusters (medias de los clusters). Tambien están los totss que son la suma total de cuadrados (TSS), es decir, q (xi ≠ x¯)2. La TSS mide la varianza total de varianza total de los datos. El withinss es un vector de la suma de cuadrados dentro del clúster, un componente por clúster. Por otro lado tot.withinss se refiere a la suma total de cuadrados dentro del clúster, es decir, suma(withinss)- betweenss: La suma de cuadrados entre clusters, es decir, totss ≠ tot.withinss. El tamaño es el número de observaciones en cada clúster. Se puede acceder a estos componentes de la siguiente manera:
# Número de cluster para cada una de las observaciones
km.res$cluster
## Alabama Alaska Arizona Arkansas California
## 1 4 4 1 4
## Colorado Connecticut Delaware Florida Georgia
## 4 3 3 4 1
## Hawaii Idaho Illinois Indiana Iowa
## 3 2 4 3 2
## Kansas Kentucky Louisiana Maine Maryland
## 3 2 1 2 4
## Massachusetts Michigan Minnesota Mississippi Missouri
## 3 4 2 1 4
## Montana Nebraska Nevada New Hampshire New Jersey
## 2 2 4 2 3
## New Mexico New York North Carolina North Dakota Ohio
## 4 4 1 2 3
## Oklahoma Oregon Pennsylvania Rhode Island South Carolina
## 3 3 3 3 1
## South Dakota Tennessee Texas Utah Vermont
## 2 1 4 3 2
## Virginia Washington West Virginia Wisconsin Wyoming
## 3 3 2 2 3
head(km.res$cluster,4)
## Alabama Alaska Arizona Arkansas
## 1 4 4 1
# Tamaño de cluster
km.res$size
## [1] 8 13 16 13
# Media de cluster
km.res$centers
## Murder Assault UrbanPop Rape
## 1 1.4118898 0.8743346 -0.8145211 0.01927104
## 2 -0.9615407 -1.1066010 -0.9301069 -0.96676331
## 3 -0.4894375 -0.3826001 0.5758298 -0.26165379
## 4 0.6950701 1.0394414 0.7226370 1.27693964
4.3.6. Visualizing k-means clusters: Es una buena idea trazar los resultados de los clusters. Estos pueden utilizarse para evaluar la elección del número de conglomerados, así como para comparar dos análisis de conglomerados diferentes. Ahora, queremos visualizar los datos en un gráfico de dispersión, coloreando cada punto de datos de acuerdo con su asignación de cluster. El problema es que los datos contienen más de 2 variables y la cuestión es qué variables elegir para el gráfico de dispersión xy. Una solución es reducir el número de dimensiones aplicando un algoritmo de reducción de la dimensionalidad dimensionalidad, como el Análisis de Componentes Principales (ACP), que opera sobre las cuatro variables y produce dos nuevas variables (que representan las variables originales) que se pueden utilizar para hacer el gráfico. En otras palabras, si tenemos un conjunto de datos multidimensional, una solución es realizar Análisis de Componentes Principales (ACP) y trazar los puntos de datos según las primeras coordenadas de los dos primeros componentes principales. La función fviz_cluster() [paquete factoextra] puede utilizarse para visualizar fácilmente los clusters de k-means clusters. Toma los resultados de k-means y los datos originales como argumentos. En el gráfico resultante En el gráfico resultante, las observaciones se representan mediante puntos, utilizando componentes principales si el número de variables es superior a 2. de variables es superior a 2. También es posible dibujar una elipse de concentración alrededor de cada clúster.
fviz_cluster(km.res,data =df,
palette=c("#2E9FDF","#00AFBB","#E7B800","#FC4E07"),
ellipse.type ="euclid",
star.plot =TRUE,
repel =TRUE,
ggtheme =theme_minimal())
4.4. K-means clustering advantages and disadvantages: El clustering de K-means es un algoritmo muy simple y rápido. Puede tratar eficientemente con conjuntos de datos muy grandes conjuntos de datos. Sin embargo, hay algunas debilidades, incluyendo: 1. Supone un conocimiento previo de los datos y requiere que el analista elija de antemano el número apropiado de conglomerados (k). número adecuado de conglomerados (k) de antemano. 2. Los resultados finales obtenidos son sensibles a la selección aleatoria inicial de los centros de centros de cluster. ¿Por qué es esto un problema? Porque, para cada ejecución diferente del algoritmo sobre el mismo conjunto de datos, se puede elegir un conjunto diferente de centros iniciales. Esto puede llevar a resultados de clustering diferentes en diferentes ejecuciones del algoritmo. 3. Es sensible a los valores atípicos. 4. Si se reorganizan los datos, es muy posible que se obtenga una solución diferente cada vez que cambie el orden de sus datos.
Las posibles soluciones a estas debilidades, incluyen: 1. Solución al problema 1: Calcule k-means para un rango de valores de k, por ejemplo variando k entre 2 y 10. A continuación, elija el mejor k comparando los resultados de clustering obtenidos para los diferentes valores de k. 2. Solución a la cuestión 2: Calcule el algoritmo K-means varias veces con diferentes centros de cluster iniciales. La ejecución con la menor suma total de cuadrado se selecciona como la solución final de clustering. 3. Para evitar las distorsiones causadas por un exceso de valores atípicos, es posible utilizar el algoritmo PAM que es menos sensible a los valores atípicos.
4.5. Alternative to k-means clustering: Una alternativa robusta a k-means es PAM, que se basa en medoides. Como se explica en el siguiente capítulo, la agrupación PAM puede calcularse utilizando la función pam() [paquete cluster]. La función pamk( ) [paquete fpc] es una envoltura para PAM que también imprime el número sugerido de clusters basado en la anchura media óptima de la silueta.
4.6. Conclusión à El clustering de K-means puede utilizarse para clasificar las observaciones en k grupos, basándose en su similitud. Cada grupo está representado por el valor medio de los puntos del grupo, conocido como centroide del clúster. El algoritmo K-means requiere que los usuarios especifiquen el número de clústeres que deben generarse. La función de R kmeans() [paquete stats] puede utilizarse para calcular el algoritmo k-means. El formato simplificado es kmeans(x, centros), donde “x” son los datos y centros es el número de clusters que se deben producir. Después de calcular el clustering de k-means, se puede utilizar la función de R viz_cluster() [paquete factoextra] para visualizar los resultados. El formato es fviz_cluster(km.res, data), donde km.res son los resultados de k-means y data corresponde a los conjuntos de datos originales.
5 K-Medoids à
El algoritmo k-medoids es un enfoque de clustering relacionado con el clustering k-means (capítulo 4) para dividir un conjunto de datos en k grupos o clusters. En el clustering k-medoids cada clúster está representado por uno de los puntos de datos del clúster. Estos puntos se denominados medoides del clúster. El término medoide se refiere a un objeto dentro de un
clúster cuya disimilitud media entre él y todos los demás miembros del clúster es mínima. Corresponde al punto más central del clúster. Estos objetos (uno por clúster) pueden considerarse como un ejemplo representativo de los miembros de ese clúster que puede ser útil en algunas situaciones. Recordemos que, en el clustering de k-means, el centro de un determinado cluster se calcula como el valor medio de todos los puntos de datos en el cluster. K-medoid es una alternativa robusta al clustering k-means. Esto significa que, el algoritmo es menos sensible al ruido y a los valores atípicos, en comparación con k-means, porque utiliza medoides como centros de cluster en lugar de las medias (utilizadas en k-means). El algoritmo k-medoids requiere que el usuario especifique k, el número de clusters que se (como en el clustering k-means). Un enfoque útil para determinar el número óptimo de número óptimo de clusters es el método de la silueta, descrito en las siguientes secciones. El método de clustering k-medoides más común es el algoritmo PAM (Partitioning Around Medoids, Kaufman & Rousseeuw, 1990). En este artículo, describiremos el algoritmo PAM y proporcionaremos ejemplos prácticos utilizando el software R. En el próximo capítulo, también discutiremos una variante de PAM llamada CLARA (Clustering Large Applications) que se utiliza para analizar grandes conjuntos de datos conjuntos de datos.
5.1. Concepto PAM: El empleo de promedios implica que la agrupación de k-means es muy sensible a los valores atípicos. Este puede afectar gravemente a la asignación de las observaciones a los clusters. Un algoritmo más robusto es el algoritmo PAM.
5.2. Algoritmo PAM: El algoritmo PAM se basa en la búsqueda de k objetos representativos o medoides entre las observaciones del conjunto de datos. Tras encontrar un conjunto de k medoides, se construyen clusters asignando cada observación al medoide más cercano. A continuación, cada medoide m seleccionado y cada punto de datos no medoide se intercambian y se calcula la función objetivo. función objetivo. La función objetivo corresponde a la suma de las disimilitudes de todos los objetos con su medoide más cercano. El paso SWAP intenta mejorar la calidad del clustering intercambiando objetos seleccionados (medoides) y objetos no seleccionados. Si la función objetivo puede Si la función objetivo puede reducirse intercambiando un objeto seleccionado con un objeto no seleccionado, entonces se realiza el intercambio se lleva a cabo. Esto se continúa hasta que la función objetivo ya no puede ser reducirse. El objetivo es encontrar k objetos representativos que minimicen la suma de las disimilitudes de las observaciones con su objeto representativo más cercano. En resumen, el algoritmo PAM procede en dos fases como sigue. Seleccione k objetos para que se conviertan en los medoides, o en caso de que se proporcionen estos objetos utilizarlos como medoides; 2. Calcular la matriz de disimilitud si no se ha proporcionado; 3. Asignar cada objeto a su medoide más cercano; 4. Para cada cluster buscar si alguno de los objetos del cluster disminuye el coeficiente de disimilitud medio; si lo hace, seleccionar la entidad que más disminuye este Si lo hace, seleccione la entidad que más disminuye este coeficiente como el medoide para este cluster; 5. Si al menos un medoide ha cambiado, pasar a (3), si no, terminar el algoritmo. Como se ha mencionado anteriormente, el algoritmo PAM trabaja con una matriz de disimilitud, y para calcular esta matriz el algoritmo puede utilizar dos métricas: Las distancias euclidianas, que son la raíz de la suma de los cuadrados de las diferencias; Y, la distancia Manhattan que son la suma de las distancias absolutas. Tenga en cuenta que, en la práctica, debería obtener resultados similares la mayor parte del tiempo, utilizando la distancia euclidiana o la distancia Manhattan. Si sus datos contienen valores atípicos, la distancia Manhattan debería dar resultados más robustos, mientras que la euclidiana se vería influida por valores inusuales inusuales. Lea más sobre las medidas de distancia en el capítulo 3.
5.3. Computing PAM in R:
5.3.1. Data: Utilizaremos los conjuntos de datos de demostración “USArrests”, que empezamos escalando (Capítulo 2) utilizando la función R scale() como sigue:
data("USArrests") # Cargar el conjunto de datos
df <-scale(USArrests) # Escalar los datos
head(df,n=3) # Ver las 3 primeras filas de datos
## Murder Assault UrbanPop Rape
## 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
5.3.2. Required R packages and functions: La función pam() [paquete cluster] y pamk() [paquete fpc] pueden utilizarse para calcular PAM. La función pamk() no requiere que el usuario decida el número de clusters K. En los siguientes ejemplos, describiremos sólo la función pam(), cuyo formato simplificado es:
pam(x, k,metric =“euclidean”,stand =FALSE)
x: los valores posibles incluyen: Matriz de datos numéricos o marco de datos numéricos: cada fila corresponde a una observación y cada columna corresponde a una variable.
Matriz de disimilitud: en este caso, x suele ser la salida de daisy() o dist()
k: el número de clústeres - metric: la métrica de distancia que se utilizará. Las opciones disponibles son “euclides” y “manhattan”.
soporte: valor lógico; si es cierto, las variables (columnas) de x se estandarizan antes de calcular las diferencias. Se ignora cuando x es una matriz de disimilitud. Para crear un buen gráfico de los clústeres generados con la función pam(), se usará el paquete factoextra. Ahora instale los paquetes necesarios y también cárguelos con:
install.packages(c("cluster","factoextra"))
## Installing packages into '/cloud/lib/x86_64-pc-linux-gnu-library/4.2'
## (as 'lib' is unspecified)
library(cluster)
library(factoextra)
Para estimar el número óptimo de conglomerados, utilizaremos el método de la silueta promedio. La idea es calcular el algoritmo PAM usando diferentes valores de k grupos. A continuación, se dibuja la silueta de los clústeres promedio en función del número de clústeres. La silueta media mide la calidad de una agrupación. Un ancho de silueta promedio alto indica una buena agrupación. El número óptimo de conglomerados k es el que maximiza la silueta promedio sobre un rango de valores posibles para k (Kaufman y Rousseeuw [1990]). La función R fviz_nbclust() [paquete factoextra] proporciona una solución conveniente para estimar la cantidad óptima de clústeres.
library(cluster)
library(factoextra)
fviz_nbclust(df, pam,method ="silhouette")+
theme_classic()
5.3.4. Computing PAM clustering: El siguiente código R calcula el algoritmo PAM con k = 2:
pam.res <-pam(df,2)
print(pam.res)
## Medoids:
## ID Murder Assault UrbanPop Rape
## New Mexico 31 0.8292944 1.3708088 0.3081225 1.1603196
## Nebraska 27 -0.8008247 -0.8250772 -0.2445636 -0.5052109
## Clustering vector:
## Alabama Alaska Arizona Arkansas California
## 1 1 1 2 1
## Colorado Connecticut Delaware Florida Georgia
## 1 2 2 1 1
## Hawaii Idaho Illinois Indiana Iowa
## 2 2 1 2 2
## Kansas Kentucky Louisiana Maine Maryland
## 2 2 1 2 1
## Massachusetts Michigan Minnesota Mississippi Missouri
## 2 1 2 1 1
## Montana Nebraska Nevada New Hampshire New Jersey
## 2 2 1 2 2
## New Mexico New York North Carolina North Dakota Ohio
## 1 1 1 2 2
## Oklahoma Oregon Pennsylvania Rhode Island South Carolina
## 2 2 2 2 1
## South Dakota Tennessee Texas Utah Vermont
## 2 1 1 2 2
## Virginia Washington West Virginia Wisconsin Wyoming
## 2 2 2 2 2
## Objective function:
## build swap
## 1.441358 1.368969
##
## Available components:
## [1] "medoids" "id.med" "clustering" "objective" "isolation"
## [6] "clusinfo" "silinfo" "diss" "call" "data"
La salida impresa muestra primero los medoides del grupo: una matriz, qué filas son los medoides y qué columnas son. Luego el vector de agrupamiento: Un vector de números enteros (de 1:k) que indica el agrupamiento al que se asigna cada punto. Si desea agregar las clasificaciones de puntos a los datos originales, use esto:
dd <-cbind(USArrests,cluster =pam.res$cluster)
head(dd,n=3)
## Murder Assault UrbanPop Rape cluster
## Alabama 13.2 236 58 21.2 1
## Alaska 10.0 263 48 44.5 1
## Arizona 8.1 294 80 31.0 1
5.3.5. Accessing to the results of the pam() function: La función pam() devuelve un objeto de clase pam cuyos componentes incluyen primero medoids: Objetos que representan clusters, y agrupamiento: un vector que contiene el número de conglomerado de cada objeto. Se puede acceder a estos componentes de la siguiente manera:
pam.res$medoids
## Murder Assault UrbanPop Rape
## New Mexico 0.8292944 1.3708088 0.3081225 1.1603196
## Nebraska -0.8008247 -0.8250772 -0.2445636 -0.5052109
head(pam.res$clustering)
## Alabama Alaska Arizona Arkansas California Colorado
## 1 1 1 2 1 1
5.3.6. Visualizing PAM clusters: Para ver los resultados del particionamiento utilizaremos la función fviz_cluster() [factoextrapackage]. Dibuje un diagrama de dispersión de puntos de datos coloreados por números de conglomerados. Si los datos contienen más de 2 variables, se utiliza el algoritmo de análisis de componentes principales (PCA) para reducir la dimensionalidad de los datos. En este caso, las dos primeras dimensiones principales se utilizan para trazar los datos.
fviz_cluster(pam.res,
palette =c("#00AFBB","#FC4E07"),
ellipse.type ="t",
repel =TRUE,
ggtheme =theme_classic())
5.4. Conclusión à El algoritmo K-medoids, PAM, es una alternativa sólida a k-means para dividir un conjunto de datos en grupos de observación. En el método k-medoids, cada grupo está representado por un objeto seleccionado dentro del grupo. Los objetos seleccionados se denominan medoids y corresponden a los puntos ubicados más centralmente dentro del grupo. El algoritmo PAM requiere que el usuario conozca los datos e indique el número apropiado de grupos a producir. Esto se puede estimar utilizando la función fviz_nbclust [en realidad, un paquete R adicional]. La función R pam() [paquete de clúster] se puede usar para calcular el algoritmo PAM. El formato simplificado es pam(x, k), donde “x” son los datos y k es el número de clústeres a generar. Después de realizar el agrupamiento de PAM, puede usar la función de R fviz_cluster() [paquete factoextra] para mostrar los resultados. El formato es fviz_cluster(pam.res), donde pam.res son los resultados de PAM. Tenga en cuenta que para grandes conjuntos de datos, pam() puede requerir demasiada memoria o demasiado tiempo de cálculo. En este caso, es preferible la función clear(). Esto no debería ser un problema para las computadoras modernas.
6 CLARA - Clustering Large Applications à
6.1. Concepto CLARA: En vez de observar medoides para todo el conjunto de datos, CLARA considera una pequeña muestra de los datos con un tamaño fijo (tamaño de muestra) y aplica el algoritmo PAM, visto en el Capítulo 5, para generar un conjunto óptimo de medoides para la
muestra. La calidad de los medoides resultantes es medida con 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 agrupación un número predeterminado de veces para minimizar el sesgo de muestreo. Los resultados finales de la agrupación corresponden al conjunto de medoides con el mínimo coste. El algoritmo CLARA se resume en la siguiente sección.
6.2. Algoritmo CLARA: El algoritmo es el siguiente:
-Dividir aleatoriamente los conjuntos de datos en múltiples subconjuntos con tamaño fijo (tamaño de muestra)
-Calcular el algoritmo PAM en cada subconjunto y elegir los correspondientes k objetos representativos (medoides). Asigne cada observación en el conjunto de datos completo al medoide más cercano.
-Calcular la media (o suma) de las diferencias de las observaciones a su medoid más cercano. Esto se utiliza como una medida de la bondad de la agrupación.
-Mantenga el conjunto de subdatos para los cuales la media (o suma) es un mínimo. Se realiza un análisis adicional en la partición final. Contando con que cada subconjunto de datos está restringido para contener los medoids obtenidos del mejor subconjunto de datos hasta ese momento. Las observaciones extraídas al azar se agregan a este conjunto hasta que se alcanza el tamaño de la muestra.
6.3. Computing CLARA in R:
6.3.1 Data format and preparation: Para calcular el algoritmo CLARA en R, los datos deben prepararse como se indica en el Capítulo 2. Aquí, generaremos un conjunto de datos aleatorios. Para que el resultado sea reproducible, comenzamos usando la función set.seed().
set.seed(1234) # Generar 500 objetos, divididos en 2 clusters.
df <-rbind(cbind(rnorm(200,0,8),rnorm(200,0,8)),
cbind(rnorm(300,50,8),rnorm(300,50,8)))
# Especifique los nombres de las columnas y las filas
colnames(df) <-c("x","y")
rownames(df) <-paste0("S",1:nrow(df)) # Vista previa de los datos
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() [paquete de clúster] se puede usar para calcular CLARA. El formato simplificado es el siguiente:
clara(x, k,metric =“euclidean”,stand =FALSE,
samples =5,pamLike =FALSE)
Para cada fila, donde x es una matriz de datos numéricos o marco de datos, corresponde a una observación, y cada columna a una variable. Se permiten valores faltantes (NA). K es el número de conglomerados. Metric son las métricas de distancia a utilizar. Las opciones disponibles son “euclidian” y “Manhattan”. Las distancias euclidianas se refieren a la raíz de la suma de los cuadrados de las diferencias, y las distancias de manhattan son, en este caso, la suma de las diferencias absolutas.
Hay que tener en cuenta que la distancia de Manhattan es menos sensible a los valores atípicos. Soport corresponde a un valor lógico; si es verdadero, las variables (columnas) en x están estandarizadas antes calcular las diferencias. También se recomienda estandarizar variables antes de la agrupación. Muestras es el número de muestras que se extraerán del conjunto de datos. El valor predeterminado es 5 pero se recomienda un valor mucho mayor. Y pamLike es una indicación lógica si el mismo algoritmo en la función pam() debería ser usado. Esto debería ser siempre cierto. En orden de diseñar un hermoso gráfico de los clústeres generados con la función pam(), se usa el paquete facto extra.
Nuevamente, se instala y se carga con:
install.packages(c("cluster","factoextra"))
## Installing packages into '/cloud/lib/x86_64-pc-linux-gnu-library/4.2'
## (as 'lib' is unspecified)
library(cluster)
library(factoextra)
6.3.3. Estimating the optimal number of clusters: Es posible hacer la estimación del número óptimo de conglomerados en sus datos con método de silueta promedio como se describe en el capítulo de conglomerados de PAM (Capítulo 5). La función R fviz_nbclust() [paquuete factoextra] proporciona una solución para facilitar este paso.
library(cluster)
library(factoextra)
fviz_nbclust(df, clara,method ="silhouette")+
theme_classic()
6.3.4. Computing CLARA: El siguiente código R calcula el algoritmo PAM con k
# Computar CLARA
clara.res <-clara(df,2,samples =50,pamLike =TRUE)
# Imprimir componentes de clara.res
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() tiene los componentes: medoids: Objetos que representan clusters. agrupamiento: vector que contiene el número de conglomerado de cada objeto y 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. Si desea agregar las clasificaciones de puntos a los datos originales, use esto:
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
Puede acceder a los resultados devueltos por clara() de la siguiente manera:
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 observar los resultados de la partición se usará la función fviz_cluster() [paquete factoextra].
fviz_cluster(clara.res,palette =c("#00AFBB","#FC4E07"),
ellipse.type ="t",
geom ="point",pointsize =1,
ggtheme =theme_classic()
)
6.4. Conclusión à El algoritmo CLARA (Clustering Large Applications) se refiere a una extensión del método de agrupamiento PAM (Partitioning Around Medoids) para grandes conjuntos de datos. Se pretende acortar el tiempo de cálculo en el caso de un gran conjunto de datos. Como casi todos los algoritmos de partición, requieren que el usuario especifique el número apropiado de clústeres que entrarán en producción. Esto se estima al usar la función fviz_nbclust [en realidad paquete R extra]. La función R clara() [paquete de clúster] se puede usar para calcular el algoritmo CLARA. El formato simplificado es clara(x, k, pamLike = TRUE), donde “x” son los datos y k es el número de clusters a generar. Después de calcular CLARA, se puede usar la función de R fviz_cluster() [paquete factoextra] para visualizar los resultados. El formato es fviz_cluster(clara.res), donde clara.res son los ressultados CLARA