logo

Un codage à chaud dans l'apprentissage automatique

La plupart des ensembles de données réels que nous rencontrons au cours du développement de notre projet de science des données comportent des colonnes de types de données mixtes. Ces ensembles de données comprennent à la fois catégorique ainsi que des colonnes numériques. Cependant, divers modèles d'apprentissage automatique ne fonctionnent pas avec des données catégorielles et pour intégrer ces données dans le modèle d'apprentissage automatique, elles doivent être converties en données numériques. Par exemple, supposons qu'un ensemble de données ait un Genre colonne avec des éléments catégoriels comme Mâle et Femelle . Ces étiquettes n'ont pas d'ordre de préférence spécifique et, comme les données sont des étiquettes de chaîne, les modèles d'apprentissage automatique ont mal interprété l'idée qu'il existe une sorte de hiérarchie entre elles.

Une approche pour résoudre ce problème peut être l'encodage d'étiquettes où l'on attribuera une valeur numérique à ces étiquettes par exemple Mâle et Femelle orienté vers 0 et 1 . Mais cela peut ajouter un biais à notre modèle, dans la mesure où il commencera à accorder une plus grande préférence aux Femelle paramètre comme 1>0 mais idéalement, les deux étiquettes sont d’égale importance dans l’ensemble de données. Pour résoudre ce problème, nous utiliserons la technique One Hot Encoding.

Un encodage à chaud

Un codage à chaud est une technique que nous utilisons pour représenter des variables catégorielles sous forme de valeurs numériques dans un modèle d'apprentissage automatique.



Les avantages de l’utilisation d’un seul encodage à chaud incluent :

  1. Il permet l'utilisation de variables catégorielles dans des modèles nécessitant une entrée numérique.
  2. Cela peut améliorer les performances du modèle en fournissant plus d'informations au modèle sur la variable catégorielle.
  3. Cela peut aider à éviter le problème d'ordinanalité, qui peut survenir lorsqu'une variable catégorielle a un ordre naturel (par exemple petit, moyen, grand).

Les inconvénients de l’utilisation d’un seul encodage à chaud incluent :

  1. Cela peut conduire à une dimensionnalité accrue, car une colonne distincte est créée pour chaque catégorie de la variable. Cela peut rendre le modèle plus complexe et plus lent à entraîner.
  2. Cela peut conduire à des données clairsemées, car la plupart des observations auront une valeur de 0 dans la plupart des colonnes codées à chaud.
  3. Cela peut conduire à un surajustement, surtout s’il existe de nombreuses catégories dans la variable et que la taille de l’échantillon est relativement petite.
  4. L'encodage à chaud est une technique puissante pour traiter les données catégorielles, mais elle peut entraîner une dimensionnalité accrue, une rareté et un surapprentissage. Il est important de l’utiliser avec prudence et d’envisager d’autres méthodes telles que le codage ordinal ou le codage binaire.

Un exemple d'encodage à chaud

Dans Un encodage à chaud , les paramètres catégoriels prépareront des colonnes distinctes pour les étiquettes Homme et Femme. Ainsi, partout où il y a un Homme, la valeur sera 1 dans la colonne Homme et 0 dans la colonne Femme, et vice versa. Comprenons avec un exemple : considérons les données où les fruits, leurs valeurs catégorielles correspondantes et leurs prix sont indiqués.

FruitValeur catégorielle du fruitPrix
pomme15
mangue2dix
pomme1quinze
orange3vingt

Le résultat après application du codage à chaud sur les données est donné comme suit :

pommemangueorangeprix
1005
010dix
100quinze
001vingt

Encodage à chaud à l'aide de Python

Création d'une trame de données

Création d'un dataframe pour implémenter un encodage à chaud à partir d'un fichier CSV.

langage informatique génial
Python3
# Program for demonstration of one hot encoding # import libraries import numpy as np import pandas as pd # import the data required data = pd.read_csv('employee_data.csv') print(data.head())>

Sortir:

Cinq premières lignes de Dataframe

Cinq premières lignes de Dataframe

Éléments uniques dans la colonne catégorielle

nous pouvons utiliser le unique() fonction à partir du pandas bibliothèque pour obtenir des éléments uniques de la colonne du dataframe.

