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, ou ignore 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'argument handle_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 utilisez handle_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'option handle_unknown='use_encoded_value' peut être utilisée avec l'argument unknown_value.