Teoría

Agrupaiento o Clustering es una técnica de aprendizaje no supervisado que agrupa datos en funcion de su similitud.

Algunos usos típicos de esta técnica son:

  • Segmentación de clientes
  • Detección de anormalidades
  • Categorización de documentos

Instalar paquetes y llamar librerías

#install.packages("cluster") #Análisis de agrupamiento
library(cluster)
#install.packages("ggplot2") #graficar
library(ggplot2)
#install.packages("data.table") #manejo de muchos datos
library(data.table)
#install.packages("factoextra") #Grafica optimización de numero de clusters
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa

Paso 2. Obtener de datos

df1<- data.frame(x=c(2,2,8,5,7,6,1,4), y=c(10,5,4,8,5,4,2,9))

Paso 3. Entender los datos

summary(df1)
##        x               y         
##  Min.   :1.000   Min.   : 2.000  
##  1st Qu.:2.000   1st Qu.: 4.000  
##  Median :4.500   Median : 5.000  
##  Mean   :4.375   Mean   : 5.875  
##  3rd Qu.:6.250   3rd Qu.: 8.250  
##  Max.   :8.000   Max.   :10.000
str(df1)
## 'data.frame':    8 obs. of  2 variables:
##  $ x: num  2 2 8 5 7 6 1 4
##  $ y: num  10 5 4 8 5 4 2 9

Paso 4.Escalar los datos

#Solo si los datos no estan en la misma escala 
#datos_escalados<-scale(datos_originales)

Paso 5. Determinar número de grupos

#siempre es un valor inicial "cualquiera", luego se optimiza.
plot(df1$x, df1$y)

grupos1 <- 3 

Paso 6. Generar grupos

cluster1<-kmeans(df1,grupos1)
cluster1
## K-means clustering with 3 clusters of sizes 3, 3, 2
## 
## Cluster means:
##          x        y
## 1 7.000000 4.333333
## 2 3.666667 9.000000
## 3 1.500000 3.500000
## 
## Clustering vector:
## [1] 2 3 1 2 1 1 3 2
## 
## Within cluster sum of squares by cluster:
## [1] 2.666667 6.666667 5.000000
##  (between_SS / total_SS =  85.8 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"

Paso 7. Optimizar el número de grupos

set.seed(123)
optimizacion1<- clusGap(df1, FUN= kmeans, nstart=1, K.max = 7)

# el K.max normalmwnte es 10, en este ejercicio al ser 8 datos se dejo en 7
plot (optimizacion1, xlab="Número de clusters K", main="Optimización de Clusters")

# se selecciona como optimo el primero punto mas alto

Paso 8. Graficar los grupos

fviz_cluster(cluster1, df1)

Paso 9. Agregar Clusters a la Base de datos

df1_cluster<- cbind(df1, cluster = cluster1$cluster)
head(df1_cluster)
##   x  y cluster
## 1 2 10       2
## 2 2  5       3
## 3 8  4       1
## 4 5  8       2
## 5 7  5       1
## 6 6  4       1

Paso 10. Conclusión

la tecnica de clusterinf permite identificar patrones o grupos naturales den los datos sin necesidad de etiquetas previas.

