Transformarea caracteristicilor pentru grupări mai bune

Învățare nesupervizată în Python

Benjamin Wilson

Director of Research at lateral.io

Setul de date Piedmont wines

  • 178 de mostre din 3 soiuri distincte de vin roșu: Barolo, Grignolino și Barbera

  • Caracteristicile măsoară compoziția chimică, de ex. conținutul de alcool

  • Proprietăți vizuale precum „intensitatea culorii"

1 Sursă: https://archive.ics.uci.edu/ml/datasets/Wine
Învățare nesupervizată în Python

Gruparea vinurilor

from sklearn.cluster import KMeans
model = KMeans(n_clusters=3)
labels = model.fit_predict(samples)
Învățare nesupervizată în Python

Grupuri vs. soiuri

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
Învățare nesupervizată în Python

Varianțele caracteristicilor

  • Caracteristicile vinului au varianțe foarte diferite!

  • Varianța unei caracteristici măsoară dispersia valorilor sale

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

Grafic de dispersie al variabilei od280 față de variabila malic_acid

Învățare nesupervizată în Python

Varianțele caracteristicilor

  • Caracteristicile vinului au varianțe foarte diferite!

  • Varianța unei caracteristici măsoară dispersia valorilor sale

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

Grafic de dispersie al variabilei od280 față de numărul observației

Învățare nesupervizată în Python

StandardScaler

  • În k-means: varianța caracteristicii = influența caracteristicii

  • StandardScaler transformă fiecare caracteristică la medie 0 și varianță 1

  • Caracteristicile sunt „standardizate"

Grafic de dispersie od280 standardizat vs. proline standardizat

Învățare nesupervizată în 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)
Învățare nesupervizată în Python

Metode similare

  • StandardScaler și KMeans au metode similare

  • Utilizați fit() / transform() cu StandardScaler

  • Utilizați fit() / predict() cu KMeans

Învățare nesupervizată în Python

StandardScaler, apoi KMeans

  • Sunt necesari doi pași: StandardScaler, apoi KMeans

  • Utilizați un pipeline sklearn pentru a combina mai mulți pași

  • Datele trec de la un pas la altul

Învățare nesupervizată în Python

Pipeline-urile combină mai mulți pași

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)
Învățare nesupervizată în Python

Standardizarea caracteristicilor îmbunătățește gruparea

Cu standardizarea caracteristicilor:

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

Fără standardizarea caracteristicilor, rezultatul a fost foarte slab:

varieties  Barbera  Barolo  Grignolino
labels                                
0               29      13          20
1                0      46           1
2               19       0          50
Învățare nesupervizată în Python

Pași de preprocesare sklearn

  • StandardScaler este un pas de „preprocesare"

  • MaxAbsScaler și Normalizer sunt alte exemple

Învățare nesupervizată în Python

Să exersăm!

Învățare nesupervizată în Python

Preparing Video For Download...