Vyhodnocení shlukování

Unsupervised Learning in Python

Benjamin Wilson

Director of Research at lateral.io

Vyhodnocení shlukování

  • Lze ověřit shodu např. s druhy kosatců
  • ... ale co když není s čím porovnat?
  • Měření kvality shlukování
  • Pomáhá zvolit počet shluků
Unsupervised Learning in Python

Kosatce: shluky vs. druhy

  • k-means našel 3 shluky mezi vzorky kosatců
  • Odpovídají shluky druhům?
species  setosa  versicolor  virginica
labels
0             0           2         36
1            50           0          0
2             0          48         14
Unsupervised Learning in Python

Kontingenční tabulka s pandas

  • Shluky vs. druhy tvoří „kontingenční tabulku“
  • Použijte knihovnu pandas
  • Druhy vzorků jsou v seznamu species
print(species)
['setosa', 'setosa', 'versicolor', 'virginica', ... ]
Unsupervised Learning in Python

Spárování štítků a druhů

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
...
Unsupervised Learning in Python

Kontingenční tabulka štítků a druhů

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

Jak vyhodnotit shlukování bez informace o druzích?

Unsupervised Learning in Python

Měření kvality shlukování

  • S využitím pouze vzorků a jejich štítků shluku

  • Dobré shlukování má kompaktní shluky

  • Vzorky v každém shluku jsou blízko sebe

Unsupervised Learning in Python

Inerce měří kvalitu shlukování

  • Měří rozptyl shluků (nižší je lepší)
  • Vzdálenost vzorků od centroidu jejich shluku
  • Po fit() dostupná jako atribut inertia_
  • k-means při volbě shluků minimalizuje inerci
from sklearn.cluster import KMeans

model = KMeans(n_clusters=3)
model.fit(samples)
print(model.inertia_)
78.9408414261
Unsupervised Learning in Python

Počet shluků

  • Shlukování datasetu kosatců s různým počtem shluků
  • Více shluků znamená nižší inerci
  • Jaký je optimální počet shluků?

Spojnicový graf počtu shluků vs. inerce

Unsupervised Learning in Python

Kolik shluků zvolit?

  • Dobré shlukování má kompaktní shluky (tedy nízkou inerci)
  • ... ale ne příliš mnoho shluků!
  • Zvolte „loket“ v grafu inerce
  • Místo, kde inerce začíná klesat pomaleji
  • Např. pro kosatce je 3 dobrá volba

Spojnicový graf počtu shluků vs. inerce

Unsupervised Learning in Python

Pojďme cvičit!

Unsupervised Learning in Python

Preparing Video For Download...