Encodeur One-Hot
Lorsqu'il s'agit de valeurs nominales, leur traitement est un peu plus complexe.
Pour les données ordinales, telles que les évaluations d'utilisateurs allant de 'Terrible' à 'Excellent', les encoder sous forme de nombres de 0 à 4 est approprié, car le modèle peut saisir l'ordre inhérent.
En revanche, pour une caractéristique comme 'city'
comportant cinq catégories distinctes, les encoder sous forme de nombres de 0 à 4 suggérerait à tort un ordre. Dans ce cas, l'encodage one-hot est préférable, car il représente les catégories sans impliquer de hiérarchie.
Pour encoder des données nominales, on utilise le transformateur OneHotEncoder
. Il crée une colonne pour chaque valeur unique. Ensuite, pour chaque ligne, il attribue 1 à la colonne correspondant à la valeur de cette ligne et 0 aux autres colonnes.
Ce qui était à l'origine 'NewYork'
a maintenant 1 dans la colonne 'City_NewYork'
et 0 dans les autres colonnes City_
.
Appliquer OneHotEncoder
au jeu de données penguins. Les variables nominales sont 'island'
et 'sex'
. La colonne 'species'
est la cible et sera traitée séparément lors de la discussion sur l'encodage de la cible dans le prochain chapitre.
123456import pandas as pd df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_imputed.csv') print('island: ', df['island'].unique()) print('sex: ', df['sex'].unique())
Pour appliquer OneHotEncoder
, initialiser l'objet encodeur et transmettre les colonnes sélectionnées à .fit_transform()
, de la même manière qu'avec d'autres transformateurs.
1234567891011import pandas as pd from sklearn.preprocessing import OneHotEncoder df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_imputed.csv') # Assign X, y variables y = df['species'] X = df.drop('species', axis=1) # Initialize an OneHotEncoder object one_hot = OneHotEncoder() # Print transformed 'sex', 'island' columns print(one_hot.fit_transform(X[['sex', 'island']]).toarray())
La méthode .toarray()
convertit la matrice creuse produite par OneHotEncoder
en un tableau NumPy dense. Les tableaux denses affichent explicitement toutes les valeurs, ce qui facilite la visualisation et la manipulation des données encodées dans un DataFrame. Les matrices creuses ne stockent que les éléments non nuls, optimisant ainsi l'utilisation de la mémoire. Vous pouvez omettre cette méthode pour observer la différence de sortie.
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion
Awesome!
Completion rate improved to 3.13
Encodeur One-Hot
Glissez pour afficher le menu
Lorsqu'il s'agit de valeurs nominales, leur traitement est un peu plus complexe.
Pour les données ordinales, telles que les évaluations d'utilisateurs allant de 'Terrible' à 'Excellent', les encoder sous forme de nombres de 0 à 4 est approprié, car le modèle peut saisir l'ordre inhérent.
En revanche, pour une caractéristique comme 'city'
comportant cinq catégories distinctes, les encoder sous forme de nombres de 0 à 4 suggérerait à tort un ordre. Dans ce cas, l'encodage one-hot est préférable, car il représente les catégories sans impliquer de hiérarchie.
Pour encoder des données nominales, on utilise le transformateur OneHotEncoder
. Il crée une colonne pour chaque valeur unique. Ensuite, pour chaque ligne, il attribue 1 à la colonne correspondant à la valeur de cette ligne et 0 aux autres colonnes.
Ce qui était à l'origine 'NewYork'
a maintenant 1 dans la colonne 'City_NewYork'
et 0 dans les autres colonnes City_
.
Appliquer OneHotEncoder
au jeu de données penguins. Les variables nominales sont 'island'
et 'sex'
. La colonne 'species'
est la cible et sera traitée séparément lors de la discussion sur l'encodage de la cible dans le prochain chapitre.
123456import pandas as pd df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_imputed.csv') print('island: ', df['island'].unique()) print('sex: ', df['sex'].unique())
Pour appliquer OneHotEncoder
, initialiser l'objet encodeur et transmettre les colonnes sélectionnées à .fit_transform()
, de la même manière qu'avec d'autres transformateurs.
1234567891011import pandas as pd from sklearn.preprocessing import OneHotEncoder df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_imputed.csv') # Assign X, y variables y = df['species'] X = df.drop('species', axis=1) # Initialize an OneHotEncoder object one_hot = OneHotEncoder() # Print transformed 'sex', 'island' columns print(one_hot.fit_transform(X[['sex', 'island']]).toarray())
La méthode .toarray()
convertit la matrice creuse produite par OneHotEncoder
en un tableau NumPy dense. Les tableaux denses affichent explicitement toutes les valeurs, ce qui facilite la visualisation et la manipulation des données encodées dans un DataFrame. Les matrices creuses ne stockent que les éléments non nuls, optimisant ainsi l'utilisation de la mémoire. Vous pouvez omettre cette méthode pour observer la différence de sortie.
Merci pour vos commentaires !