Regroupement et modèles de grappes

Simulation d'événements discrets en Python

Diogo Costa (PhD, MSc)

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

Histogrammes des résultats du modèle

  • Explorer les résultats du modèle
  • Repérer points de bascule et goulots d'étranglement
  • Optimiser le système

Histogramme

  • Graphique des distributions de fréquence
  • Donne le nombre d'observations par intervalle

Trousse Matplotlib

import matplotlib.pyplot as plt

Utilisation : Créer un histogramme du jeu de données data avec 50 classes

plt.hist(data, bins=50)

Un histogramme avec 50 classes montrant deux distributions gaussiennes, suggérant deux grappes de données.

Simulation d'événements discrets en Python

Analyse de grappes et application aux modèles

  • Applications
    • Reconnaissance de formes (p. ex., résultats de modèles)
    • Analyse d'images

Une image satellite des lumières nocturnes en Amérique du Nord.

  • Compression de données
  • Infographie
  • Machine Learning

    Une image schématique d'un réseau de neurones dans un cerveau, évoquant cette technique en machine learning et l'émergence de motifs et de grappes.

  • Dans les modèles à événements discrets

    • Repérer les motifs de sorties du modèle
    • Information plus exploitable
Simulation d'événements discrets en Python

Regroupement k-means

Notre objectif

  • Regroupement k-means (modèle centroïde)
  • Partitionner les observations en k grappes
  • Chaque observation va à la grappe à moyenne la plus proche
  • Moyennes des grappes : « centroïdes de grappe »

Observations et centroïdes de grappe

Graphique montrant des données avec des centroïdes calculés par k-means.

Simulation d'événements discrets en Python

Regroupement k-means avec SciPy

Méthode SciPy

scipy.cluster.vq.kmeans()

Mise en œuvre

import scipy
scipy.cluster.vq.kmeans(
obs, k_or_guess, iter=20, thresh=1e-05,
check_finite=True, *, seed=None)
  • obs est un tableau numpy
  • Renvoie :
    1. Centroïdes de grappes
    2. Distorsion (distance moyenne entre observations et centroïdes générés)
Simulation d'événements discrets en Python

Blanchiment des données : décorrélation et redimensionnement

Avant d'exécuter k-means : blanchiment des données

  1. Décorréler les données obs
  2. Redimensionner chaque dimension de obs par son écart type

Le tracé montre trois panneaux : données corrélées, données décorrélées, puis données blanchies.

Dans SciPy

scipy.cluster.vq.whiten(
obs, check_finite=True)
  • obs est un tableau numpy
Simulation d'événements discrets en Python

Exemple : blanchiment et k-means

  • Activité manufacturière avec plusieurs procédés
  • Examinons l'impact de Process 1

Graphique montrant la durée du procédé 1 par rapport à la durée totale pour les données brutes et blanchies, avec grappes k-means.

Importer la trousse

import scipy.cluster.vq as scvq

Blanchir les résultats du modèle

white_data = scvq.whiten(model_results)

Trouver 2 grappes (points bleus)

cluster_centroids, distortion = 
scvq.kmeans(white_data, 2)
Simulation d'événements discrets en Python

Nombre optimal de grappes

Techniques

  • Méthode simple (nombre max de grappes)
  • Méthode du coude
  • Coefficient de silhouette
  • Statistique d'écart (gap)

Méthode simple

  • Déterminer le nombre maximal de grappes
  • Formule : $\Big(\dfrac{nobs}{2}\Big)^{0.5}$
    • nobs = nombre d'observations
num_clusters = 
  int((model_results.shape[0]/2)**0.5)
  • Sortie de la console
    22
    
Simulation d'événements discrets en Python

Nombre optimal de grappes : méthode du score de silhouette

  • Importer les bibliothèques
from sklearn.metrics import silhouette_score

Calculer les scores de silhouette pour un nombre de grappes k

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)

Sortie de la 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

Interpréter les résultats

  • Meilleure valeur : score = 1
  • Pire valeur : score = -1
  • Chevauchement des grappes : score près de 0
Simulation d'événements discrets en Python

Passons à la pratique !

Simulation d'événements discrets en Python

Preparing Video For Download...