Transformacja cech dla lepszego grupowania

Uczenie nienadzorowane w Pythonie

Benjamin Wilson

Director of Research at lateral.io

Zbiór danych win z Piemontu

  • 178 próbek z 3 odmian czerwonego wina: Barolo, Grignolino i Barbera

  • Cechy opisują skład chemiczny, np. zawartość alkoholu

  • Właściwości wizualne, np. „intensywność koloru"

1 Źródło: https://archive.ics.uci.edu/ml/datasets/Wine
Uczenie nienadzorowane w Pythonie

Grupowanie win

from sklearn.cluster import KMeans
model = KMeans(n_clusters=3)
labels = model.fit_predict(samples)
Uczenie nienadzorowane w Pythonie

Klastry vs. odmiany

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
Uczenie nienadzorowane w Pythonie

Wariancje cech

  • Cechy wina mają bardzo różne wariancje!

  • Wariancja cechy mierzy rozrzut jej wartości

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

Wykres rozrzutu zmiennej od280 względem zmiennej malic_acid

Uczenie nienadzorowane w Pythonie

Wariancje cech

  • Cechy wina mają bardzo różne wariancje!

  • Wariancja cechy mierzy rozrzut jej wartości

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

Wykres rozrzutu zmiennej od280 względem numeru obserwacji

Uczenie nienadzorowane w Pythonie

StandardScaler

  • W k-means: wariancja cechy = wpływ cechy

  • StandardScaler przekształca każdą cechę do średniej 0 i wariancji 1

  • Cechy są wówczas „standaryzowane"

Wykres rozrzutu standaryzowanego od280 vs standaryzowanego proline

Uczenie nienadzorowane w Pythonie

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)
Uczenie nienadzorowane w Pythonie

Podobne metody

  • StandardScaler i KMeans mają podobne metody

  • Użyj fit() / transform() z StandardScaler

  • Użyj fit() / predict() z KMeans

Uczenie nienadzorowane w Pythonie

StandardScaler, następnie KMeans

  • Wymagane dwa kroki: StandardScaler, następnie KMeans

  • Użyj potoku sklearn, aby połączyć kroki

  • Dane przepływają z jednego kroku do kolejnego

Uczenie nienadzorowane w Pythonie

Potoki łączą wiele kroków

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)
Uczenie nienadzorowane w Pythonie

Standaryzacja cech poprawia grupowanie

Ze standaryzacją cech:

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

Bez standaryzacji cech wyniki były bardzo złe:

varieties  Barbera  Barolo  Grignolino
labels                                
0               29      13          20
1                0      46           1
2               19       0          50
Uczenie nienadzorowane w Pythonie

Kroki preprocessingu w sklearn

  • StandardScaler jest krokiem „preprocessingu"

  • MaxAbsScaler i Normalizer to inne przykłady

Uczenie nienadzorowane w Pythonie

Czas na ćwiczenia!

Uczenie nienadzorowane w Pythonie

Preparing Video For Download...