Transformace proměnných pro lepší shlukování

Unsupervised Learning in Python

Benjamin Wilson

Director of Research at lateral.io

Datová sada piemontských vín

  • 178 vzorků ze 3 různých odrůd červeného vína: Barolo, Grignolino a Barbera

  • Proměnné popisují chemické složení, např. obsah alkoholu

  • Vizuální vlastnosti jako „intenzita barvy“

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

Shlukování vín

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

Shluky vs. odrůdy

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

Rozptyly proměnných

  • Proměnné vín mají velmi odlišné rozptyly!

  • Rozptyl proměnné měří rozložení jejích hodnot

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

Bodový graf proměnné od280 vs. proměnné malic_acid

Unsupervised Learning in Python

Rozptyly proměnných

  • Proměnné vín mají velmi odlišné rozptyly!

  • Rozptyl proměnné měří rozložení jejích hodnot

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

Bodový graf proměnné od280 vs. číslo pozorování

Unsupervised Learning in Python

StandardScaler

  • V k-means: rozptyl proměnné = její vliv

  • StandardScaler upraví každou proměnnou na průměr 0 a rozptyl 1

  • Proměnné jsou pak „standardizované“

Bodový graf standardizovaného od280 vs. standardizovaného proline

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

Podobné metody

  • StandardScaler a KMeans mají podobné metody

  • U StandardScaler použijte fit() / transform()

  • U KMeans použijte fit() / predict()

Unsupervised Learning in Python

StandardScaler, poté KMeans

  • Je potřeba provést dva kroky: StandardScaler, poté KMeans

  • Použijte sklearn pipeline pro kombinaci více kroků

  • Data plynou z jednoho kroku do dalšího

Unsupervised Learning in Python

Pipeline spojuje více kroků

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

Standardizace proměnných zlepšuje shlukování

Se standardizací proměnných:

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

Bez standardizace byl výsledek velmi špatný:

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

Kroky předzpracování v sklearn

  • StandardScaler je krok „předzpracování“

  • MaxAbsScaler a Normalizer jsou další příklady

Unsupervised Learning in Python

Pojďme si to vyzkoušet!

Unsupervised Learning in Python

Preparing Video For Download...