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 OneHotEncoderAttributs :
Paramètre Type Description Valeur par défaut handle_unknownstr, optionnel Définit comment gérer les catégories inconnues : error(valeur par défaut) pour générer une erreur, ouignorepour ignorer les valeurs inconnues et les encoder avec des zéros.errorcategorieslist, optionnel Liste des catégories à encoder. Si None, les catégories sont automatiquement déterminées à partir des données d'entraînement.Nonedtypestr, optionnel Type des valeurs retournées par l'encodeur. Par défaut, numpy.float64.numpy.float64Exemple 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 pdimporte la bibliothèque pandas, renommée ici enpdpour simplifier son utilisation dans le code.from sklearn.preprocessing import OneHotEncoderimporte 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é
dataest 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 DataFramedfavec la fonctionpd.DataFrame(data).Création de l'encodeur OneHotEncoder avec gestion des valeurs inconnues
Un objet de la classe
OneHotEncoderest 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
encodedest une matrice sparse, qui est convertie en un DataFrameencoded_dfavec 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.