Оценка кластеризации

Обучение без учителя на Python

Benjamin Wilson

Director of Research at lateral.io

Оценка кластеризации

  • Можно сверить с видами ириса
  • ... но что делать, если видов нет?
  • Измерить качество кластеризации
  • Помогает выбрать оптимальное число кластеров
Обучение без учителя на Python

Ирис: кластеры и виды

  • k-means выделил 3 кластера среди образцов ириса
  • Соответствуют ли кластеры видам?
species  setosa  versicolor  virginica
labels
0             0           2         36
1            50           0          0
2             0          48         14
Обучение без учителя на Python

Перекрёстная таблица с pandas

  • Кластеры vs виды — это «перекрёстная таблица»
  • Используется библиотека pandas
  • Виды каждого образца заданы списком species
print(species)
['setosa', 'setosa', 'versicolor', 'virginica', ... ]
Обучение без учителя на Python

Сопоставление меток и видов

import pandas as pd
df = pd.DataFrame({'labels': labels, 'species': species})
print(df)
     labels     species
0         1      setosa
1         1      setosa
2         2  versicolor
3         2   virginica
4         1      setosa
...
Обучение без учителя на Python

Сводная таблица меток и видов

ct = pd.crosstab(df['labels'], df['species'])
print(ct)
species  setosa  versicolor  virginica
labels
0             0           2         36
1            50           0          0
2             0          48         14

Как оценить кластеризацию, если информации о видах нет?

Обучение без учителя на Python

Измерение качества кластеризации

  • Используются только образцы и их метки кластеров

  • Хорошая кластеризация даёт компактные кластеры

  • Образцы в каждом кластере сгруппированы плотно

Обучение без учителя на Python

Инерция как мера качества кластеризации

  • Показывает, насколько разбросаны кластеры (чем меньше, тем лучше)
  • Расстояние от каждого образца до центроида его кластера
  • После fit() доступна как атрибут inertia_
  • k-means минимизирует инерцию при выборе кластеров
from sklearn.cluster import KMeans

model = KMeans(n_clusters=3)
model.fit(samples)
print(model.inertia_)
78.9408414261
Обучение без учителя на Python

Число кластеров

  • Кластеризации набора данных ириса с разным числом кластеров
  • Больше кластеров — меньше инерция
  • Каково оптимальное число кластеров?

Линейный график: число кластеров vs. инерция

Обучение без учителя на Python

Сколько кластеров выбрать?

  • Хорошая кластеризация даёт компактные кластеры (низкая инерция)
  • ... но не слишком много кластеров!
  • Выбирайте «локоть» на графике инерции
  • Место, где инерция начинает убывать медленнее
  • Например, для набора данных ириса оптимально 3

Линейный график: число кластеров vs. инерция

Обучение без учителя на Python

Давайте потренируемся!

Обучение без учителя на Python

Preparing Video For Download...