R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

summary(cars)
##      speed           dist       
##  Min.   : 4.0   Min.   :  2.00  
##  1st Qu.:12.0   1st Qu.: 26.00  
##  Median :15.0   Median : 36.00  
##  Mean   :15.4   Mean   : 42.98  
##  3rd Qu.:19.0   3rd Qu.: 56.00  
##  Max.   :25.0   Max.   :120.00

Including Plots

You can also embed plots, for example:

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.

#Agrupación de K-Means———————————————————

#La agrupación en clústeres de K-medias (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 (es decir, k clústeres). #donde k representa el número de grupos especificado por el analista. #Agrupando k-medias. Cada grupo está representado por un centro (centroide) #que es el promedio de los puntos asociados con el grupo

#En este artículo, describiremos el algoritmo k-means y brindaremos ejemplos #prácticos usando el software R.

#K-significa ideas básicas—————————————————–

#La idea básica detrás del agrupamiento de k-medias es definir los #clústeres de tal manera que la variación total dentro del clúster se minimice. #Hay varios algoritmos de k-medias disponibles. El algoritmo estándar es el #algoritmo de Hartigan-Wong (1979), que define la variación total dentro del #grupo como la suma de las distancias euclidianas al cuadrado entre los #elementos y sus centroides correspondientes.

\(W(C_k)=\sum{x_i \in C_k}(x_i-\mu_k)^2\)*

#xi diseña un punto de datos perteneciente al clusterCk #μk es el valor medio de los puntos asignados al clusterCk

#Definimos la variación total dentro del conglomerado de la siguiente manera:

#Definimos la variación total dentro de un cúlster así:

\(tot.withinss=\sum_{k=1}^{k}W(C_{k})=\sum_{k=1}^{k}\sum_{x_{i}\epsilon\mathbb{C}_{k}}(x_{i}-\mu_{k})^{2}\)*

#La suma total de cuadrados dentro del grupo mide la compacidad del #agrupamiento y queremos que sea lo más pequeño posible.

Algoritmo K- Means———————————————————-

#El algoritmo comienza seleccionando aleatoriamente k objetos del conjunto #de datos para que sirvan como centros iniciales de los grupos. Después del #paso de asignación, el algoritmo calcula nuevas medias para cada grupo. #Todos los objetos se reasignarán utilizando los medios de clúster actualizados. #El algoritmo de K-medias se puede resumir de la siguiente manera:

#1. Especifique la cantidad de clústeres (K) para crear (del analista)

#2. Seleccione aleatoriamente k objetos del conjunto de datos como centros #o medios del grupo inicial.

#3. Relacione cada observación con el centroide más cercano basado en Euclides #y la distancia entre el objeto y el centroide.

#4. Para cada uno de los k conglomerados, calcule la nueva media de todos los #puntos de datos en el conglomerado para actualizar los centroides del #conglomerado. El centoide del grupo k-ésimo es un vector de longitud p que #contiene las medias de todas las variables para las observaciones en el grupo #k-ésimo. es el número de variables.

#5. Minimice iterativamente la suma dentro de la suma de los cuadrados. #Por lo tanto, repita los pasos 3 y 4 hasta que la asignación del clúster #deje de cambiar o se alcance el número máximo de iteraciones. De manera #predeterminada, el software R usa 10 como el número máximo predeterminado #de iteraciones.

Cálculo del clustering de k-means en R————————————–

#Datos———————-

#Utilice el registro de demostración “USArrests”. #Los datos deben procesarse como se describe en el Capítulo 2. #Dado que el algoritmo k-means usa promedios móviles, los datos #deben contener solo variables continuas. No queremos que el algoritmo #k-means dependa de la variable de la unidad, así que comencemos a escalar #los datos usando la función Rscale() de la siguiente manera:

data(“USArrests”) df <-scale(USArrests) head(df,n=3)

Paquetes y funciones de R necesarios—————–

#La función R estándar para el agrupamiento de k-means iskmeans()[statspackage], #cuyo formato simplificado es el siguiente:

kmeans(x, centers,iter.max =10,nstart =1)

#x: matriz numérica, marco de datos numérico o vector numérico

#Centros: Los valores posibles son el número de conglomerados (k) #o un conjunto de centros de conglomerados iniciales (únicos). #valores numéricos, se elige un conjunto aleatorio de filas #(distinguibles) de x como centros iniciales.

#iter.max: Número máximo de iteraciones permitidas. #El valor predeterminado es 10.

#nstart - número de particiones de arranque aleatorias centradas en números. #En la mayoría de los casos, se recomienda probar nstart > 1.

#Para crear un hermoso gráfico de los clústeres generados #con la función kmeans(), usará el paquete factoextra.

#Instalando factoextrapackage como:

#Cargando factoextra:

library(factoextra)

