Transformation des caractéristiques pour améliorer les regroupements

Apprentissage non supervisé en Python

Benjamin Wilson

Director of Research at lateral.io

Ensemble de données sur les vins du Piémont

  • 178 échantillons provenant de trois variétés distinctes de vin rouge : Barolo, Grignolino et Barbera

  • Caractéristiques : mesure de la composition chimique, par exemple la teneur en alcool

  • Propriétés visuelles telles que l'« intensité des couleurs »

1 Source : https://archive.ics.uci.edu/ml/datasets/Wine
Apprentissage non supervisé en Python

Regroupement des vins

from sklearn.cluster import KMeans
model = KMeans(n_clusters=3)
labels = model.fit_predict(samples)
Apprentissage non supervisé en Python

Groupes et variétés

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
Apprentissage non supervisé en Python

Variations des fonctionnalités

  • Les caractéristiques du vin présentent des variations très importantes

  • La variance d'une caractéristique mesure la dispersion de ses valeurs

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

Scatter plot of od280 varible vs malic_acid variable

Apprentissage non supervisé en Python

Variations des fonctionnalités

  • Les caractéristiques du vin présentent des variations très importantes

  • La variance d'une caractéristique mesure la dispersion de ses valeurs

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

Scatter plot of od280 varible vs observation number

Apprentissage non supervisé en Python

StandardScaler

  • Dans kmeans : variance des caractéristiques = influence des caractéristiques

  • StandardScaler transforme chaque caractéristique pour qu'elle ait une moyenne de 0 et une variance de 1

  • Les fonctionnalités sont considérées comme « standardisées »

Standardized od280 vs standardized proline scatter plot

Apprentissage non supervisé en 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)
Apprentissage non supervisé en Python

Méthodes similaires

  • StandardScaler et KMeans ont des méthodes similaires

  • Utiliser fit() / transform() avec StandardScaler

  • Utiliser fit() / predict() avec KMeans

Apprentissage non supervisé en Python

StandardScaler, puis KMeans

  • Il est nécessaire de suivre deux étapes : StandardScaler, puis KMeans

  • Utiliser le pipeline sklearn pour combiner plusieurs étapes

  • Les données sont transférées d'une étape à l'autre

Apprentissage non supervisé en Python

Les pipelines regroupent plusieurs étapes

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)
Apprentissage non supervisé en Python

La normalisation des caractéristiques améliore le regroupement

Avec la normalisation des caractéristiques :

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

Sans standardisation des caractéristiques, la situation était très défavorable :

varieties  Barbera  Barolo  Grignolino
labels                                
0               29      13          20
1                0      46           1
2               19       0          50
Apprentissage non supervisé en Python

Étapes de prétraitement sklearn

  • StandardScaler est une étape de « prétraitement »

  • MaxAbsScaler et Normalizer sont d'autres exemples

Apprentissage non supervisé en Python

Passons à la pratique !

Apprentissage non supervisé en Python

Preparing Video For Download...