Implementación de Python de la agrupación en clústeres DBSCAN

1. Descripción

        La agrupación DBSCAN (agrupación espacial de aplicaciones con ruido basada en densidad) es un algoritmo de agrupación basado en densidad. Puede dividir datos en diferentes categorías según la densidad de los puntos de datos y puede identificar automáticamente valores atípicos. La idea central del algoritmo de agrupación DBSCAN es dividir los puntos de datos de alta densidad en el mismo grupo y dividir los puntos de datos de baja densidad en puntos de ruido. Al definir umbrales de distancia y densidad entre puntos de datos, DBSCAN puede realizar agrupaciones sin la necesidad de determinar la cantidad de agrupaciones de antemano.

2. Descripción general de DBSCAN

        La agrupación se aplica a un conjunto de datos para agrupar conjuntos similares de puntos de datos. Busca similitudes y diferencias en puntos de datos y los combina. No hay etiquetas en los grupos. La agrupación en clústeres es un tipo de aprendizaje no supervisado que tiene como objetivo descubrir la estructura subyacente de un conjunto de datos. 

2.1 Tipos de algoritmos de agrupamiento:

  • Agrupación basada en particiones
  • agrupamiento difuso
  • agrupación jerárquica
  • agrupación basada en red
  • agrupación exclusiva
  • grupos superpuestos
  • Agrupación basada en densidad

        En este blog, nos centraremos en los métodos de agrupamiento basados ​​en densidad, específicamente el algoritmo DBSCAN combinado con scikit-learn. Los algoritmos basados ​​en densidad son buenos para encontrar áreas de alta densidad y valores atípicos. Se utiliza comúnmente para la detección de anomalías y la agrupación de conjuntos de datos no lineales.

2.2 Propiedades DBSCAN

1) Las ventajas y desventajas del algoritmo de agrupamiento DBSCAN incluyen:

  • No es necesario especificar el número de grupos de antemano.
  • Capacidad para identificar valores atípicos y puntos de ruido.
  • Capacidad para manejar grupos de formas arbitrarias.
  • Puede funcionar bien en racimos densos.

2) Las desventajas del algoritmo de agrupamiento DBSCAN incluyen:

  • Para grupos con baja densidad, el efecto de agrupación puede no ser tan bueno como el de otros algoritmos.
  • Para datos de alta dimensión, es posible que la agrupación en clústeres no funcione bien.

3) Las aplicaciones del algoritmo de agrupamiento DBSCAN incluyen:

  • Segmentación de imagen
  • Agrupación espacial en sistemas de información geográfica.
  • Seguimiento de objetos en visión por computadora.
  • Descubrimiento de comunidades en el análisis de redes sociales.

 

3. Construcción de DBSCAN

        DBSCAN (agrupación espacial de aplicaciones de ruido basada en densidad) es un algoritmo de aprendizaje no supervisado basado en densidad. Calcula gráficos de vecinos más cercanos para encontrar grupos y valores atípicos de formas arbitrarias. La agrupación K-medias, por otro lado, produce agrupaciones esféricas. 

DBSCAN no requiere grupos K         inicialmente . En cambio, requiere dos parámetros: eps y minPts.

  • eps : Es el radio de un vecindario específico. Si la distancia entre dos puntos es menor o igual a esp, se consideran vecinos.
  • minPts : el número mínimo de puntos de datos que forman un grupo en un vecindario determinado. 

        DBSCAN utiliza estos dos parámetros para definir puntos centrales, puntos límite o puntos atípicos.

 

 

4. ¿Cómo funciona el algoritmo de agrupamiento DBSCAN?

 

  1. Seleccione aleatoriamente cualquier punto p . Si hay más puntos de datos que minPts en el vecindario , también se le llama punto central.
  2. Utilizará eps y minPts para identificar todos los puntos de densidad alcanzables.
  3. Si p es un punto central, creará un clúster utilizando eps y minPts.
  4. Si p es un punto límite , se mueve al siguiente punto de datos. Si el número de puntos en la vecindad de un punto de datos es menor que minPts, el punto de datos se denomina punto límite.
  5. El algoritmo continuará hasta que se hayan visitado todos los puntos.

 

