Miles per Gallon - OneHot Encoding
1. Analyse du dataset
Analyse du Dataset
df = sns.load_dataset('mpg')
df.head()
mpg cylinders displacement ... model_year origin name 0 18.0 8 307.0 ... 70 usa chevrolet chevelle malibu 1 15.0 8 350.0 ... 70 usa buick skylark 320 2 18.0 8 318.0 ... 70 usa plymouth satellite 3 16.0 8 304.0 ... 70 usa amc rebel sst 4 17.0 8 302.0 ... 70 usa ford torino [5 rows x 9 columns]
2 colonnes ne sont pas numériques et sont nominales (sans ordre) :
- 'origin' : Pays d'origine du modèle de voiture
- 'name' : Nom du modèle de vioture
- 'origin' : Pays d'origine du modèle de voiture
- 'name' : Nom du modèle de vioture
2. Encodage OneHot
Documentation OneHot Encoder
https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html
https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html
OneHot Encoder - Origin & Name
encoder = OneHotEncoder(sparse_output=False)
encoder.fit(df[['origin', 'name']])
encoder.transform(df[['origin', 'name']])
[[0. 0. 1. ... 0. 0. 0.] [0. 0. 1. ... 0. 0. 0.] [0. 0. 1. ... 0. 0. 0.] ... [0. 0. 1. ... 0. 0. 0.] [0. 0. 1. ... 0. 0. 0.] [0. 0. 1. ... 0. 0. 0.]]
Matrice creuse (Sparse matrix): Matrice avec énormément de valeurs nulles
sns.heatmap(encoder.transform(df[['origin', 'name']]))
Un point blanc = Une valeur 1 de la matrice d'encodage => matrice creuse
/!\ Une colonne avec 300 valeurs devient 300 colonnes !
/!\ Une colonne avec 300 valeurs devient 300 colonnes !
OneHot Encoder - Origin
encoder = OneHotEncoder(sparse_output=False)
encoder.fit(df[['origin']])
encoder.transform(df[['origin']])
[[0. 0. 1.] [0. 0. 1.] [0. 0. 1.] ... [0. 0. 1.] [0. 0. 1.] [0. 0. 1.]]
sns.heatmap(encoder.transform(df[['origin']]))
OneHot Encoder with first column dropped (problème de multi-colinéarité) - Origin
encoder = OneHotEncoder(sparse_output=False, drop='first', handle_unknown='ignore')
encoder.fit(df[['origin']])
encoder.transform(df[['origin']])
[[0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [1. 0.] [0. 1.] [0. 1.] [0. 1.] [1. 0.] [0. 0.] [0. 0.] [0. 0.] [0. 0.] [0. 0.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [1. 0.] [0. 1.] [1. 0.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 0.] [0. 0.] [0. 0.] [1. 0.] [1. 0.] [0. 0.] [0. 1.] [1. 0.] [0. 1.] [0. 0.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [1. 0.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 0.] [0. 0.] [0. 0.] [0. 0.] [0. 1.] [1. 0.] [1. 0.] [0. 1.] [1. 0.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 0.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [1. 0.] [0. 1.] [1. 0.] [1. 0.] [0. 1.] [0. 1.] [0. 0.] [0. 1.] [0. 1.] [0. 0.] [0. 0.] [0. 0.] [0. 0.] [0. 1.] [0. 0.] [1. 0.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [1. 0.] [0. 1.] [1. 0.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 0.] [0. 0.] [0. 0.] [1. 0.] [1. 0.] [0. 1.] [0. 0.] [0. 0.] [1. 0.] [1. 0.] [0. 0.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [1. 0.] [0. 1.] [0. 1.] [0. 1.] [1. 0.] [0. 0.] [1. 0.] [0. 1.] [0. 0.] [0. 1.] [0. 0.] [0. 0.] [0. 0.] [0. 0.] [1. 0.] [0. 0.] [0. 0.] [0. 1.] [0. 1.] [0. 0.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 0.] [1. 0.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 0.] [1. 0.] [1. 0.] [0. 1.] [0. 0.] [0. 1.] [0. 0.] [1. 0.] [0. 0.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [1. 0.] [0. 1.] [0. 0.] [0. 1.] [1. 0.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 0.] [0. 1.] [1. 0.] [0. 1.] [0. 1.] [0. 1.] [1. 0.] [0. 0.] [1. 0.] [0. 0.] [1. 0.] [0. 0.] [0. 1.] [1. 0.] [1. 0.] [1. 0.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [1. 0.] [1. 0.] [0. 1.] [1. 0.] [0. 1.] [0. 1.] [1. 0.] [0. 0.] [0. 0.] [0. 0.] [0. 0.] [0. 0.] [1. 0.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 0.] [1. 0.] [0. 1.] [0. 1.] [0. 0.] [0. 1.] [0. 0.] [0. 1.] [0. 1.] [0. 1.] [1. 0.] [0. 0.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 0.] [1. 0.] [0. 1.] [1. 0.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 0.] [1. 0.] [1. 0.] [1. 0.] [1. 0.] [1. 0.] [0. 1.] [1. 0.] [0. 0.] [0. 0.] [0. 0.] [0. 0.] [1. 0.] [0. 0.] [1. 0.] [0. 0.] [1. 0.] [1. 0.] [0. 0.] [0. 1.] [1. 0.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [1. 0.] [0. 1.] [1. 0.] [1. 0.] [1. 0.] [1. 0.] [1. 0.] [0. 1.] [0. 1.] [0. 1.] [0. 0.] [0. 0.] [1. 0.] [1. 0.] [1. 0.] [1. 0.] [0. 0.] [0. 0.] [1. 0.] [1. 0.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 0.] [1. 0.] [1. 0.] [0. 1.] [0. 1.] [1. 0.] [1. 0.] [1. 0.] [1. 0.] [1. 0.] [1. 0.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [1. 0.] [0. 1.] [0. 1.] [0. 1.] [0. 0.] [0. 1.] [0. 1.] [0. 1.]]
sns.heatmap(encoder.transform(df[['origin']]))