Features transformeren voor betere clustering

Unsupervised Learning in Python

Benjamin Wilson

Director of Research at lateral.io

Piëmont-wijnendataset

  • 178 samples van 3 rodewijnsoorten: Barolo, Grignolino en Barbera

  • Features meten chemische samenstelling, bijv. alcoholgehalte

  • Visuele eigenschappen zoals “kleurintensiteit”

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

De wijnen clusteren

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

Clusters vs. variëteiten

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

Featurevarianties

  • De wijnfeatures hebben heel verschillende varianties!

  • De variantie van een feature meet de spreiding van de waarden

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

Spreidingsdiagram van od280-variabele vs malic_acid-variabele

Unsupervised Learning in Python

Featurevarianties

  • De wijnfeatures hebben heel verschillende varianties!

  • De variantie van een feature meet de spreiding van de waarden

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

Spreidingsdiagram van od280-variabele vs observatienummer

Unsupervised Learning in Python

StandardScaler

  • In kmeans: featurevariantie = invloed van feature

  • StandardScaler zet elke feature om naar gemiddelde 0 en variantie 1

  • Features zijn dan “gestandaardiseerd”

Gestandaardiseerde od280 vs gestandaardiseerde proline, scatterplot

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

Vergelijkbare methods

  • StandardScaler en KMeans hebben vergelijkbare methods

  • Gebruik fit() / transform() met StandardScaler

  • Gebruik fit() / predict() met KMeans

Unsupervised Learning in Python

Eerst StandardScaler, dan KMeans

  • Twee stappen nodig: StandardScaler, daarna KMeans

  • Gebruik een sklearn-pipeline om stappen te combineren

  • Data stroomt van de ene stap naar de volgende

Unsupervised Learning in Python

Pipelines combineren meerdere stappen

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

Standaardiseren verbetert clustering

Met featurestandaardisatie:

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

Zonder featurestandaardisatie was het erg slecht:

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

sklearn preprocessing-stappen

  • StandardScaler is een preprocessing-stap

  • MaxAbsScaler en Normalizer zijn andere voorbeelden

Unsupervised Learning in Python

Laten we oefenen!

Unsupervised Learning in Python

Preparing Video For Download...