Estimación del número óptimo de clusters——————————–

#La agrupación en clústeres de K-Means requiere que el usuario especifique #la cantidad de clústeres que se generarán. La pregunta básica es: ¿Cómo #elegir el número apropiado de conglomerados esperados (k)?

#La posición de la curva (rodilla) en el gráfico suele tomarse como una #indicación de un buen número de conglomerados. La función R fviz_nbclust() #[en realidad un paquete adicional] proporciona una solución conveniente #para estimar la cantidad óptima de clústeres. eso es todo.

library(factoextra)

fviz_nbclust(df, kmeans,method =“wss”)+geom_vline(xintercept =4,linetype =2)

#El gráfico anterior representa la varianza dentro de los grupos. #Disminuye a medida que aumenta k, pero se puede ver una curva (o “codo”) #en k = 4. Esta curva indica que los grupos adicionales más allá del cuarto #tienen poco valor. En la siguiente sección, clasificaremos las observaciones #en 4 grupos.

Cálculo de la agrupación de k-means————————————-

#Como el algoritmo de agrupamiento de k-medias comienza con k centroides #seleccionados aleatoriamente, siempre se recomienda usar la función set.seed() #para establecer una semilla para el valor aleatorio de R.

set.seed(123)

#CLUSTERING DE K-MEDIAS EN R———————————————–

#generador de números El objetivo es hacer que los resultados sean #reproducibles, de modo que el lector de este artículo obtenga exactamente #los mismos resultados que los que se muestran a continuación:

km.res <-kmeans(df,4,nstart =25)

#Especificamos nstart = 25 porque el resultado final del agrupamiento de #k-medias está sujeto a asignaciones iniciales aleatorias. Agrupamiento. #El valor predeterminado de nstartin R es 1. Sin embargo, se recomienda #enfáticamente calcular la agrupación de k-medias con un valor grande de nstart.

visualizar los resultados —————————————————

print(km.res)

#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)

#Si desea agregar las clasificaciones de puntos a los datos originales, #use esto:

dd <- cbind(USArrests, cluster = km.res$cluster) head(dd)

Acceso a los resultados de la función kmeans()—————————

#La función kmeans() devuelve una lista de componentes, que incluye:

#cluster: Un vector de enteros (desde 1:k) que indica el cluster al que se #asigna cada punto

#centros: una matriz de centros de conglomerados (medios de conglomerados)

#totss: La suma total de cuadrados (TSS), i.eq(xi≠ ̄x)2. TSS mide la varianza #total en los datos.

#withinss: Vector de suma de cuadrados dentro de un grupo, un componente #por grupo

#tot.withinss: suma total de cuadrados dentro del grupo, es decir, sum(withinss)

#betweenss: la suma de cuadrados entre grupos, es decir, totss≠tot.withinss

#tamaño: El número de observaciones en cada grupo

#Se puede acceder a estos componentes de la siguiente manera:

km.res$cluster

head(km.res$cluster,4)

tamaño del cluster—————————————————-

km.res$size

medios de cluster————————————————————

km.res$centers

Visualización de los clusters de k-means———————————-

#Ahora visualicemos los datos en un diagrama de dispersión, coloreando #cada punto de datos según su asignación de grupo. El problema es que #los datos contienen más de una variable. La pregunta es qué variables #elegir para el diagrama de dispersión xy. Esto se aplica a las cuatro #variables y produce dos nuevas variables utilizadas para crear la gráfica.

#En otras palabras, si tenemos un conjunto de datos multidimensional, una #solución es realizar un análisis de componentes principales (PCA) y trazar #puntos de datos de acuerdo con las coordenadas de los dos primeros componentes #principales.

#La función fviz_cluster() [factoextrapackage] se puede utilizar para visualizar #fácilmente k-meansclusters. Toma los resultados de k-medias y los datos #originales como argumentos. En la gráfica resultante, las observaciones #se representan por puntos, usando componentes principales si el número de #variables es mayor que 2. También es posible dibujar elipses de concentración #alrededor de cada grupo.

