Introducción

El clustering es una técnica de aprendizaje no supervisado que agrupa un conjunto de objetos de tal manera que los objetos en el mismo grupo (o clúster) son más similares entre sí que a los objetos de otros grupos. Esta técnica es ampliamente utilizada en minería de datos, reconocimiento de patrones y análisis de datos.

Objetivos del Tema

  • Comprender los conceptos básicos del clustering.
  • Conocer los algoritmos de clustering más comunes.
  • Aplicar algoritmos de clustering a conjuntos de datos reales.
  • Evaluar la calidad de los clústeres obtenidos.

Conceptos Básicos

Definiciones Clave

  • Clúster: Un grupo de datos que son similares entre sí.
  • Centroid: El centro de un clúster.
  • Distancia: Una medida de similitud o disimilitud entre dos puntos de datos.

Tipos de Clustering

  • Particional: Divide los datos en k clústeres no solapados.
  • Jerárquico: Crea una jerarquía de clústeres.
  • Densidad: Agrupa puntos que están densamente conectados.
  • Basado en Modelos: Asume que los datos son generados por una mezcla de distribuciones probabilísticas.

Algoritmos de Clustering

K-means

Descripción

K-means es uno de los algoritmos de clustering más simples y populares. Divide los datos en k clústeres, donde cada clúster está representado por el centroide de los puntos de datos en el clúster.

Pasos del Algoritmo

  1. Seleccionar k puntos como centroides iniciales.
  2. Asignar cada punto de datos al clúster cuyo centroide esté más cercano.
  3. Recalcular los centroides como el promedio de los puntos de datos en cada clúster.
  4. Repetir los pasos 2 y 3 hasta que los centroides no cambien significativamente.

Ejemplo en Python

from sklearn.cluster import KMeans
import numpy as np

# Datos de ejemplo
X = np.array([[1, 2], [1, 4], [1, 0],
              [10, 2], [10, 4], [10, 0]])

# Crear el modelo K-means
kmeans = KMeans(n_clusters=2, random_state=0).fit(X)

# Predecir los clústeres
labels = kmeans.labels_

# Obtener los centroides
centroids = kmeans.cluster_centers_

print("Labels:", labels)
print("Centroids:", centroids)

Ejercicio Práctico

Ejercicio: Utiliza el algoritmo K-means para agrupar el conjunto de datos iris de sklearn en 3 clústeres. Visualiza los resultados utilizando un gráfico de dispersión.

Solución

from sklearn.datasets import load_iris
import matplotlib.pyplot as plt

# Cargar el conjunto de datos iris
iris = load_iris()
X = iris.data

# Aplicar K-means
kmeans = KMeans(n_clusters=3, random_state=0).fit(X)
labels = kmeans.labels_

# Visualizar los resultados
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.title('K-means Clustering on Iris Dataset')
plt.show()

DBSCAN (Density-Based Spatial Clustering of Applications with Noise)

Descripción

DBSCAN es un algoritmo de clustering basado en densidad que puede encontrar clústeres de forma arbitraria y manejar ruido (puntos de datos que no pertenecen a ningún clúster).

Pasos del Algoritmo

  1. Para cada punto de datos, encontrar los puntos en su vecindad (dentro de un radio ε).
  2. Si un punto tiene al menos min_samples puntos en su vecindad, se considera un punto central y se forma un clúster.
  3. Expandir el clúster a todos los puntos densamente conectados.
  4. Repetir hasta que todos los puntos estén asignados a un clúster o marcados como ruido.

Ejemplo en Python

from sklearn.cluster import DBSCAN

# Datos de ejemplo
X = np.array([[1, 2], [2, 2], [2, 3],
              [8, 7], [8, 8], [25, 80]])

# Crear el modelo DBSCAN
db = DBSCAN(eps=3, min_samples=2).fit(X)

# Predecir los clústeres
labels = db.labels_

print("Labels:", labels)

Ejercicio Práctico

Ejercicio: Utiliza el algoritmo DBSCAN para agrupar el conjunto de datos make_moons de sklearn. Visualiza los resultados utilizando un gráfico de dispersión.

Solución

from sklearn.datasets import make_moons

# Generar datos de ejemplo
X, _ = make_moons(n_samples=300, noise=0.05)

# Aplicar DBSCAN
db = DBSCAN(eps=0.2, min_samples=5).fit(X)
labels = db.labels_

# Visualizar los resultados
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('DBSCAN Clustering on make_moons Dataset')
plt.show()

Evaluación de Clustering

Métricas de Evaluación

  • Índice de Silueta: Mide la coherencia de los clústeres.
  • Coeficiente de Dunn: Mide la compacidad y separación de los clústeres.
  • Homogeneidad y Completitud: Miden la pureza de los clústeres.

Ejemplo de Evaluación

from sklearn.metrics import silhouette_score

# Calcular el índice de silueta para K-means
silhouette_avg = silhouette_score(X, labels)
print("Silhouette Score for K-means:", silhouette_avg)

Conclusión

En esta sección, hemos explorado los conceptos básicos del clustering y algunos de los algoritmos más comunes, como K-means y DBSCAN. También hemos aprendido cómo evaluar la calidad de los clústeres obtenidos. Estos conocimientos son fundamentales para aplicar técnicas de clustering a problemas del mundo real y extraer información valiosa de los datos.

Próximos Pasos

En el siguiente módulo, profundizaremos en los casos de estudio y aplicaciones prácticas de los algoritmos de clustering en diversos campos, como la industria y las redes sociales.

© Copyright 2024. Todos los derechos reservados