Python3
print(data['Gender'].unique()) print(data['Remarks'].unique())>

Sortir:

array(['Male', 'Female'], dtype=object) array(['Nice', 'Good', 'Great'], dtype=object)>

Nombre d'éléments dans la colonne

On peut utiliser valeur_comptes() fonction de pandas pour obtenir le nombre de chaque élément dans la trame de données.

Python3
data['Gender'].value_counts() data['Remarks'].value_counts()>

Sortir:

Female 7 Male 5 Name: Gender, dtype: int64  Nice 5 Great 4 Good 3 Name: Remarks, dtype: int64>

Nous disposons de deux méthodes pour effectuer un encodage one-hot sur la colonne catégorielle.

Encodage à chaud de la colonne catégorielle à l'aide de la bibliothèque Pandas

On peut utiliser pd.get_dummies() fonction des pandas pour encoder à chaud les colonnes catégorielles. Cette fonction

Python3
one_hot_encoded_data = pd.get_dummies(data, columns = ['Remarks', 'Gender']) print(one_hot_encoded_data)>

Sortir:

Colonnes codées One-Hot de l'ensemble de données

Colonnes codées One-Hot de l'ensemble de données

Nous pouvons constater que nous avons 3 remarques et 2 Sexe colonnes dans les données. Cependant, vous pouvez simplement utiliser n-1 colonnes pour définir les paramètres s'il en a n étiquettes uniques. Par exemple, si l'on garde seulement le Genre_Femme colonne et déposez le Genre masculin colonne, nous pouvons également transmettre l'intégralité des informations, car lorsque l'étiquette est 1, cela signifie une femme et lorsque l'étiquette est 0, cela signifie un homme. De cette façon, nous pouvons coder les données catégorielles et réduire également le nombre de paramètres.

Un encodage à chaud à l'aide de la bibliothèque Sci-kit Learn

Scikit-learn(sklearn) est une bibliothèque d'apprentissage automatique populaire en Python qui fournit de nombreux outils pour le prétraitement des données. Il fournit un OneHotEncoder fonction que nous utilisons pour coder des variables catégorielles et numériques en vecteurs binaires.

Python3
#one hot encoding using OneHotEncoder of Scikit-Learn import pandas as pd from sklearn.preprocessing import OneHotEncoder #Building a dummy employee dataset for example data = {'Employee id': [10, 20, 15, 25, 30], 'Gender': ['M', 'F', 'F', 'M', 'F'], 'Remarks': ['Good', 'Nice', 'Good', 'Great', 'Nice'], } #Converting into a Pandas dataframe df = pd.DataFrame(data) #Print the dataframe: print(f'Employee data : 
{df}') #Extract categorical columns from the dataframe #Here we extract the columns with object datatype as they are the categorical columns categorical_columns = df.select_dtypes(include=['object']).columns.tolist() #Initialize OneHotEncoder encoder = OneHotEncoder(sparse_output=False) # Apply one-hot encoding to the categorical columns one_hot_encoded = encoder.fit_transform(df[categorical_columns]) #Create a DataFrame with the one-hot encoded columns #We use get_feature_names_out() to get the column names for the encoded data one_hot_df = pd.DataFrame(one_hot_encoded, columns=encoder.get_feature_names_out(categorical_columns)) # Concatenate the one-hot encoded dataframe with the original dataframe df_encoded = pd.concat([df, one_hot_df], axis=1) # Drop the original categorical columns df_encoded = df_encoded.drop(categorical_columns, axis=1) # Display the resulting dataframe print(f'Encoded Employee data : 
{df_encoded}')>

Sortir

Employee data :   Employee id Gender Remarks 0 10 M Good 1 20 F Nice 2 15 F Good 3 25 M Great 4 30 F Nice Encoded Employee data :   Employee id Gender_F Gender_M Remarks_Good Remarks_Great Remarks_Nice 0 10 0.0 1.0 1.0 0.0 0.0 1 20 1.0 0.0 0.0 0.0 1.0 2 15 1.0 0.0 1.0 0.0 0.0 3 25 0.0 1.0 0.0 1.0 0.0 4 30 1.0 0.0 0.0 0.0 1.0>