fviz_cluster(km.res,data =df,palette =c(“#2E9FDF”,“#00AFBB”,“#E7B800”,“#FC4E07”), ellipse.type =“euclid”,star.plot =TRUE,repel =TRUE,ggtheme =theme_minimal())

Ventajas y desventajas del clustering K-means—————————-

#El agrupamiento de K-means es un algoritmo muy simple y rápido. #Puede manejar con eficiencia conjuntos de datos muy grandes. Sin embargo, #hay algunas debilidades, que incluyen:

#1. Supone un conocimiento previo de los datos y requiere que el analista #elija un número apropiado de conglomerados (k) por adelantado.

#2. El resultado final obtenido está sujeto a la selección aleatoria inicial #de los centros del clúster. ¿Por qué es esto un problema? Esto se debe a que #podemos elegir un conjunto diferente de centros iniciales cada vez que #ejecutamos el algoritmo en el mismo conjunto de datos. Esto puede conducir #a diferentes resultados de agrupamiento para diferentes iteraciones del #algoritmo.

#3. Sensible a los valores atípicos.

#4. Si reordena los datos, es muy probable que obtenga soluciones diferentes #cada vez que reordene los datos.

Alternativa a los clustering de k-means——————————–

#Las posibles soluciones a estas debilidades incluyen:

#1. Solución al Problema 1: Calcule k-medias sobre un rango de valores de k. #Por ejemplo, variar k entre 2 y 10. Luego compare los resultados de #agrupamiento obtenidos para diferentes valores de k y elija el mejor k.

#2. Solución para el ejercicio 2: calcule el algoritmo K-Means varias veces #usando diferentes centros de conglomerados iniciales. La corrida con la suma #de cuadrados más pequeña dentro del conglomerado se elige como la solución de #conglomerado final.

#3. Para evitar el sesgo de valores atípicos excesivos, podemos usar #PAMalgorithm, que es menos sensible a los valores atípicos.

K- Medoids————————————————————–

Concepto PAM—————————————————————

#Se le denomina medoide a un objeto dentro de un conglomerado el cual #la diferencia que presenta entre él y los demás miembros del conglomerado #es mínima. El centro de un conglomerado se calcula como el valor medio de #todos los puntos de datos en el conglomerado.

#K-medoid es una alternativa robusta al agrupamiento de K-medias, es decir, #es menos sensible al ruido y a los valores atípicos el algoritmo, a diferencia #de K-mean, medoids es un centro de conglomerado en un lugar de medios. Una de #sus utilidades es determinar el número óptimo de conglomerados, este es llamado #metodo silueta y se describe a lo largo del capitulo.

Algoritmo PAM———————————————————-

#K-medias se caracteriza por ser muy sensible a los valores atípicos, lo #cual esto afecta a la asignacion de observaciones de conglomerados. En resumen, #el algoritmo PAM brinda un algoritmo que es más robusto.

Cálculo de PAM en R——————————————

Data ——————————–

#Utilizaremos los conjuntos de datos de demostración “USArrests”, #que empezamos a escalar utilizando la función de Rcale()como se indica #a continuación:

data(“USArrests”)

df <-scale(USArrests)

head(df,n=3)

Paquetes y funciones de R necesarios————————————-

#La función pam() [clusterpackage] y pamk()[fpcpackage] pueden #utilizarse para calcular PAM.

#La función pamk() no requiere que el usuario decida el número de clusters K.

pam(x, k, metric = “euclidean”, stand = FALSE)

#x: valores posibles

#k: El número de clusters

#metric: la métrica de la distancia a utilizar. Las opciones disponibles son #“euclidiana” y “manhattan”.

#stand: valor lógico; si es verdadero, las variables (columnas) de #x se estandarizan antes de calcular las disimilitudes. Se ignora cuando #x es una matriz de disimilitud.

library(cluster)

library(factoextra)

Estimación del número óptimo de clusters———————————

#Para estimar el número óptimo de clusters, utilizaremos el método de #la silueta media. La idea es calcular el algoritmo PAM utilizando diferentes #valores de clusters k. A continuación, se dibuja la silueta media de los #clusters en función del número de clusters. La silueta media mide la calidad #de una agrupación.

#La función de R fviz_nbclust() [factoextrapackage] proporciona una solución #conveniente para estimar el número óptimo de clusters.

fviz_nbclust(df, pam, method = “silhouette”)+ theme_classic()

Cálculo de la clusterización de PAM—————————————

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

pam.res <-pam(df,2)

print(pam.res)

#La salida muestra:

#los medoides del cluster: una matriz, cuyas filas son los medoides y #las columnas son variables.

#el vector de clustering: Un vector de enteros (de 1:k) que indica el #cluster al que se asigna cada punto.

#Si se quiere añadir las clasificaciones de puntos a los datos originales, #se utiliza esto:

dd <-cbind(USArrests,cluster =pam.res$cluster)

head(dd,n=3)

Acceso a los resultados de la función pam()—————————-

#La función pam() devuelve un objeto de la clase pam cuyos componentes #incluyen: - medoides: Objetos que representan clusters. - clustering: #un vector que contiene el número de cluster de cada objeto

pam.res$medoids

head(pam.res$clustering)

Visulazación del os clusters PAM————————————

#Para visualizar los resultados de la partición, utilizaremos:

#la función fviz_cluster() [factoextrapackage]. Dibuja un gráfico de dispersión #de los puntos de datos coloreados por los números de cluster. 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, #se utilizan las dos primeras dimensiones principales para trazar los datos.

fviz_cluster(pam.res,palette =c(“#00AFBB”,“#FC4E07”),ellipse.type =“t”, repel =TRUE,ggtheme =theme_classic())

Resumen————————————————————

#El algoritmo K-medoids, PAM, es una alternativa robusta a k-means para #la partición de un conjunto de datos en clusters de observación. #En el método k-medoids, cada clúster está representado por un #objeto seleccionado dentro del mismo. Los objetos seleccionados #se denominan medoides y corresponden a los puntos más céntricos del clúster.

CLARA - Clustering de grandes aplicaciones——————————

#Es una extensión de los métodos k-medoides para tratar datos #que contienen un gran número de objetos (más de varios miles de observaciones) #con el fin de reducir el tiempo de computación y el problema de almacenamiento #de RAM. Esto se consigue utilizando el enfoque de muestreo.

Concepto CLARA

#CLARA (Clustering Large Applictions) es una extensión de los métodos #“K-medoids” para manejar datos que contengan una gran cantidad de objetos #para reducir el tiempo de cómputo y el problema de almacenamiento en RAM.

#En vez de encontrar medoides para todo el conjunto de datos, CLARA considera #una pequeña muestra de los datos con un tamaño específico y aplica el algoritmo #PAM para generar un óptimo conjunto de medoides para la muestra. La calidad de #dichos medoides resultantes se mide por la disimilitud 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 agrupamiento un número predeterminado #de veces para minimizar el sesgo de muestreo. Los resultados dl agrupamiento #se refieren a este conjunto de medoides con el costo mínimo.

Algoritmo CLARA————————————————————-

#El algoritmo es el siguiente:

#Dividir aleatoriamente los conjuntos de datos en múltiples subconjuntos #con tamaño fijo

#Calcule el algoritmo PAM en cada subconjunto y elija los k objetos #representativos correspondientes (medoides). Asigne cada observación #del conjunto de datos completo al medoide más cercano.

#Calcular la media (o la suma) de las diferencias de las observaciones #con su medoide más cercano.

#Conservar el conjunto de subdatos para el que la media (o suma) es mínima.

#Tenga en cuenta que cada conjunto de subdatos está obligado a contener los #medoids obtenidos del mejor conjunto de subdatos hasta ese momento.

Calcular CLARA en R————————————————–

Formato y preparación de los datos————————————–

#Aquí, se genera un conjunto de datos aleatorios. Para que el resultado #sea reproducible, se empieza usando 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)

Paquetes y funciones de R necesarios————————————

#La función clara () [cluster package] se puede usar para calcular CLARA. #El formato simplificado es el siguiente:

#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.

#k: el número de clústeres.

#metric: las métricas de distancia a utilizar. Las opciones disponibles #son “euclides” y “manhattan”. Las distancias euclidianas son la raíz de la #suma de los cuadrados de las diferencias, y las distancias de Manhattan son #la suma de las diferencias absolutas.

#soporte: valor lógico; si es cierto, las variables (columnas) en x se #estandarizan antes de calcular las diferencias.

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

#pamLike:indicación lógica si se debe usar el mismo algoritmo en la función pam().

#Para crear un gráfico de los clústeres generados con la función pam(), #usaremos el paquete factoextra.

install.packages(c(“cluster”,“factoextra”))

library(cluster)

library(factoextra)

Estimación del número óptimo de clusters————————————

#Para estimar el número óptimo de clústeres en sus datos, es posible #utilizar el método de silueta promedio. La función R fviz_nbclust() #[factoextra package] proporciona una solución para facilitar este paso.

fviz_nbclust(df, clara,method =“silhouette”)+theme_classic()

Computing CLARA———————————————————-

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

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

print(clara.res)

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

#medoids: Objetos que representan clústeres.

#clustering: un vector que contiene el número de clúster 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)

#Se puede acceder a los resultados devueltos por clara() como sigue:

#clara.res$medoids

head(clara.res$clustering,10)

#Los medoides son S121, S455

Visualización de los clusters de CLARA

#Para visualizar los resultados de la partición, usaremos la función #fviz_cluster() [factoextra package]. Dibuja un diagrama de dispersión #de puntos de datos coloreados por números de clústeres.

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

Resumen

#El algoritmo CLARA (Clustering Large Applications) es una extensión del #método de agrupamiento PAM (Partitioning Around Medoids) para grandes #conjuntos de datos.

#Como casi todos los algoritmos de partición, requiere que #el usuario especifique el número apropiado de clústeres que #se van a producir. Esto se puede estimar utilizando la función #fviz_nbclust [infactoextraR package].

#La función de R clara () [clusterpackage] se puede utilizar 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 clústeres que se generarán.

#Después de calcular CLARA, se puede usar la función de R fviz_cluster() #[factoextra package] para visualizar los resultados. #El formato es fviz_cluster(clara.res), donde clara.res son los resultados #de CLARA.