5. Agrupación de DBSCAN en Python

 

        Usaremos una libreta Deepnote para ejecutar este ejemplo. Viene con paquetes de Python preinstalados, por lo que solo necesitamos importar NumPy, pandas, seaborn, matplotlib y sklearn. 

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN

Estamos utilizando los datos de segmentación de clientes         del centro comercial de Kaggle . Contiene las puntuaciones de edad, sexo, ingresos y gastos del cliente. Usaremos estas funciones para crear varios clústeres. 

        Primero, cargaremos el conjunto de datos usando pandas `read_csv`. Luego seleccionaremos tres columnas ("Edad", "Ingresos anuales (k$)", "Puntuación de gastos (1-100)") para crear el marco de datos  X_train .

df = pd.read_csv('Mall_Customers.csv')
X_train = df[['Age', 'Annual Income (k$)', 'Spending Score (1-100)']]

        Usaremos eps  12.5 y min_sample 4 para ajustar X_train al algoritmo DBSCAN. Después de eso, crearemos un DBSCAN_dataset desde X_train y crearemos una columna "Cluster"  usando clustering.labels_ .

clustering = DBSCAN(eps=12.5, min_samples=4).fit(X_train)
DBSCAN_dataset = X_train.copy()
DBSCAN_dataset.loc[:,'Cluster'] = clustering.labels_

        Para visualizar la distribución de clústeres, usaremos value_counts() y lo convertiremos en un marco de datos. 

Como puede ver, tenemos 5 grupos y 1 valor atípico. El grupo "0" tiene el tamaño más grande, con 112 filas. 

DBSCAN_dataset.Cluster.value_counts().to_frame()

 

En esta sección, usaremos la información anterior y visualizaremos un diagrama de dispersión.  

Hay dos gráficos: "Ingresos anuales versus fracciones de gastos" e "Ingresos anuales versus edad". Los grupos se definen por el color y los valores atípicos se definen como pequeños puntos negros. 

La visualización muestra claramente cómo cada cliente pertenece a uno de los 5 grupos, y podemos usar esta información para proporcionar ofertas de alto nivel a los clientes del grupo violeta y ofertas más baratas a los clientes del grupo verde oscuro. 

 
  
outliers = DBSCAN_dataset[DBSCAN_dataset['Cluster']==-1]

fig2, (axes) = plt.subplots(1,2,figsize=(12,5))

sns.scatterplot('Annual Income (k$)', 'Spending Score (1-100)',

                data=DBSCAN_dataset[DBSCAN_dataset['Cluster']!=-1],

                hue='Cluster', ax=axes[0], palette='Set2', legend='full', s=200)

sns.scatterplot('Age', 'Spending Score (1-100)',

                data=DBSCAN_dataset[DBSCAN_dataset['Cluster']!=-1],

                hue='Cluster', palette='Set2', ax=axes[1], legend='full', s=200)

axes[0].scatter(outliers['Annual Income (k$)'], outliers['Spending Score (1-100)'], s=10, label='outliers', c="k")

axes[1].scatter(outliers['Age'], outliers['Spending Score (1-100)'], s=10, label='outliers', c="k")
axes[0].legend()
axes[1].legend()

plt.setp(axes[0].get_legend().get_texts(), fontsize='12')
plt.setp(axes[1].get_legend().get_texts(), fontsize='12')

plt.show()


 

6. Conclusión

        DBSCAN es uno de los muchos algoritmos utilizados para la segmentación de clientes. Puede utilizar K-means o agrupación jerárquica para obtener mejores resultados. Los algoritmos de agrupación se utilizan comúnmente en motores de recomendación, segmentación de mercados y clientes, análisis de redes sociales y análisis de documentos. 

        En este blog, aprendimos los conceptos básicos del algoritmo DBCAN basado en densidad y cómo usarlo para crear segmentos de clientes con scikit-learn. Puede mejorar el algoritmo  utilizando puntuaciones de silueta y mapas de calor para encontrar los mejores eps y min_samples .

 

Supongo que te gusta

Origin blog.csdn.net/gongdiwudu/article/details/132783438
Recomendado
Clasificación