Clustering y modelos de clúster

Simulación de eventos discretos en Python

Diogo Costa (PhD, MSc)

Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific

Histogramas de resultados del modelo

  • Explora resultados del modelo
  • Identifica puntos de inflexión y cuellos de botella
  • Optimiza el sistema

Histograma

  • Gráfico de distribuciones de frecuencia
  • Da nº de observaciones por intervalo

Paquete Matplotlib

import matplotlib.pyplot as plt

Uso: Crea un histograma del conjunto data con 50 bins

plt.hist(data, bins=50)

Un histograma con 50 bins que muestra dos distribuciones gaussianas, sugiriendo dos clústeres.

Simulación de eventos discretos en Python

Análisis de clústeres y aplicación a modelos

  • Aplicaciones
    • Reconocimiento de patrones (p. ej., resultados de modelos)
    • Análisis de imágenes

Una imagen satelital de luces nocturnas en Norteamérica.

  • Compresión de datos
  • Gráficos por computadora
  • Aprendizaje automático

    Una imagen de una red neuronal dentro de un cerebro alude a esta técnica y al surgimiento de patrones y clústeres.

  • En modelos de eventos discretos

    • Identifica patrones en salidas del modelo
    • Información más accionable
Simulación de eventos discretos en Python

k-means clustering

Nuestro foco

  • k-means (modelo de centroides)
  • Partición de observaciones en k clústeres
  • Cada observación va al clúster con la media más cercana
  • La media del clúster se llama «centroide»

Observaciones y centroides

Gráfico con datos y centroides calculados con k-means.

Simulación de eventos discretos en Python

k-means con SciPy

Método de SciPy

scipy.cluster.vq.kmeans()

Implementación

import scipy
scipy.cluster.vq.kmeans(
obs, k_or_guess, iter=20, thresh=1e-05,
check_finite=True, *, seed=None)
  • obs es un array de numpy
  • Devuelve:
    1. Centroides de clúster
    2. Distorsión (media de distancias entre observaciones y centroides)
Simulación de eventos discretos en Python

Blanqueo de datos: descorrelación y reescalado

Antes de ejecutar k-means: blanqueo de datos

  1. Descorrelaciona los datos de obs
  2. Reescala cada dimensión de obs por su desviación estándar

La figura muestra tres paneles: datos correlacionados, datos descorrelacionados y datos blanqueados.

En SciPy

scipy.cluster.vq.whiten(
obs, check_finite=True)
  • obs es un array de numpy
Simulación de eventos discretos en Python

Ejemplo de blanqueo y k-means

  • Actividad de fabricación con varios procesos
  • Veamos el impacto de Process 1

Gráfico del tiempo de proceso 1 frente al total, para datos brutos y blanqueados, con clústeres k-means.

Importa el paquete

import scipy.cluster.vq as scvq

Blanquea resultados del modelo

white_data = scvq.whiten(model_results)

Busca 2 clústeres (puntos azules)

cluster_centroids, distortion = 
scvq.kmeans(white_data, 2)
Simulación de eventos discretos en Python

Número óptimo de clústeres

Técnicas

  • Método simple (nº máx. de clústeres)
  • Método del codo
  • Coeficiente de silueta
  • Estadístico gap

Método simple

  • Determina el nº máximo de clústeres
  • Cómo usar: $\Big(\dfrac{nobs}{2}\Big)^{0.5}$
    • nobs = número de observaciones
num_clusters = 
  int((model_results.shape[0]/2)**0.5)
  • Salida de consola
    22
    
Simulación de eventos discretos en Python

Número óptimo de clústeres: método de silueta

  • Importa librerías
from sklearn.metrics import silhouette_score

Calcula puntajes de silueta para k clústeres

for k in range(2, 6):
  model = KMeans(n_clusters=k)
  model.fit(model_results)
  pred = model.predict(model_results)
  score = silhouette_score(model_results, pred)

Salida de consola

Silhouette Score for k = 2: 0.591
Silhouette Score for k = 3: 0.472
Silhouette Score for k = 4: 0.381
Silhouette Score for k = 5: 0.364
Silhouette Score for k = 6: 0.373

Interpretación

  • Mejor valor: score = 1
  • Peor valor: score = -1
  • Clústeres solapados: score cerca de 0
Simulación de eventos discretos en Python

¡Vamos a practicar!

Simulación de eventos discretos en Python

Preparing Video For Download...