Ocena grupowania

Uczenie nienadzorowane w Pythonie

Benjamin Wilson

Director of Research at lateral.io

Ocena grupowania

  • Można sprawdzić zgodność np. z gatunkami irysów
  • ... ale co, jeśli nie ma gatunków do porównania?
  • Ocena jakości grupowania
  • Pomaga w wyborze liczby klastrów
Uczenie nienadzorowane w Pythonie

Iris: klastry a gatunki

  • k-means znalazł 3 klastry wśród próbek irysów
  • Czy klastry odpowiadają gatunkom?
species  setosa  versicolor  virginica
labels
0             0           2         36
1            50           0          0
2             0          48         14
Uczenie nienadzorowane w Pythonie

Tabela krzyżowa z pandas

  • Klastry a gatunki — to „tabela krzyżowa"
  • Użyj biblioteki pandas
  • Gatunki każdej próbki podane jako lista species
print(species)
['setosa', 'setosa', 'versicolor', 'virginica', ... ]
Uczenie nienadzorowane w Pythonie

Dopasowanie etykiet i gatunków

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
...
Uczenie nienadzorowane w Pythonie

Tabela krzyżowa etykiet i gatunków

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 ocenić grupowanie, gdyby nie było informacji o gatunkach?

Uczenie nienadzorowane w Pythonie

Mierzenie jakości grupowania

  • Używa tylko próbek i ich etykiet grup

  • Dobre grupowanie ma zwarte klastry

  • Próbki w każdym klastrze są skupione razem

Uczenie nienadzorowane w Pythonie

Inercja mierzy jakość grupowania

  • Mierzy rozproszenie klastrów (niższa wartość = lepiej)
  • Odległość każdej próbki od centroidu jej klastra
  • Po fit() dostępna jako atrybut inertia_
  • k-means minimalizuje inercję przy wyborze klastrów
from sklearn.cluster import KMeans

model = KMeans(n_clusters=3)
model.fit(samples)
print(model.inertia_)
78.9408414261
Uczenie nienadzorowane w Pythonie

Liczba klastrów

  • Grupowania zbioru iris dla różnych liczb klastrów
  • Więcej klastrów oznacza niższą inercję
  • Jaka jest optymalna liczba klastrów?

Wykres liniowy: liczba klastrów a inercja

Uczenie nienadzorowane w Pythonie

Ile klastrów wybrać?

  • Dobre grupowanie ma zwarte klastry (niska inercja)
  • ... ale nie za dużo klastrów!
  • Wybierz „łokieć" na wykresie inercji
  • Punkt, w którym inercja zaczyna maleć wolniej
  • Np. dla zbioru iris dobry wybór to 3

Wykres liniowy: liczba klastrów a inercja

Uczenie nienadzorowane w Pythonie

Czas na ćwiczenia!

Uczenie nienadzorowane w Pythonie

Preparing Video For Download...