Agrupamento e modelos de clusters

Simulação de Eventos Discretos em Python

Diogo Costa (PhD, MSc)

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

Histogramas dos resultados do modelo

  • Explorar resultados do modelo
  • Identificar pontos de virada e gargalos
  • Otimizar o sistema

Histograma

  • Gráfico de distribuições de frequência
  • Mostra nº de observações por intervalo

Pacote Matplotlib

import matplotlib.pyplot as plt

Uso: Criar um histograma do dataset data com 50 bins

plt.hist(data, bins=50)

Um histograma com 50 bins exibindo duas distribuições gaussianas, sugerindo dois clusters.

Simulação de Eventos Discretos em Python

Análise de clusters e aplicação a modelos

  • Aplicações
    • Reconhecimento de padrões (ex.: resultados de modelo)
    • Análise de imagens

Uma imagem de satélite das luzes noturnas na América do Norte.

  • Compactação de dados
  • Computação gráfica
  • Aprendizado de máquina

    Uma imagem de um neurônio/rede neural em um cérebro, aludindo ao surgimento de padrões e clusters.

  • Em modelos de eventos discretos

    • Identificar padrões de saída do modelo
    • Informações mais acionáveis
Simulação de Eventos Discretos em Python

k-means clustering

Nosso foco

  • k-means (modelo de centróides)
  • Particionar observações em k clusters
  • Cada observação vai para o cluster com a média mais próxima
  • Média dos clusters = “centróides”

Observações e centróides

Gráfico com dados e centróides calculados via k-means.

Simulação de Eventos Discretos em Python

k-means com SciPy

Método SciPy

scipy.cluster.vq.kmeans()

Implementação

import scipy
scipy.cluster.vq.kmeans(
obs, k_or_guess, iter=20, thresh=1e-05,
check_finite=True, *, seed=None)
  • obs é um array numpy
  • Retorna:
    1. Centroides dos clusters
    2. Distorção (distância média entre observações e centroides gerados)
Simulação de Eventos Discretos em Python

Whitening: descorrelação e reescalonamento

Antes do k-means: Whitening dos dados

  1. Descorrelacionar obs
  2. Reescalonar cada dimensão de obs pelo desvio padrão

O gráfico mostra três painéis: dados correlacionados, dados descorrelacionados e dados após whitening.

No SciPy

scipy.cluster.vq.whiten(
obs, check_finite=True)
  • obs é um array numpy
Simulação de Eventos Discretos em Python

Exemplo: whitening e k-means

  • Atividade de manufatura com vários processos
  • Vamos examinar o impacto do Process 1

Gráfico da duração do processo 1 vs. duração total para dados brutos e dados com whitening, com clusters via k-means.

Importar pacote

import scipy.cluster.vq as scvq

Whitening dos resultados

white_data = scvq.whiten(model_results)

Encontrar 2 clusters (pontos azuis)

cluster_centroids, distortion = 
scvq.kmeans(white_data, 2)
Simulação de Eventos Discretos em Python

Número ótimo de clusters

Técnicas

  • Método simples (nº máx. de clusters)
  • Método do cotovelo
  • Coeficiente silhouette
  • Estatística gap

Método simples

  • Determinar nº máx. de clusters
  • Como usar: $\Big(\dfrac{nobs}{2}\Big)^{0.5}$
    • nobs = número de observações
num_clusters = 
  int((model_results.shape[0]/2)**0.5)
  • Saída do console
    22
    
Simulação de Eventos Discretos em Python

Número ótimo de clusters: método silhouette

  • Importar bibliotecas
from sklearn.metrics import silhouette_score

Calcular scores silhouette para 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)

Saída do 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

Interpretar resultados

  • Melhor valor: score = 1
  • Pior valor: score = -1
  • Clusters sobrepostos: score próximo de 0
Simulação de Eventos Discretos em Python

Vamos praticar!

Simulação de Eventos Discretos em Python

Preparing Video For Download...