
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==