data("USArrests")# Loading the data set
df <-scale(USArrests)# Scaling the data
# View the firt 3 rows of the data
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
´INSTALAMOS PAQUETES´
kmeans(df, 3,iter.max =10,nstart =1)
## K-means clustering with 3 clusters of sizes 13, 20, 17
##
## Cluster means:
## Murder Assault UrbanPop Rape
## 1 -0.9615407 -1.1066010 -0.9301069 -0.9667633
## 2 1.0049340 1.0138274 0.1975853 0.8469650
## 3 -0.4469795 -0.3465138 0.4788049 -0.2571398
##
## Clustering vector:
## Alabama Alaska Arizona Arkansas California
## 2 2 2 3 2
## Colorado Connecticut Delaware Florida Georgia
## 2 3 3 2 2
## Hawaii Idaho Illinois Indiana Iowa
## 3 1 2 3 1
## Kansas Kentucky Louisiana Maine Maryland
## 3 1 2 1 2
## Massachusetts Michigan Minnesota Mississippi Missouri
## 3 2 1 2 2
## Montana Nebraska Nevada New Hampshire New Jersey
## 1 1 2 1 3
## New Mexico New York North Carolina North Dakota Ohio
## 2 2 2 1 3
## Oklahoma Oregon Pennsylvania Rhode Island South Carolina
## 3 3 3 3 2
## South Dakota Tennessee Texas Utah Vermont
## 1 2 2 3 1
## Virginia Washington West Virginia Wisconsin Wyoming
## 3 3 1 1 3
##
## Within cluster sum of squares by cluster:
## [1] 11.95246 46.74796 19.62285
## (between_SS / total_SS = 60.0 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
´SE ORGANIZAN LOS GRUPOS´
library(factoextra)
## Loading required package: ggplot2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
fviz_nbclust(df, kmeans,method ="wss") +
geom_vline(xintercept =4,linetype =2)
# Computar k significados con k = 4
set.seed(123)
km.res <-kmeans(df,4,nstart =25)
# Se imprimen 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"
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
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
PARA ACCEDER A LOS RESULTADOS QUE NOS ARROJAN LOS K SIGNIFICADOS
# Agrupar los numeros por 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
# Agrupar tamaños
km.res$size
## [1] 8 13 16 13
# Agrupar significados
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
LUEGO DE AÑADIR LOS PAQUETES PARA LOS K SIGNIFICADOS, DEBEMOS AGREGAR LOS CODIGOS PARA QUE SEAMOS CAPACES DE VISUALIZARLOS.
fviz_cluster(km.res,data =df,
palette =c("#2E9FDF","#00AFBB","#E7B800","#FC4E07"),
ellipse.type ="euclid",# Concentration ellipse
star.plot =TRUE,# Add segments from centroids to items
repel =TRUE,# Avoid label overplotting (slow)
ggtheme =theme_minimal()
)
data("USArrests")# Carga el set de datos
df <-scale(USArrests)# Medir los datos
head(df,n=3)# Ver primeras 3 lineas 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
INSTALAR PAQUETES DE K MEDOIDES
library(cluster)
library(factoextra)
´SE ORGANIZAN LOS GRUPOS´
library(cluster)
library(factoextra)
fviz_nbclust(df, pam,method ="silhouette") +
theme_classic()
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"
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
# Agrupar medoides: New Mexico, Nebraska
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
# Agrupar numeros
head(pam.res$clustering)
## Alabama Alaska Arizona Arkansas California Colorado
## 1 1 1 2 1 1
´Visualizamos los grupos´
fviz_cluster(pam.res,
palette =c("#00AFBB","#FC4E07"),# color palette
ellipse.type ="t",# Concentration ellipse
repel =TRUE,# Avoid label overplotting (slow)
ggtheme =theme_classic()
)
set.seed(1234)
# Generate 500 objects, divided into 2 clusters.
df <-rbind(cbind(rnorm(200,0,8),rnorm(200,0,8)),
cbind(rnorm(300,50,8),rnorm(300,50,8)))
# Specify column and row names
colnames(df) <-c("x","y")
rownames(df) <-paste0("S",1:nrow(df))
# Previewing the data
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
Instalamos paquetes
clara(df, 3,metric ="euclidean",stand =FALSE,
samples =5,pamLike =FALSE)
## Call: clara(x = df, k = 3, metric = "euclidean", stand = FALSE, samples = 5, pamLike = FALSE)
## Medoids:
## x y
## S168 -0.5495492 2.458514
## S362 41.4107093 54.052003
## S249 52.6021698 50.877808
## Objective function: 8.913857
## 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 113 187
## Best sample:
## [1] S6 S45 S51 S67 S75 S85 S90 S94 S97 S110 S111 S160 S168 S170 S180
## [16] S181 S201 S219 S249 S260 S264 S275 S296 S304 S307 S309 S317 S321 S337 S361
## [31] S362 S369 S374 S379 S397 S398 S402 S411 S420 S422 S424 S436 S451 S465 S488
## [46] S489
##
## Available components:
## [1] "sample" "medoids" "i.med" "clustering" "objective"
## [6] "clusinfo" "diss" "call" "silinfo" "data"
install.packages(c("cluster","factoextra"))
## Warning: packages 'cluster', 'factoextra' are in use and will not be installed
library(cluster)
library(factoextra)
´Estimando numero apropiado para grupos´
library(cluster)
library(factoextra)
fviz_nbclust(df, clara,method ="silhouette") +
theme_classic()
# 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"
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
# Medoids
clara.res$medoids
## x y
## S121 -1.531137 1.145057
## S455 48.357304 50.233499
# Clustering
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
´Visualizando CLARA´
fviz_cluster(clara.res,
palette =c("#00AFBB","#FC4E07"),# color palette
ellipse.type ="t",# Concentration ellipse
geom ="point",pointsize =1,
ggtheme =theme_classic()
)
´RESUMEN CAPITULOS´
°Chapter 4 - 5
El presente informe se refiere al tema del agrupamiento de particiones que es de gran importancia para clasificar las observaciones en un conjunto de datos en grupos según la similitud. Estos algoritmos requieren que el analista caracterice el número de clústeres a generar.
Además, existen algunos métodos que ayudan al agrupamiento de particiones en cuanto a sus características. Estos son:
-Agrupación de k-medias, donde cada grupo está representado por el centro de los puntos de datos que pertenecen a ese grupo.
-Agrupamiento de k-medoides o PAM, cada uno de estos grupos está representado por un objeto dentro del grupo.
-Algoritmo CLARA, esta es una extensión de PAM para grandes conjuntos de datos.
Ahora bien, estos métodos serán expuestos con mayor detalle por lo que cubren una gran variedad de aplicaciones.
En primer lugar, está la agrupación en clústeres de k-medias el cual 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, este a su vez divide los objetos en grupos para que los objetos dentro de un conglomerado sean los más similares posible y también cada conglomerado está representado por su centro o baricentro, que corresponde al promedio de las puntuaciones asignadas a ese conglomerado. Para apreciar más su importancia se establecen algunas ideas básicas que pueden mejorar su comprensión en la agrupación de observaciones, básicamente la idea básica principal detrás del agrupamiento de k-medias es definir grupos de tal manera que las diferencias comunes dentro de los grupos (llamadas variaciones comunes dentro de los grupos) se minimicen. El primer paso para usar el agrupamiento de k-medias es especificar el número de conglomerados (k) que se generarán en la solución final. El algoritmo primero selecciona aleatoriamente k objetos del conjunto de datos como centros de agrupación inicial. Los objetos seleccionados también se conocen como medias de conglomerados o centroides. Luego, a cada objeto restante se le asigna su centroide más cercano, donde el centroide más cercano se determina usando la distancia euclidiana entre el objeto y la media del grupo. Este paso se denomina “paso de asignación de clúster”.
Después de la etapa de distribución, el algoritmo calcula nuevos promedios para cada grupo. El término de grupo “actualización de centroide” se utiliza para diseñar esta operación. Ahora que se han vuelto a calcular los centros, vuelva a comprobar cada observación para ver si podría estar más cerca de otro grupo. Todos los objetos se redistribuyen utilizando los medios de clúster actualizados. Y, por último, Los pasos de asignación de conglomerados y actualización del centroide se repiten iterativamente hasta que la asignación de conglomerados deja de cambiar.
Como cualquier técnica, el agrupamiento de k-medias se tiene que calcular a partir de una serie de pasos que serán expuestos a continuación:
1.Datos
En esta parte, los conjuntos de datos de “USArrests” se tendrán en cuenta y deberían contener únicamente variables continúas puesto que este algoritmo utiliza promedios variables y para que no solo se concentre en una variable, la función R scale() asumirá la responsabilidad de que los datos vayan escalando.
2.Paquetes y funciones de R requeridos
Kmeans() [stats package] es la función R estándar para este agrupamiento la cual es simplificada de la siguiente manera:
kmeans(x, centers, iter.max = 10, nstart = 1)
3.Estimación del número óptimo de conglomerados
Esta técnica requiere que el usuario especifique el número de agrupaciones que se están trabajando para poder generalas, la idea es calcular la agrupación de k-medias usando diferentes valores de las agrupaciones k y la opción más viable es utilizar la función de R fviz_nbclust() [in factoextra package] con el fin de proponer una solución confiable con respecto a la estimación.
4.Clustering de k-medias en R
Este paso tiene como propósito hacer visible los resultados obtenidos a partir de los pasos anteriores y reproducirlos de tal manera que sean exactamente iguales a los resultados que se muestran a continuación:
set.seed(123)
km.res <- kmeans(df, 4, nstart = 25)
5.Accediendo a los resultados de la función kmeans()
Esta función devuelve una lista de componente, que incluye: clúster, centros, totts que es la suma total de cuadrados, withinss (vector de suma de cuadrados dentro de un grupo), tot.withinss (suma total de cuadrados dentro del grupo), betweenss que es la suma de cuadrados entre grupos y por último, el tamaño.
6.Visualización de clústeres de k-medias
Se recomienda trazar los resultados del conglomerado. Se pueden utilizar para evaluar la elección del número de conglomerados y para comparar dos análisis de conglomerados diferentes. Además, para mayor comprensión los datos serán visibles en un gráfico de dispersión de acuerdo al grupo al que pertenecen. Sin embargo, si los datos contienen más de 2 variables, habrá un problema porque no se sabe qué variables tomar para el grafico. La alternativa sería aplicar un algoritmo de reducción de dimensionalidad en cuanto al número de dimensiones trabajadas, como lo es el Análisis de componentes principales que genera dos nuevas variables a partir de cuatro variables iniciales.
° Chapter 6
Los paquetes de R requeridos tienen diferentes funciones que se usan para conocer pam, las cuales tienen diferentes variables que se van a definir a continuación: primero está k que hace referencia al número de grupos, se encuentra las métricas que son las medidas que se usarán al momento de mostrar las tablas. Además, el soporte permite validar si las x están dispuestas correctamente para calcular las diferencias entre los distintos valores. También, hay otros aspectos importantes al momento de crear este tipo de tablas y es el agrupamiento, el cual se encarga de asignarle un orden a cada punto. En este sentido, resulta fundamental acceder a los resultados de la función pam, los cuales cuentan con componentes importantes como el agrupamiento antes mencionado y medoides que básicamente representan clústeres (que se aplican a los conglomerados de los aparatos electrónicos para agruparlos o categorizarlos). Para representar estos clústeres se usan funciones como, por ejemplo: fviz_cluster() [factoextra paquete], la dimensionalidad se logra reducir si se incluye el algoritmo de componentes principales.
Uno de los métodos k-medoides es conocido como agrupación de grandes aplicaciones que se define como el algoritmo de Clara, el cual se encarga de manejar y controlar datos que tienes muchas observaciones para optimizar la memoria RAM. Este método en específico es muy preciso, puesto que selecciona muestras pequeñas para una mayor exactitud en los datos mediante el uso del algoritmo PAM en cada subconjunto y al momento de asignar observaciones a un medoide. El algoritmo Clara también puede ser calculado en R. Sin embargo, para calcular Clara se debe conocer que en la matriz de datos a las variables les corresponde las columnas y a las observaciones las filas. Además, para las muestras que se van a evaluar se recomienda que sean mayores a 5 (valor predeterminado) y también estandarizar las variables antes de asociarlas.
En esta sección se logró conocer el funcionamiento de los k-medoides y la confiabilidad que estos brindan al momento de realizar una partición de datos en ciertos grupos que han sido seleccionados. Cabe resaltar, los k-medoides se enfocan en objetos que se denominan puntos centrales, sobre los cuales se van a ejecutar las distintas funciones. Además, en este capítulo se exponen los algoritmos pam y clara de la forma más sencilla y útil para que todos los internautas logren comprender los datos y ejecutar estas funcione y algoritmos, así como también, logren especificar de manera eficiente el número de los clústeres(x) que se reproducirán a través de la función como R fviz_cluster() [paquete factoextra] en el caso de que se quiera usar el algoritmo Clara.