Mengevaluasi klastering

Unsupervised Learning in Python

Benjamin Wilson

Director of Research at lateral.io

Mengevaluasi klastering

  • Dapat cek kesesuaian dengan mis. spesies iris
  • ... tapi bagaimana jika tidak ada spesies untuk dibandingkan?
  • Ukur kualitas klastering
  • Membantu memilih berapa banyak klaster yang dicari
Unsupervised Learning in Python

Iris: klaster vs. spesies

  • k-means menemukan 3 klaster pada sampel iris
  • Apakah klaster sesuai dengan spesies?
species  setosa  versicolor  virginica
labels
0             0           2         36
1            50           0          0
2             0          48         14
Unsupervised Learning in Python

Crosstab dengan pandas

  • Klaster vs spesies adalah "crosstab"
  • Gunakan pustaka pandas
  • Diberi daftar spesies tiap sampel sebagai species
print(species)
['setosa', 'setosa', 'versicolor', 'virginica', ... ]
Unsupervised Learning in Python

Menyelaraskan label dan spesies

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

Crosstab label dan spesies

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

Bagaimana mengevaluasi klastering jika tidak ada informasi spesies?

Unsupervised Learning in Python

Mengukur kualitas klastering

  • Hanya gunakan sampel dan label klasternya

  • Klastering yang baik punya klaster rapat

  • Sampel dalam tiap klaster berkumpul rapat

Unsupervised Learning in Python

Inertia mengukur kualitas klastering

  • Mengukur seberapa menyebar klaster (semakin rendah semakin baik)
  • Jarak tiap sampel ke centroid klasternya
  • Setelah fit(), tersedia sebagai atribut inertia_
  • k-means meminimalkan inertia saat memilih klaster
from sklearn.cluster import KMeans

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

Jumlah klaster

  • Klastering iris dengan jumlah klaster berbeda
  • Lebih banyak klaster → inertia lebih rendah
  • Berapa jumlah klaster terbaik?

Plot garis jumlah klaster vs. inertia

Unsupervised Learning in Python

Berapa banyak klaster yang dipilih?

  • Klastering yang baik rapat (inertia rendah)
  • ... tapi jangan terlalu banyak klaster!
  • Pilih "siku" pada plot inertia
  • Titik saat penurunan inertia mulai melambat
  • Mis. untuk iris, 3 adalah pilihan bagus

Plot garis jumlah klaster vs. inertia

Unsupervised Learning in Python

Ayo berlatih!

Unsupervised Learning in Python

Preparing Video For Download...