Algoritmo de Clustering OPTICS

Machine LearningMachine LearningBeginner
Practicar Ahora

This tutorial is from open-source community. Access the source code

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

Esta práctica demuestra el uso del algoritmo de clustering OPTICS utilizando la biblioteca scikit-learn. OPTICS es un acrónimo que significa Ordering Points To Identify the Clustering Structure. Es un algoritmo de clustering basado en la densidad que encuentra muestras centrales de alta densidad y expande los clusters a partir de ellas. En esta práctica, generaremos datos de muestra, graficaremos la gráfica de accesibilidad y usaremos DBSCAN para agrupar los datos.

Consejos sobre la VM

Una vez que se haya iniciado la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje sus comentarios después de la sesión y lo resolveremos rápidamente para usted.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/cluster("Clustering") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/cluster -.-> lab-49234{{"Algoritmo de Clustering OPTICS"}} ml/sklearn -.-> lab-49234{{"Algoritmo de Clustering OPTICS"}} end

Importar bibliotecas

Comenzaremos importando las bibliotecas necesarias para esta práctica: numpy, matplotlib.pyplot, y OPTICS y cluster_optics_dbscan de scikit-learn.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import OPTICS, cluster_optics_dbscan

Generar datos de muestra

Generaremos datos de muestra para el clustering. En este ejemplo, generamos seis clusters con diferentes densidades utilizando numpy.

np.random.seed(0)
n_points_per_cluster = 250

C1 = [-5, -2] + 0.8 * np.random.randn(n_points_per_cluster, 2)
C2 = [4, -1] + 0.1 * np.random.randn(n_points_per_cluster, 2)
C3 = [1, -2] + 0.2 * np.random.randn(n_points_per_cluster, 2)
C4 = [-2, 3] + 0.3 * np.random.randn(n_points_per_cluster, 2)
C5 = [3, -2] + 1.6 * np.random.randn(n_points_per_cluster, 2)
C6 = [5, 6] + 2 * np.random.randn(n_points_per_cluster, 2)
X = np.vstack((C1, C2, C3, C4, C5, C6))

Ejecutar el algoritmo de clustering OPTICS

Ahora ejecutaremos el algoritmo de clustering OPTICS en los datos generados. En este ejemplo, establecemos min_samples = 50, xi = 0.05 y min_cluster_size = 0.05.

clust = OPTICS(min_samples=50, xi=0.05, min_cluster_size=0.05)
clust.fit(X)

Agrupar datos con DBSCAN

Agruparemos los datos utilizando DBSCAN con diferentes valores de epsilon. En este ejemplo, establecemos epsilon en 0.5 y 2.

labels_050 = cluster_optics_dbscan(
    reachability=clust.reachability_,
    core_distances=clust.core_distances_,
    ordering=clust.ordering_,
    eps=0.5,
)
labels_200 = cluster_optics_dbscan(
    reachability=clust.reachability_,
    core_distances=clust.core_distances_,
    ordering=clust.ordering_,
    eps=2,
)

Graficar la gráfica de accesibilidad y los resultados del clustering

Graficaremos la gráfica de accesibilidad y los resultados del clustering para OPTICS y DBSCAN con diferentes valores de epsilon.

space = np.arange(len(X))
reachability = clust.reachability_[clust.ordering_]
labels = clust.labels_[clust.ordering_]

plt.figure(figsize=(10, 7))
G = gridspec.GridSpec(2, 3)
ax1 = plt.subplot(G[0, :])
ax2 = plt.subplot(G[1, 0])
ax3 = plt.subplot(G[1, 1])
ax4 = plt.subplot(G[1, 2])

## Gráfica de accesibilidad
colors = ["g.", "r.", "b.", "y.", "c."]
for klass, color in zip(range(0, 5), colors):
    Xk = space[labels == klass]
    Rk = reachability[labels == klass]
    ax1.plot(Xk, Rk, color, alpha=0.3)
ax1.plot(space[labels == -1], reachability[labels == -1], "k.", alpha=0.3)
ax1.plot(space, np.full_like(space, 2.0, dtype=float), "k-", alpha=0.5)
ax1.plot(space, np.full_like(space, 0.5, dtype=float), "k-.", alpha=0.5)
ax1.set_ylabel("Accesibilidad (distancia epsilon)")
ax1.set_title("Gráfica de accesibilidad")

## OPTICS
colors = ["g.", "r.", "b.", "y.", "c."]
for klass, color in zip(range(0, 5), colors):
    Xk = X[clust.labels_ == klass]
    ax2.plot(Xk[:, 0], Xk[:, 1], color, alpha=0.3)
ax2.plot(X[clust.labels_ == -1, 0], X[clust.labels_ == -1, 1], "k+", alpha=0.1)
ax2.set_title("Clustering automático\nOPTICS")

## DBSCAN a 0.5
colors = ["g.", "r.", "b.", "c."]
for klass, color in zip(range(0, 4), colors):
    Xk = X[labels_050 == klass]
    ax3.plot(Xk[:, 0], Xk[:, 1], color, alpha=0.3)
ax3.plot(X[labels_050 == -1, 0], X[labels_050 == -1, 1], "k+", alpha=0.1)
ax3.set_title("Clustering con corte de epsilon a 0.5\nDBSCAN")

## DBSCAN a 2.
colors = ["g.", "m.", "y.", "c."]
for klass, color in zip(range(0, 4), colors):
    Xk = X[labels_200 == klass]
    ax4.plot(Xk[:, 0], Xk[:, 1], color, alpha=0.3)
ax4.plot(X[labels_200 == -1, 0], X[labels_200 == -1, 1], "k+", alpha=0.1)
ax4.set_title("Clustering con corte de epsilon a 2.0\nDBSCAN")

plt.tight_layout()
plt.show()

Nota: gridspec es un módulo de matplotlib que se utiliza para crear una cuadrícula de subgráficos más compleja. No se traduce aquí ya que es un nombre propio y no afecta la comprensión del código en español.

Resumen

En este laboratorio, aprendimos cómo utilizar el algoritmo de clustering OPTICS para agrupar datos y cómo utilizar DBSCAN para agrupar los datos con diferentes valores de epsilon. También aprendimos cómo graficar la gráfica de accesibilidad y los resultados del clustering.