Transformationen von Merkmalen für bessere Clusterings

Unsupervised Learning in Python

Benjamin Wilson

Director of Research at lateral.io

Datensatz zu Weinen aus dem Piemont

  • 178 Proben von 3 verschiedenen Rotweinsorten: Barolo, Grignolino und Barbera

  • Merkmale erfassen die chemische Zusammensetzung, z. B. den Alkoholgehalt.

  • Visuelle Eigenschaften wie „Farbintensität“

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

Weine gruppieren

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

Cluster vs. Sorten

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

Varianzen von Merkmalen

  • Die Weine haben sehr unterschiedliche Eigenschaften!

  • Die Varianz eines Merkmals misst die Streuung der Werte.

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

Streudiagramm der Variablen od280 gegenüber der Variablen malic_acid

Unsupervised Learning in Python

Varianzen von Merkmalen

  • Die Weine haben sehr unterschiedliche Eigenschaften!

  • Die Varianz eines Merkmals misst die Streuung der Werte.

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

Streudiagramm der Variablen od280 gegenüber der Beobachtungsnummer

Unsupervised Learning in Python

StandardScaler

  • Bei k-Means: Merkmalsvarianz = Einfluss des Merkmals

  • StandardScaler wandelt jedes Merkmal so um, dass es den Mittelwert 0 und die Varianz 1 aufweist.

  • Merkmale werden „standardisiert“.

Standardisiertes OD280 vs. standardisiertes Prolin-Streudiagramm

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

Ähnliche Methoden

  • StandardScaler und KMeans haben ähnliche Methoden.

  • Benutze fit() / transform() mit StandardScaler

  • Benutze fit() / predict() mit KMeans

Unsupervised Learning in Python

StandardScaler, dann KMeans

  • Durchführung zweier Schritte: erst StandardScaler, dann KMeans

  • Nutzung der sklearn-Pipeline, um mehrere Schritte zu kombinieren.

  • Die Daten durchlaufen einen Schritt nach dem anderen.

Unsupervised Learning in Python

Pipelines kombinieren mehrere Schritte

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

Merkmalstandardisierung: bessere Clusterbildung

Mit Standardisierung von Merkmalen:

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

Schlechtes Ergebnis ohne Standardisierung von Merkmalen:

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

sklearn-Vorverarbeitungsschritte

  • StandardScaler ist ein „Vorverarbeitungsschritt“

  • MaxAbsScaler und Normalizer sind weitere Beispiele.

Unsupervised Learning in Python

Lass uns üben!

Unsupervised Learning in Python

Preparing Video For Download...