Оцінювання кластеризації

Наглядове навчання в Python

Benjamin Wilson

Director of Research at lateral.io

Оцінювання кластеризації

  • Можна звірити з видами iris, напр., iris species
  • ... але що, як немає видів для звірки?
  • Виміряйте якість кластеризації
  • Це допомагає вибрати кількість кластерів
Наглядове навчання в Python

Iris: кластери vs види

  • k-means знайшов 3 кластери серед зразків iris
  • Чи відповідають кластери видам?
species  setosa  versicolor  virginica
labels
0             0           2         36
1            50           0          0
2             0          48         14
Наглядове навчання в Python

Крос-табуляція в pandas

  • «Кластери проти видів» — це крос-табуляція
  • Використайте бібліотеку 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

Кількість кластерів

  • Кластеризації набору iris з різною кількістю кластерів
  • Більше кластерів — нижча інерція
  • Яка кількість кластерів найкраща?

Лінійний графік: кількість кластерів vs інерція

Наглядове навчання в Python

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

  • Якісна кластеризація має щільні кластери (тобто низьку інерцію)
  • ... але кластерів не має бути надто багато!
  • Оберіть «лікоть» на графіку інерції
  • Точку, де інерція починає спадати повільніше
  • Напр., для iris добрий вибір — 3

Лінійний графік: кількість кластерів vs інерція

Наглядове навчання в Python

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

Наглядове навчання в Python

Preparing Video For Download...