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 :
- DataFrame : Le DataFrame contient une colonne
'niveau_education'
avec des niveaux d'éducation. OneHotEncoder
: L'encodeur est créé avec l'argumenthandle_unknown='ignore'
. Cela permet de gérer les valeurs inconnues en les encodant avec des zéros, au lieu de générer une erreur si une catégorie inconnue est rencontrée.fit_transform()
: Cette méthode ajuste l'encodeur aux données et transforme la colonne'niveau_education'
en une matrice de valeurs binaires où chaque catégorie est représentée par une colonne.- Conversion en DataFrame : Le résultat de la transformation est converti en DataFrame pour une meilleure lisibilité et une gestion facile des colonnes générées.
Remarques :
- Utilisation pour des données en production : Cette méthode est particulièrement utile lorsque vous appliquez un encodeur appris sur un ensemble d'entraînement à des données de test ou de production, où certaines catégories peuvent ne pas avoir été vues lors de l'entraînement.
- Fonctionnement avec
ignore
: Si vous utilisezhandle_unknown='ignore'
, toutes les catégories non présentes dans l'entraînement seront encodées par un vecteur de zéros. Si une autre gestion est requise (par exemple, attribuer une valeur par défaut), l'optionhandle_unknown='use_encoded_value'
peut être utilisée avec l'argumentunknown_value
.
- DataFrame : Le DataFrame contient une colonne