Transformasi fitur untuk klaster yang lebih baik

Unsupervised Learning in Python

Benjamin Wilson

Director of Research at lateral.io

Dataset anggur Piedmont

  • 178 sampel dari 3 varietas anggur merah: Barolo, Grignolino, dan Barbera

  • Fitur mengukur komposisi kimia, mis. kadar alkohol

  • Properti visual seperti "intensitas warna"

1 Sumber: https://archive.ics.uci.edu/ml/datasets/Wine
Unsupervised Learning in Python

Mengklaster anggur

from sklearn.cluster import KMeans
model = KMeans(n_clusters=3)
labels = model.fit_predict(samples)
Unsupervised Learning in Python

Klaster vs. varietas

df = pd.DataFrame({'labels': labels, 
                       'varieties': varieties})
ct = pd.crosstab(df['labels'], df['varieties'])

print(ct)
varieties  Barbera  Barolo  Grignolino
labels                                
0               29      13          20
1                0      46           1
2               19       0          50
Unsupervised Learning in Python

Varians fitur

  • Fitur wine punya varians yang sangat berbeda!

  • Varians fitur mengukur sebaran nilainya

feature     variance
alcohol         0.65
malic_acid      1.24
...
od280           0.50
proline     99166.71

Plot sebar od280 vs malic_acid

Unsupervised Learning in Python

Varians fitur

  • Fitur wine punya varians yang sangat berbeda!

  • Varians fitur mengukur sebaran nilainya

feature     variance
alcohol         0.65
malic_acid      1.24
...
od280           0.50
proline     99166.71

Plot sebar od280 vs nomor observasi

Unsupervised Learning in Python

StandardScaler

  • Di kmeans: varians fitur = pengaruh fitur

  • StandardScaler mengubah tiap fitur agar mean 0 dan varians 1

  • Fitur disebut "distandardisasi"

Sebar standar od280 vs proline yang distandardisasi

Unsupervised Learning in Python

sklearn StandardScaler

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
scaler.fit(samples) StandardScaler(copy=True, with_mean=True, with_std=True)
samples_scaled = scaler.transform(samples)
Unsupervised Learning in Python

Metode yang mirip

  • StandardScaler dan KMeans punya metode serupa

  • Gunakan fit() / transform() dengan StandardScaler

  • Gunakan fit() / predict() dengan KMeans

Unsupervised Learning in Python

StandardScaler, lalu KMeans

  • Perlu dua langkah: StandardScaler, lalu KMeans

  • Gunakan pipeline sklearn untuk menggabungkan beberapa langkah

  • Data mengalir dari satu langkah ke langkah berikutnya

Unsupervised Learning in Python

Pipeline menggabungkan beberapa langkah

from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
scaler = StandardScaler()
kmeans = KMeans(n_clusters=3)

from sklearn.pipeline import make_pipeline
pipeline = make_pipeline(scaler, kmeans)
pipeline.fit(samples)
Pipeline(steps=...)
labels = pipeline.predict(samples)
Unsupervised Learning in Python

Standardisasi fitur meningkatkan klastering

Dengan standardisasi fitur:

varieties  Barbera  Barolo  Grignolino
labels                                
0                0      59           3
1               48       0           3
2                0       0          65

Tanpa standardisasi fitur hasilnya sangat buruk:

varieties  Barbera  Barolo  Grignolino
labels                                
0               29      13          20
1                0      46           1
2               19       0          50
Unsupervised Learning in Python

Langkah preprocessing di sklearn

  • StandardScaler adalah langkah "preprocessing"

  • MaxAbsScaler dan Normalizer adalah contoh lain

Unsupervised Learning in Python

Ayo berlatih!

Unsupervised Learning in Python

Preparing Video For Download...