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 :
- Il permet l'utilisation de variables catégorielles dans des modèles nécessitant une entrée numérique.
- Cela peut améliorer les performances du modèle en fournissant plus d'informations au modèle sur la variable catégorielle.
- 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 :
- 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.
- 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.
- 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.
- 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.
| Fruit | Valeur catégorielle du fruit | Prix |
|---|---|---|
| pomme | 1 | 5 |
| mangue | 2 | dix |
| pomme | 1 | quinze |
| orange | 3 | vingt |
Le résultat après application du codage à chaud sur les données est donné comme suit :
| pomme | mangue | orange | prix |
|---|---|---|---|
| 1 | 0 | 0 | 5 |
| 0 | 1 | 0 | dix |
| 1 | 0 | 0 | quinze |
| 0 | 0 | 1 | vingt |
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énialPython3
# 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
É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
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>