Clustering en clustermodellen

Discrete Event Simulation in Python

Diogo Costa (PhD, MSc)

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

Histogrammen van modelresultaten

  • Verken modelresultaten
  • Vind kantelpunten en knelpunten
  • Optimaliseer het systeem

Histogram

  • Grafiek met frequentieverdelingen
  • Geeft aantal observaties per interval

Matplotlib-package

import matplotlib.pyplot as plt

Gebruik: Maak een histogram van dataset data met 50 bins

plt.hist(data, bins=50)

Een histogram met 50 bins met twee Gaussiaanse verdelingen, wat op twee clusters duidt.

Discrete Event Simulation in Python

Clusteranalyse en toepassing op modellen

  • Toepassingen
    • Patronen herkennen (bv. modelresultaten)
    • Beeldanalyse

Een satellietbeeld van nachtelijke verlichting in Noord-Amerika.

  • Datacompressie
  • Computergraphics
  • Machine learning

    Een illustratie van een neuraal netwerk in een brein verwijst naar deze ML-techniek en het ontstaan van patronen en clusters.

  • In discrete-eventmodellen

    • Herken patronen in modeluitvoer
    • Meer bruikbare inzichten
Discrete Event Simulation in Python

k-means-clustering

Onze focus

  • k-means-clustering (centroidmodel)
  • Verdeel observaties in k clusters
  • Elke observatie hoort bij het dichtstbijzijnde gemiddelde
  • Gemiddelden heten "clustercentra"

Observaties en clustercentra

Grafiek met data en clustercentra berekend met k-means-clustering.

Discrete Event Simulation in Python

k-means-clustering met SciPy

SciPy-methode

scipy.cluster.vq.kmeans()

Implementatie

import scipy
scipy.cluster.vq.kmeans(
obs, k_or_guess, iter=20, thresh=1e-05,
check_finite=True, *, seed=None)
  • obs is een numpy-array
  • Retourneert:
    1. Clustercentra
    2. Distortion (gem. afstand tussen observaties en gegenereerde centra)
Discrete Event Simulation in Python

Data whitening: decorrelatie en rescaling

Voor k-means: Data whitening

  1. Decorreleer obs
  2. Reschaal elke dimensie van obs met z'n std-dev

De figuur toont drie panelen: links gecorreleerde data, midden gedecorreleerde data, rechts gewhitenede data.

In SciPy

scipy.cluster.vq.whiten(
obs, check_finite=True)
  • obs is een numpy-array
Discrete Event Simulation in Python

Voorbeeld van whitening en k-means

  • Productie-activiteit met meerdere processen
  • Bekijk de impact van Process 1

Plot met de duur van proces 1 vs. totale duur, voor ruwe en gewhitenede data, met k-meansclusters.

Package importeren

import scipy.cluster.vq as scvq

Whiten modelresultaten

white_data = scvq.whiten(model_results)

Vind 2 clusters (blauwe punten)

cluster_centroids, distortion = 
scvq.kmeans(white_data, 2)
Discrete Event Simulation in Python

Optimaal aantal clusters

Technieken

  • Simpele methode (max # clusters)
  • Elbow-methode
  • Silhouettecoëfficiënt
  • Gap-statistic

Simpele methode

  • Bepaal max. aantal clusters
  • Gebruik: $\Big(\dfrac{nobs}{2}\Big)^{0.5}$
    • nobs = aantal observaties
num_clusters = 
  int((model_results.shape[0]/2)**0.5)
  • Console-uitvoer
    22
    
Discrete Event Simulation in Python

Optimaal aantal clusters: silhouette-methode

  • Importeer libraries
from sklearn.metrics import silhouette_score

Bereken silhouette-scores voor k clusters

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)

Console-uitvoer

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

Resultaten interpreteren

  • Beste waarde: score = 1
  • Slechtste waarde: score = -1
  • Overlappende clusters: score rond 0
Discrete Event Simulation in Python

Laten we oefenen!

Discrete Event Simulation in Python

Preparing Video For Download...