LS0tCnRpdGxlOiAiU2VnbWVudGFjacOzbiAoQ2x1c3RlcikiCmF1dGhvcjogIkthcmxhIE1pcmV5YSBWZWxkZXJyYWluIEEwMDIyNzQxMSIKZGF0ZTogIjIwMjUtMDgtMTgiCm91dHB1dDogCiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogVFJVRQogICAgdG9jX2Zsb2F0OiB0cnVlCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlCiAgICB0aGVtZTogY2VydWxlYW4KLS0tCiFbXShodHRwczovL2Nkbi5kcmliYmJsZS5jb20vdXNlcnVwbG9hZC8yMDQ2MjkwOS9maWxlL29yaWdpbmFsLTllZjJmYmM3NzRmODE4ZWI1MTUwZDlkMzgyZjQ5OGViLmdpZikKCiMgPHNwYW4gc3R5bGUgPSAiY29sb3I6ICMwMEJGRkY7IiA+IFRlb3LDrWEgPC9zcGFuPgoqKkFncnVwYWllbnRvKiogbyAqQ2x1c3RlcmluZyogZXMgdW5hIHTDqWNuaWNhIGRlIGFwcmVuZGl6YWplIG5vIHN1cGVydmlzYWRvIHF1ZSBhZ3J1cGEgZGF0b3MgZW4gZnVuY2lvbiBkZSBzdSBzaW1pbGl0dWQuIAoKQWxndW5vcyB1c29zIHTDrXBpY29zIGRlIGVzdGEgdMOpY25pY2Egc29uOiAKCiogU2VnbWVudGFjacOzbiBkZSBjbGllbnRlcwoqIERldGVjY2nDs24gZGUgYW5vcm1hbGlkYWRlcwoqIENhdGVnb3JpemFjacOzbiBkZSBkb2N1bWVudG9zCgojIDxzcGFuIHN0eWxlID0gImNvbG9yOiAjMDBCRkZGOyIgPiBJbnN0YWxhciBwYXF1ZXRlcyB5IGxsYW1hciBsaWJyZXLDrWFzIDwvc3Bhbj4KYGBge3J9CiNpbnN0YWxsLnBhY2thZ2VzKCJjbHVzdGVyIikgI0Fuw6FsaXNpcyBkZSBhZ3J1cGFtaWVudG8KbGlicmFyeShjbHVzdGVyKQojaW5zdGFsbC5wYWNrYWdlcygiZ2dwbG90MiIpICNncmFmaWNhcgpsaWJyYXJ5KGdncGxvdDIpCiNpbnN0YWxsLnBhY2thZ2VzKCJkYXRhLnRhYmxlIikgI21hbmVqbyBkZSBtdWNob3MgZGF0b3MKbGlicmFyeShkYXRhLnRhYmxlKQojaW5zdGFsbC5wYWNrYWdlcygiZmFjdG9leHRyYSIpICNHcmFmaWNhIG9wdGltaXphY2nDs24gZGUgbnVtZXJvIGRlIGNsdXN0ZXJzCmxpYnJhcnkoZmFjdG9leHRyYSkKYGBgCiMgPHNwYW4gc3R5bGUgPSAiY29sb3I6ICMwMEJGRkY7IiA+IFBhc28gMi4gT2J0ZW5lciBkZSBkYXRvcyA8L3NwYW4+CgpgYGB7cn0KZGYxPC0gZGF0YS5mcmFtZSh4PWMoMiwyLDgsNSw3LDYsMSw0KSwgeT1jKDEwLDUsNCw4LDUsNCwyLDkpKQpgYGAKCgojIDxzcGFuIHN0eWxlID0gImNvbG9yOiAjMDBCRkZGOyIgPiBQYXNvIDMuIEVudGVuZGVyIGxvcyBkYXRvcyA8L3NwYW4+CgpgYGB7cn0Kc3VtbWFyeShkZjEpCnN0cihkZjEpCmBgYAoKIyA8c3BhbiBzdHlsZSA9ICJjb2xvcjogIzAwQkZGRjsiID4gUGFzbyA0LkVzY2FsYXIgbG9zIGRhdG9zIDwvc3Bhbj4KCmBgYHtyfQojU29sbyBzaSBsb3MgZGF0b3Mgbm8gZXN0YW4gZW4gbGEgbWlzbWEgZXNjYWxhIAojZGF0b3NfZXNjYWxhZG9zPC1zY2FsZShkYXRvc19vcmlnaW5hbGVzKQpgYGAKCgojIDxzcGFuIHN0eWxlID0gImNvbG9yOiAjMDBCRkZGOyIgPiBQYXNvIDUuIERldGVybWluYXIgbsO6bWVybyBkZSBncnVwb3MgPC9zcGFuPgoKYGBge3J9CiNzaWVtcHJlIGVzIHVuIHZhbG9yIGluaWNpYWwgImN1YWxxdWllcmEiLCBsdWVnbyBzZSBvcHRpbWl6YS4KcGxvdChkZjEkeCwgZGYxJHkpCmdydXBvczEgPC0gMyAKYGBgCgojIDxzcGFuIHN0eWxlID0gImNvbG9yOiAjMDBCRkZGOyIgPiBQYXNvIDYuIEdlbmVyYXIgZ3J1cG9zIDwvc3Bhbj4KCmBgYHtyfQpjbHVzdGVyMTwta21lYW5zKGRmMSxncnVwb3MxKQpjbHVzdGVyMQoKYGBgCiMgPHNwYW4gc3R5bGUgPSAiY29sb3I6ICMwMEJGRkY7IiA+IFBhc28gNy4gT3B0aW1pemFyIGVsIG7Dum1lcm8gZGUgZ3J1cG9zPC9zcGFuPgoKYGBge3J9CnNldC5zZWVkKDEyMykKb3B0aW1pemFjaW9uMTwtIGNsdXNHYXAoZGYxLCBGVU49IGttZWFucywgbnN0YXJ0PTEsIEsubWF4ID0gNykKCiMgZWwgSy5tYXggbm9ybWFsbXdudGUgZXMgMTAsIGVuIGVzdGUgZWplcmNpY2lvIGFsIHNlciA4IGRhdG9zIHNlIGRlam8gZW4gNwpwbG90IChvcHRpbWl6YWNpb24xLCB4bGFiPSJOw7ptZXJvIGRlIGNsdXN0ZXJzIEsiLCBtYWluPSJPcHRpbWl6YWNpw7NuIGRlIENsdXN0ZXJzIikKIyBzZSBzZWxlY2Npb25hIGNvbW8gb3B0aW1vIGVsIHByaW1lcm8gcHVudG8gbWFzIGFsdG8KYGBgCgojIDxzcGFuIHN0eWxlID0gImNvbG9yOiAjMDBCRkZGOyIgPiBQYXNvIDguIEdyYWZpY2FyIGxvcyBncnVwb3M8L3NwYW4+CmBgYHtyfQpmdml6X2NsdXN0ZXIoY2x1c3RlcjEsIGRmMSkKYGBgCgojIDxzcGFuIHN0eWxlID0gImNvbG9yOiAjMDBCRkZGOyIgPiBQYXNvIDkuIEFncmVnYXIgQ2x1c3RlcnMgYSBsYSBCYXNlIGRlIGRhdG9zPC9zcGFuPgpgYGB7cn0KZGYxX2NsdXN0ZXI8LSBjYmluZChkZjEsIGNsdXN0ZXIgPSBjbHVzdGVyMSRjbHVzdGVyKQpoZWFkKGRmMV9jbHVzdGVyKQpgYGAKCiMgPHNwYW4gc3R5bGUgPSAiY29sb3I6ICMwMEJGRkY7IiA+IFBhc28gMTAuIENvbmNsdXNpw7NuIDwvc3Bhbj4KCmxhIHRlY25pY2EgZGUgY2x1c3RlcmluZiBwZXJtaXRlIGlkZW50aWZpY2FyIHBhdHJvbmVzIG8gZ3J1cG9zIG5hdHVyYWxlcyBkZW4gbG9zIGRhdG9zIHNpbiBuZWNlc2lkYWQgZGUgZXRpcXVldGFzIHByZXZpYXMuCgoKCg==