En este artículo te mostraremos, por medio de un ejercicio de clúster por densidad, cómo funciona este elemento.
Para ello, utilizaremos el dataset Iris, una de las bases de datos más conocida que se utiliza para determinar factores como el número mínimo de clústeres, el punto central basado en densidad o la distancia máxima entre clústeres.
Este dataset fue introducido por Ronald Fisher en su artículo The use of multiple measurements in taxonomic problems (El uso de medidas múltiples en problemas taxonómicos) en el año 1936.
El conjunto de datos contiene 3 clases (iris setosa, iris virginica e iris versicolor) de 50 instancias cada una, donde cada clase se refiere a un tipo de planta de iris. Una clase es linealmente separable de las otras dos; estos últimos no son linealmente separables entre sí.
Se miden cuatro características en centímetros: el largo del sépalo, el largo del pétalo, el ancho del sépalo y el ancho del pétalo.
Ejercicio de clúster por densidad: dataset Iris
#ejercicio de clúster por densidad
data (iris)
preproc <- caret :: preProcess (iris [ ,1 : 4], method = c ("center", "scale"))
iris_norm <- predict (preproc, iris [ , 1 : 4])
summary (iris_norm)
Vamos a trabajar con un número de muestras pequeño, tan solo cuatro. En ejercicios anteriores hemos trabajado hasta con 30 muestras, lo cual se convierte en un inconveniente a la hora de tratar de analizar los datos y hacer el proceso de clustering. No obstante, como en este caso son solo 4 muestras para calcular el kNN (k-nearest neighborhoods, los k-vecinos más cercanos), especulamos que el proceso será un poco más sencillo de ejecutar.
Buscamos el valor de eps mirando la distancia de cada muestra a sus 4 vecinos más próximos:
#ejercicio de clúster por densidad
KNNdistplot (iris_norm, k = 4)
grid ()
Vemos que el cálculo se da alrededor del 0.6, es decir, el valor en el que se empiezan a dispersar los datos y empiezan a encontrarse distancias más grandes es 0.6.
Si pintamos cómo quedan los clústeres que nos ha definido el algoritmo, podemos notar que nos ha definido dos clústeres marcados con los colores rojo y verde.
El algoritmo nos ha pintado los distintos portales que podemos tener, cada uno de los modelos de los diferentes grupos.
Observamos también que los clústeres sí se separan bastante entre sí.
#ejercicio de clúster por densidad
cl <- dbscan (iris_norm, eps = 0.6, minPts = 4)
pairs (iris_norm, col = cl$cluster + 1L)
Si intentamos ver los resultados por especies, diferenciamos correctamente la setosa (que tiene 49 puntos); sin embargo, la versicolor y la virgínica están un poco más dispersas.
#ejercicio de clúster por densidad
df = data.frame (dist = kNNdist (iris_norm, k = 4), cl = as.factor (cl$cluster), sp = iris$Species)
table (dfscl, dfssp)
setosa | versicolor | virginica | |
0 | 1 | 6 | 11 |
1 | 49 | 0 | 0 |
2 | 0 | 44 | 39 |
Ahora, pintaremos las distancias del k – nearest neighborhood o kNN entre cada uno de los grupos:
#ejercicio de clúster por densidad
head (df)
dist | cl | sp | |
<dbl> | <fct> | <fct> | |
1 | 0.2363181 | 1 | setosa |
2 | 0.2363181 | 1 | setosa |
3 | 0.3100027 | 1 | setosa |
4 | 0.2829432 | 1 | setosa |
5 | 0.2905728 | 1 | setosa |
6 | 0.4625350 | 1 | setosa |
Ahora, pintaremos cada una de estas distancias, pero con relación a las distancias medias de cada uno de los grupos:
#ejercicio de clúster por densidad
library (dplyr)
df %>% group_by (cl) %>% summarize (mean (dist))
cl | mean (dist) |
<fct> | <dbl> |
0 | 0.9844577 |
1 | 0.4015259 |
2 | 0.4932574 |
Si nos fijamos bien, en el grupo 0, en el que está el ruido, es donde hay más distancia media entre elementos. El kNN es más grande, es decir, la distancia media hasta encontrar 4 elementos es más grande cuando se trata de los puntos de ruido, lo cual, por supuesto, es lógico.
La distancia media entre los grupos 1 y 2 es más compacta. Esto significa que lo que tiene que crecer esa esfera hasta encontrar 4 vecinos es menos (alrededor de 0.5 puntos por debajo del nivel de ruido).
¿Qué aprendiste hoy?
Has aprendido a trabajar con uno de los datasets más famosos en el mundo del data mining. ¿Te gustaría seguir aprendiendo sobre Big Data? En Keepcoding tenemos para ti las mejores opciones, en este caso se trata de nuestro Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp, con el que podrás instruirte acerca de todas las temáticas relacionadas con el mundo del Big Data, la inteligencia artificial y el machine learning, rama a la que pertenece la minería de datos. ¡Anímate y solicita más información!