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)
    Résultat du code

    Explication du code :

    import pandas as pd importe la bibliothèque pandas, renommée ici en pd 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 DataFrame df avec la fonction pd.DataFrame(data).

    Création de l'encodeur OneHotEncoder avec gestion des valeurs inconnues

    Un objet de la classe OneHotEncoder est créé et assigné à la variable encoder. Le paramètre handle_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 DataFrame df (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 variable encoded.

    Conversion du résultat en DataFrame pour une meilleure lisibilité

    Le résultat de encoded est une matrice sparse, qui est convertie en un DataFrame encoded_df avec la méthode toarray(). Les colonnes du DataFrame sont nommées en fonction des catégories présentes dans la colonne 'niveau_education', grâce à la méthode get_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.