DBSCAN: Density-based spatial clustering of applications with noise
Es un método de clusterización adecuado para buscar patrones de agrupación en el espacio físico, este método es más adecuado para los datos en los que los métodos jerárquicos no funcionan del todo bien debido al ruido y los valores atípicos.
Este algorítmo agrupa los puntos que están más cercanos respecto a alguna métrica, comúnmente se utiliza la distancia euclidiana, además para este algorítmo se tiene que cada cluster contendrá un mínimo de puntos.
Este método tiene sus ventajas y desventajas respecto otros métodos de clusterización (K-MEANS por ejemplo) y dependiendo del problema que se quiera analizar se debe elegir el método más adecuado, aún así hay varios aspectos que deben ser tomados en cuenta.
También tiene algunas desventajas
Este método necesita sólo dos parámetros
eps: Esta es la distancia que se tomará como radio de los clusters
Este parámetro se puede elegir “correctamente” basándose en la distancia del dataset (utilizando un K-distance Plot)
Es preferible utilizar valores pequeños
minPoints: Mínimo de números que deben estar en un grupo para que el algorítmo lo tome com un cluster
\[minPoints \geq D + 1\]
Con la base iris Tenemos 150 observaciones y 5 variables, una de ellas es “species” que es a la clasificación que trataríamos llegar aplicando el algorítmo así que la removeremos del dataset
Cabe mencionar que sólo hay 3 tipos de especies, así que lo ideal sería obtener esos 3 clusters.
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
Primero, tenemos 4 variables restantes en la base así que tomaremos 5 como el mínimo número de puntos.
Ahora, para elegir el radio de los grupos utilizaremos un K-Distance Plot.
#df: dataset sin variable "species"
#k: el número mínimo de puntos que elegimos
kNNdistplot(df, k = 5 )
abline(h = 0.4, lty = 2)
Por lo que se observa en la gráfica tomaremos eps= 0.4
Por último, al aplicar la función y graficar el resultado se observaron 4 clusters y con el fin de que el resultado se acercara más a la clasificación con la que ya cuenta el dataset se modificó el radio a 4.2 y así se llegó a 3 clusters.
#Con eps=0.4
cl<-dbscan(df,eps=0.4,MinPts = 5)
head(cbind(df,cl$cluster))
## Sepal.Length Sepal.Width Petal.Length Petal.Width cl$cluster
## 1 5.1 3.5 1.4 0.2 1
## 2 4.9 3.0 1.4 0.2 1
## 3 4.7 3.2 1.3 0.2 1
## 4 4.6 3.1 1.5 0.2 1
## 5 5.0 3.6 1.4 0.2 1
## 6 5.4 3.9 1.7 0.4 1
hullplot(df,cl$cluster, main = "Convex cluster Hulls, eps= 0.4")
#Con eps=0.42
cl1<-dbscan(df,eps=0.42,MinPts = 5)
head(cbind(df,cl1$cluster))
## Sepal.Length Sepal.Width Petal.Length Petal.Width cl1$cluster
## 1 5.1 3.5 1.4 0.2 1
## 2 4.9 3.0 1.4 0.2 1
## 3 4.7 3.2 1.3 0.2 1
## 4 4.6 3.1 1.5 0.2 1
## 5 5.0 3.6 1.4 0.2 1
## 6 5.4 3.9 1.7 0.4 1
hullplot(df,cl1$cluster, main = "Convex cluster Hulls, eps= 0.42")
Nuevamente debemos elegir los parámetros, el mínimo de puntos que habrá en cada cluster y la distancia que se utilizará.
Elegiremos que tengan al menos 4 puntos y eps = 1
Aplicamos la función y graficamos el resultado
En esta se observa que no hay tantos clusters aún tomando una distancia relativamente grande y el mínimo de puntos es igual al número de variables, esta base de datos es muy pequeña y puede ser por eso que no logre encontrar tantos grupos.
Por último agrego el ejemplo con datos que vienen con la paquetería en la cuál se pueden observar los resultados
Es una base de datos de 8000 observaciones y 2 variables
Tomaremos eps=5