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

Дискретно-событийное моделирование на 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

График зависимости длительности процесса 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

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

Методы

  • Простой метод (максимальное число кластеров)
  • Метод локтя
  • Коэффициент силуэта
  • Статистика разрыва

Простой метод

  • Определение максимального числа кластеров
  • Формула: $\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...