Gestion des valeurs inconnues avec handle_unknown dans OneHotEncoder
L’argument handle_unknown dans OneHotEncoder de Scikit-learn permet de définir comment gérer les valeurs inconnues (celles qui ne figurent pas dans l’ensemble d’entraînement) lors de l’application de l’encodage One-Hot. Cet argument est utile lorsque vous travaillez avec des ensembles de données qui peuvent contenir des catégories qui ne sont pas présentes lors de l’entraînement du modèle.
Fonctions :
-
OneHotEncoder(handle_unknown='ignore')
L'OneHotEncoder de Scikit-learn permet de convertir des variables catégorielles en représentations binaires. Par défaut, l'encodeur génère une erreur si des catégories inconnues sont rencontrées dans les données de test. Cependant, en utilisant l'argument handle_unknown='ignore', les valeurs inconnues sont simplement ignorées, et un vecteur de zéros est retourné pour ces catégories. Cette fonctionnalité est particulièrement utile lors de l'entraînement sur un ensemble de données avec des catégories connues et l'application de l'encodeur à un autre ensemble de données où de nouvelles catégories peuvent apparaître.
Importation :
import pandas as pd from sklearn.preprocessing import OneHotEncoder
Attributs :
Paramètre Type Description Valeur par défaut handle_unknown
str, optionnel Définit comment gérer les catégories inconnues : error
(valeur par défaut) pour générer une erreur, ouignore
pour ignorer les valeurs inconnues et les encoder avec des zéros.error
categories
list, optionnel Liste des catégories à encoder. Si None
, les catégories sont automatiquement déterminées à partir des données d'entraînement.None
dtype
str, optionnel Type des valeurs retournées par l'encodeur. Par défaut, numpy.float64
.numpy.float64
Exemple de code :
import pandas as pd from sklearn.preprocessing import OneHotEncoder # Exemple de DataFrame avec des catégories data = { 'niveau_education': ['Bac', 'Master', 'Doctorat', 'Licence', 'Master', 'Bac'], } df = pd.DataFrame(data) # Création de l'encodeur OneHotEncoder avec gestion des valeurs inconnues encoder = OneHotEncoder(handle_unknown='ignore') # Transformation des données encoded = encoder.fit_transform(df[['niveau_education']]) # Conversion du résultat en DataFrame pour une meilleure lisibilité encoded_df = pd.DataFrame(encoded.toarray(), columns=encoder.get_feature_names_out(['niveau_education'])) # Affichage du DataFrame encodé print(encoded_df)
Explication du code :
import pandas as pd
importe la bibliothèque pandas, renommée ici enpd
pour simplifier son utilisation dans le code.from sklearn.preprocessing import OneHotEncoder
importe la classe OneHotEncoder de la bibliothèque scikit-learn, qui est utilisée pour effectuer un encodage des variables catégorielles en variables binaires (0 ou 1).Exemple de DataFrame avec des catégories
Un dictionnaire nommé
data
est créé avec une clé'niveau_education'
, contenant une liste de différentes catégories (par exemple, 'Bac', 'Master', etc.). Ce dictionnaire est ensuite converti en un DataFramedf
avec la fonctionpd.DataFrame(data)
.Création de l'encodeur OneHotEncoder avec gestion des valeurs inconnues
Un objet de la classe
OneHotEncoder
est créé et assigné à la variableencoder
. Le paramètrehandle_unknown='ignore'
spécifie que si une valeur inconnue est rencontrée lors de la transformation, elle sera ignorée et ne générera pas d'erreur.Transformation des données
La méthode
fit_transform()
est utilisée pour ajuster l'encodeur aux données et appliquer l'encodage. Cette méthode transforme les catégories du DataFramedf
(colonne'niveau_education'
) en une matrice binaire, où chaque catégorie est représentée par une colonne avec des valeurs 0 ou 1. Le résultat est stocké dans la variableencoded
.Conversion du résultat en DataFrame pour une meilleure lisibilité
Le résultat de
encoded
est une matrice sparse, qui est convertie en un DataFrameencoded_df
avec la méthodetoarray()
. Les colonnes du DataFrame sont nommées en fonction des catégories présentes dans la colonne'niveau_education'
, grâce à la méthodeget_feature_names_out()
.Affichage du DataFrame encodé
La fonction
print(encoded_df)
affiche le DataFrame encodé, montrant les variables catégorielles sous forme de colonnes binaires (0 ou 1), chaque ligne représentant une observation du DataFrame original.