Evaluarea unei clusterizări

Învățare nesupervizată în Python

Benjamin Wilson

Director of Research at lateral.io

Evaluarea unei clusterizări

  • Se poate verifica corespondența cu, de ex., speciile iris
  • ... dar ce se întâmplă dacă nu există specii de verificat?
  • Măsurați calitatea unei clusterizări
  • Ghidează alegerea numărului de clustere căutate
Învățare nesupervizată în Python

Iris: clustere vs. specii

  • k-means a identificat 3 clustere în eșantioanele iris
  • Clusterele corespund speciilor?
species  setosa  versicolor  virginica
labels
0             0           2         36
1            50           0          0
2             0          48         14
Învățare nesupervizată în Python

Tabel de contingență cu pandas

  • Clustere vs. specii reprezintă un „tabel de contingență"
  • Se utilizează biblioteca pandas
  • Speciile fiecărui eșantion sunt date ca listă species
print(species)
['setosa', 'setosa', 'versicolor', 'virginica', ... ]
Învățare nesupervizată în Python

Alinierea etichetelor și speciilor

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
...
Învățare nesupervizată în Python

Tabel de contingență: etichete și specii

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

Cum se evaluează o clusterizare fără informații despre specii?

Învățare nesupervizată în Python

Măsurarea calității clusterizării

  • Se utilizează doar eșantioanele și etichetele lor de cluster

  • O clusterizare bună are clustere compacte

  • Eșantioanele din fiecare cluster sunt grupate strâns

Învățare nesupervizată în Python

Inerția măsoară calitatea clusterizării

  • Măsoară dispersia clusterelor (mai mic este mai bun)
  • Distanța de la fiecare eșantion la centroidul clusterului său
  • După fit(), disponibil ca atribut inertia_
  • k-means minimizează inerția la alegerea clusterelor
from sklearn.cluster import KMeans

model = KMeans(n_clusters=3)
model.fit(samples)
print(model.inertia_)
78.9408414261
Învățare nesupervizată în Python

Numărul de clustere

  • Clusterizări ale setului iris cu număr diferit de clustere
  • Mai multe clustere înseamnă inerție mai mică
  • Care este numărul optim de clustere?

Grafic liniar: număr de clustere vs. inerție

Învățare nesupervizată în Python

Câte clustere să alegeți?

  • O clusterizare bună are clustere compacte (inerție mică)
  • ... dar nu prea multe clustere!
  • Alegeți un „cot" în graficul inerției
  • Acolo unde inerția începe să scadă mai lent
  • Ex.: pentru setul iris, 3 este o alegere bună

Grafic liniar: număr de clustere vs. inerție

Învățare nesupervizată în Python

Să exersăm!

Învățare nesupervizată în Python

Preparing Video For Download...