Clustering e modelli di cluster

Simulazione a eventi discreti in Python

Diogo Costa (PhD, MSc)

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

Istogrammi dei risultati del modello

  • Esplora i risultati del modello
  • Trova punti critici e colli di bottiglia
  • Ottimizza il sistema

Istogramma

  • Grafico di distribuzioni di frequenza
  • Numero di osservazioni per intervallo

Pacchetto Matplotlib

import matplotlib.pyplot as plt

Uso: crea un istogramma del dataset data con 50 bin

plt.hist(data, bins=50)

Un istogramma con 50 bin mostra due distribuzioni gaussiane, suggerendo due cluster.

Simulazione a eventi discreti in Python

Analisi dei cluster e applicazioni ai modelli

  • Applicazioni
    • Riconoscimento di pattern (es. risultati di modelli)
    • Analisi di immagini

Immagine satellitare delle luci notturne in Nord America.

  • Compressione dei dati
  • Computer grafica
  • Machine learning

    Un’immagine stilizzata di una rete neurale in un cervello suggerisce pattern e clustering.

  • Nei modelli a eventi discreti

    • Identifica pattern nell’output del modello
    • Informazioni più azionabili
Simulazione a eventi discreti in Python

k-means clustering

Focus

  • k-means clustering (modello a centroidi)
  • Partizione delle osservazioni in k cluster
  • Ogni osservazione va al cluster con media più vicina
  • La media del cluster è il "centroide"

Osservazioni e centroidi

Grafico con dati e centroidi calcolati con k-means.

Simulazione a eventi discreti in Python

k-means con SciPy

Metodo SciPy

scipy.cluster.vq.kmeans()

Implementazione

import scipy
scipy.cluster.vq.kmeans(
obs, k_or_guess, iter=20, thresh=1e-05,
check_finite=True, *, seed=None)
  • obs è un array numpy
  • Restituisce:
    1. Centroidi dei cluster
    2. Distorsione (distanza media tra osservazioni e centroidi generati)
Simulazione a eventi discreti in Python

Whitening dei dati: decorrelazione e riscalatura

Prima di eseguire k-means: Whitening

  1. Decorrelare i dati obs
  2. Riscale ogni dimensione di obs per la sua deviazione standard

Il grafico mostra tre pannelli: dati correlati, dati decorrelati e dati whitened.

In SciPy

scipy.cluster.vq.whiten(
obs, check_finite=True)
  • obs è un array numpy
Simulazione a eventi discreti in Python

Esempio di whitening e k-means

  • Attività manifatturiera con più processi
  • Vediamo l’impatto di Process 1

Grafico della durata del process 1 vs durata totale per dati grezzi e whitened, con cluster k-means.

Importa pacchetto

import scipy.cluster.vq as scvq

Whitening dei risultati

white_data = scvq.whiten(model_results)

Trova 2 cluster (punti blu)

cluster_centroids, distortion = 
scvq.kmeans(white_data, 2)
Simulazione a eventi discreti in Python

Numero ottimale di cluster

Tecniche

  • Metodo semplice (numero max di cluster)
  • Metodo del gomito
  • Coefficiente silhouette
  • Gap statistic

Metodo semplice

  • Stima il numero massimo di cluster
  • Come usare: $\Big(\dfrac{nobs}{2}\Big)^{0.5}$
    • nobs = numero di osservazioni
num_clusters = 
  int((model_results.shape[0]/2)**0.5)
  • Output console
    22
    
Simulazione a eventi discreti in Python

Numero ottimale di cluster: metodo silhouette

  • Importa librerie
from sklearn.metrics import silhouette_score

Calcola i punteggi silhouette per k cluster

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)

Output console

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

Interpreta i risultati

  • Valore migliore: score = 1
  • Valore peggiore: score = -1
  • Cluster sovrapposti: score vicino a 0
Simulazione a eventi discreti in Python

Ayo berlatih!

Simulazione a eventi discreti in Python

Preparing Video For Download...