Кластеризація та кластерні моделі

Дискретно-подієве моделювання в Python

Diogo Costa (PhD, MSc)

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

Гістограми результатів моделі

  • Досліджуйте результати моделі
  • Визначайте переломні моменти й «вузькі місця»
  • Оптимізуйте систему

Гістограма

  • Графік частотних розподілів
  • Показує кількість спостережень у заданому інтервалі

Пакет Matplotlib

import matplotlib.pyplot as plt

Використання: побудуйте гістограму набору даних data з 50 бінів

plt.hist(data, bins=50)

Гістограма з 50 бінами даних, що показує дві гаусові компоненти та натякає на два кластери.

Дискретно-подієве моделювання в Python

Кластерний аналіз і застосування в моделях

  • Застосування
    • Розпізнавання шаблонів (наприклад, результати моделей)
    • Обробка зображень

Супутникове зображення нічних вогнів у Північній Америці.

  • Стиснення даних
  • Комп'ютерна графіка
  • Машинне навчання

    Схематичне зображення нейронної мережі в мозку, що натякає на метод у машинному навчанні та виявлення шаблонів і кластерів.

  • У дискретно-подієвих моделях

    • Виявляйте патерни у виході моделі
    • Більше придатної до дій інформації
Дискретно-подієве моделювання в Python

k-means кластеризація

Наш фокус

  • k-means кластеризація (центроїдна модель)
  • Розбиття спостережень на k кластерів
  • Кожне спостереження належить кластеру з найближчим середнім
  • Середні кластерів називають «центроїдами кластерів»

Спостереження та центроїди кластерів

Графік даних із центроїдами кластерів, обчисленими методом k-means.

Дискретно-подієве моделювання в Python

k-means у SciPy

Метод SciPy

scipy.cluster.vq.kmeans()

Реалізація

import scipy
scipy.cluster.vq.kmeans(
obs, k_or_guess, iter=20, thresh=1e-05,
check_finite=True, *, seed=None)
  • obs — це масив numpy
  • Повертає:
    1. Центроїди кластерів
    2. Дисторсію (середня відстань між спостереженнями та згенерованими центроїдами)
Дискретно-подієве моделювання в Python

Вибілювання даних: декореляція та масштабування

Перед запуском k-means: вибілювання даних

  1. Декорелюйте дані obs
  2. Масштабуйте кожний вимір obs за його стандартним відхиленням

Графік з трьома панелями: перша — корельовані дані, друга — декорельовані, третя — вибілені.

У SciPy

scipy.cluster.vq.whiten(
obs, check_finite=True)
  • obs — це масив numpy
Дискретно-подієве моделювання в Python

Приклад вибілювання та k-means

  • Виробничий процес із кількома стадіями
  • Розгляньмо вплив Process 1

Графік тривалості Process 1 проти загальної тривалості для сирих та вибілених даних із кластерами, обчисленими k-means.

Імпортуйте пакет

import scipy.cluster.vq as scvq

Вибілюйте результати моделі

white_data = scvq.whiten(model_results)

Знайдіть 2 кластери (сині точки)

cluster_centroids, distortion = 
scvq.kmeans(white_data, 2)
Дискретно-подієве моделювання в Python

Оптимальна кількість кластерів

Методики

  • Простий підхід (макс. кількість кластерів)
  • Метод ліктя
  • Коефіцієнт силуета
  • Статистика розриву (gap)

Простий підхід

  • Визначте максимальну кількість кластерів
  • Формула: $\Big(\dfrac{nobs}{2}\Big)^{0.5}$
    • nobs = кількість спостережень
num_clusters = 
  int((model_results.shape[0]/2)**0.5)
  • Вивід у консолі
    22
    
Дискретно-подієве моделювання в Python

Оптимальна кількість кластерів: метод силуета

  • Імпортуйте бібліотеки
from sklearn.metrics import silhouette_score

Обчисліть значення силуета для 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)

Вивід у консолі

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

Інтерпретуйте результати

  • Найкраще значення: score = 1
  • Найгірше значення: score = -1
  • Перекриття кластерів: score близько 0
Дискретно-подієве моделювання в Python

Давайте потренуємось!

Дискретно-подієве моделювання в Python

Preparing Video For Download...