Comment effectuer un encodage à chaud pour des variables catégorielles multiples

Nœud source: 841101

Dans cet article, nous apprendrons comment gérer des variables multi-catégorielles à l'aide de la technique d'ingénierie des fonctionnalités One Hot Encoding.

Mais avant de continuer, ayons une brève discussion sur l'ingénierie des fonctionnalités et One Hot Encoding.

Ingénierie des caractéristiques

Ainsi, l'ingénierie des fonctionnalités est le processus d'extraction de fonctionnalités à partir de données brutes en utilisant la connaissance du domaine du problème. Ces fonctionnalités peuvent être utilisées pour améliorer les performances des algorithmes d’apprentissage automatique et si les performances augmentent, elles donneront la meilleure précision. Nous pouvons également dire que l’ingénierie des fonctionnalités est la même chose que l’apprentissage automatique appliqué. L'ingénierie des fonctionnalités est l'art le plus important de l'apprentissage automatique, ce qui crée une énorme différence entre un bon modèle et un mauvais modèle. Il s’agit de la troisième étape du cycle de vie de tout projet de science des données.

Le concept de transparence pour les modèles d'apprentissage automatique est une chose complexe, car différents modèles nécessitent souvent des approches différentes pour les différents types de données. Tel que:-

  • Données continues
  • Caractéristiques catégorielles
  • Valeurs manquantes
  • Normalisation
  • Dates et heures

Mais ici, nous ne discuterons que des fonctionnalités catégorielles. Les fonctionnalités catégorielles sont les fonctionnalités dans lesquelles le type de données est un type d'objet. La valeur du point de données dans toute caractéristique catégorielle n’est pas sous forme numérique, mais plutôt sous forme d’objet.

Il existe de nombreuses techniques pour gérer les variables catégorielles, certaines sont :

  • Encodage d’étiquette ou encodage ordinal
  • Un encodage à chaud
  • Encodage factice
  • Encodage d'effet
  • Encodage binaire
  • Encodage de Bâle
  • Encodage de hachage
  • Encodage cible

Donc, ici, nous traitons des fonctionnalités catégorielles par One Hot Encoding, nous discuterons donc tout d'abord de One Hot Encoding.

Un encodage à chaud

Nous savons que les variables catégorielles contiennent les valeurs d'étiquette plutôt que des valeurs numériques. Le nombre de valeurs possibles est souvent limité à un ensemble fixe. Les variables catégorielles sont souvent appelées nominales. De nombreux algorithmes d’apprentissage automatique ne peuvent pas fonctionner directement sur les données des étiquettes. Ils nécessitent que toutes les variables d’entrée et de sortie soient numériques.

Cela signifie que les données catégorielles doivent être converties sous une forme numérique. Si la variable catégorielle est une variable de sortie, vous souhaiterez peut-être également reconvertir les prédictions du modèle sous une forme catégorielle pour les présenter ou les utiliser dans certaines applications.

par exemple les données sur le genre se présentent sous la forme 'mâle' ainsi que 'femelle'.

Mais si nous utilisons un codage à chaud, le codage et le fait de permettre au modèle de supposer un ordre naturel entre les catégories peuvent entraîner de mauvaises performances ou des résultats inattendus.

Le codage à chaud peut être appliqué à la représentation entière. C'est ici que la variable codée en entier est supprimée et qu'une nouvelle variable binaire est ajoutée pour chaque valeur entière unique.

Par exemple, nous codons la variable de couleurs,

Couleur rouge  Couleur bleue
0 1
1 0
0 1

Nous allons maintenant commencer notre voyage. Dans un premier temps, nous prenons un ensemble de données de prévision des prix de l’immobilier.

Ensemble de données

Ici, nous utiliserons l'ensemble de données house_price qui est utilisé pour prédire le prix de l'immobilier en fonction de la taille de la zone.

Si vous souhaitez télécharger l'ensemble de données de prévision des prix de l'immobilier, cliquez sur ici.

Importation de modules

Maintenant, nous devons importer des modules importants depuis Python qui seront utilisés pour l'encodage one-hot

# importation de pandas, importation de pandas en tant que pd # importation de numpy, importation de numpy en tant que np # importation de OneHotEncoder depuis sklearn.preprocessing import OneHotEncoder()

Ici, nous utilisons des pandas qui sont utilisés pour l'analyse des données, NumPyutilisé pour les tableaux à n dimensions, et à partir de sklearn, nous utiliserons une classe importante One Hot Encoder pour l'encodage catégoriel.

Nous devons maintenant lire ces données en utilisant Python.

Lecture de l'ensemble de données

Généralement, l'ensemble de données est au format CSV, et l'ensemble de données que nous utilisons est également au format CSV. Pour lire le fichier CSV, nous utiliserons la fonction pandas read_csv(). voir ci-dessous:

# lecture de l'ensemble de données df = pd.read_csv('house_price.csv') df.head()

production:-

Mais nous ne devons utiliser que des variables catégorielles pour un seul encodeur chaud et nous essaierons uniquement de l'expliquer avec des variables catégorielles pour une compréhension facile.

pour partitionner les variables catégorielles des données, nous devons vérifier combien de fonctionnalités ont des valeurs catégorielles.

Vérification des valeurs catégorielles

Pour vérifier les valeurs, nous utilisons la fonction pandas select_dtypes qui est utilisée pour sélectionner les types de données de la variable.

# vérification des fonctionnalités cat = df.select_dtypes(include='O').keys() # affichage des variables cat

production:-

 

Nous devons maintenant supprimer ces colonnes numériques de l'ensemble de données et nous utiliserons cette variable catégorielle pour notre usage. Nous n'utilisons que 3 à 4 colonnes catégorielles de l'ensemble de données pour appliquer un codage à chaud.

Création d'un nouveau DataFrame

Maintenant, pour utiliser des variables catégorielles, nous allons créer un nouveau cadre de données de colonnes catégorielles sélectionnées.

# création d'un nouveau df # définition des colonnes que nous utilisons new_df = pd.read_csv('house_price.csv',usecols=['Quartier','Extérieur1er','Extérieur2ème']) new_df.head()

production:-

Nous devons maintenant découvrir combien de catégories uniques sont présentes dans chaque colonne catégorielle.

Trouver des valeurs uniques

Pour trouver des valeurs uniques, nous utiliserons la fonction pandas unique().

# valeurs uniques dans chaque colonne pour x dans new_df.columns : #impression de valeurs uniques print(x ,':', len(new_df[x].unique()))

production:-

Quartier : 25
Extérieur1er : 15
Extérieur2ème : 16

Maintenant, nous allons utiliser notre technique pour appliquer un codage one-hot sur des variables multi-catégories.

Technique pour les variables multi-catégories

La technique est que nous limiterons l’encodage one-hot aux 10 étiquettes les plus fréquentes de la variable. Cela signifie que nous créerions une variable binaire pour chacune des 10 étiquettes les plus fréquentes uniquement, cela équivaut à regrouper toutes les autres étiquettes sous une nouvelle catégorie, qui dans ce cas sera supprimée. Ainsi, les 10 nouvelles variables muettes indiquent si l'une des 10 étiquettes les plus fréquentes est présente. 1 ou pas alors 0 pour une observation particulière.

Variables les plus fréquentes

Nous sélectionnerons ici les 20 variables les plus fréquentes.

Supposons que nous prenons une variable catégorielle Quartier.

# trouver les 20 premières catégories new_df.Neighborhood.value_counts().sort_values(ascending=False).head(20)

sortie:

Lorsque vous voyez dans cette image de sortie, vous remarquerez que le Des noms l'étiquette se répète 225 fois dans les colonnes Quartier et on descend ce nombre est décroissant.

Nous avons donc pris les 10 premiers résultats du haut et nous convertissons ces 10 premiers résultats en un encodage à chaud et les étiquettes de gauche se transforment en zéro.

production:-

 

Liste des variables catégorielles les plus fréquentes

# faire une liste avec les 10 principales variables top_10 = [x pour x dans new_df.Neighborhood.value_counts().sort_values(ascending=False).head(10).index] top_10

production:-

['Des noms',
'CollgCr',
'Vieille ville',
"Edwards",
'Somerst',
"Gilbert",
'NridgHt',
'Scieur',
'NWAmes',
'SawyerW']

Il y a les 10 principales étiquettes catégorielles dans la colonne Quartier.

Rendre binaire

Maintenant, nous devons créer les 10 variables binaires des étiquettes top_10 :

# créer un binaire d'étiquettes

pour l'étiquette dans top_10 :

nouveau_df = np.where(new_df['Quartier']==label,1,0)

new_df[['Quartier']+top_10]


production:-

Des noms CollgCr Vieille ville Edwards Somerset Gilbert NridgHt Scieur NWAmes SawyerW
0 CollgCr 0 1 0 0 0 0 0 0 0 0
1 Veenker 0 0 0 0 0 0 0 0 0 0
2 CollgCr 0 1 0 0 0 0 0 0 0 0
3 Crawfor 0 0 0 0 0 0 0 0 0 0
4 Pas de crête 0 0 0 0 0 0 0 0 0 0
5 Mitchel 0 0 0 0 0 0 0 0 0 0
6 Somerset 0 0 0 0 1 0 0 0 0 0
7 NWAmes 0 0 0 0 0 0 0 0 1 0
8 Vieille ville 0 0 1 0 0 0 0 0 0 0
9 Côté Brk 0 0 0 0 0 0 0 0 0 0
10 Scieur 0 0 0 0 0 0 0 1 0 0
11 NridgHt 0 0 0 0 0 0 1 0 0 0

Vous pouvez voir comment les étiquettes top_10 sont désormais converties au format binaire.

Prenons un exemple, voyons dans le tableau où 1 indice Veenker qui n'appartenait pas à notre label top_10 catégories, cela entraînera donc 0 toutes les colonnes.

Nous allons maintenant le faire pour toutes les variables catégorielles que nous avons sélectionnées ci-dessus.

Toutes les variables sélectionnées sur OneHotEncoding

# pour toutes les variables catégorielles, nous avons sélectionné def top_x(df2,variable,top_x_labels) : pour l'étiquette dans top_x_labels : df2[variable+'_'+label] = np.where(data[variable]==label,1,0) # read les données à nouveau data = pd.read_csv('D://xdatasets/train.csv',usecols = ['Neighborhood','Exterior1st','Exterior2nd']) #encode Nighborhood dans les 10 catégories les plus fréquentes top_x(data, 'Quartier',top_10) # afficher les données data.head()

Production:-

Maintenant, nous appliquons ici le codage one-hot sur toutes les variables multi-catégories.

Nous allons maintenant voir les avantages et les inconvénients de One Hot Encoding pour les multi-variables.

Avantages

  • Simple à mettre en œuvre
  • Ne nécessite pas beaucoup de temps pour une exploration variable
  • N'étend pas massivement l'espace des fonctionnalités.

Inconvénients

  • N'ajoute aucune information susceptible de rendre la variable plus prédictive
  • Ne conservez pas les informations des variables ignorées.

Notes de fin

Donc, le résumé est que nous apprenons comment gérer des variables multi-catégorielles. Si vous rencontrez ce problème, c'est une tâche très difficile. Merci donc d’avoir lu cet article.

Connectez-vous avec moi sur Linkedin: Profil

Lisez mes autres articles : https://www.analyticsvidhya.com/blog/author/mayurbadole2407/

Merci😎

Les médias présentés dans cet article ne sont pas la propriété d'Analytics Vidhya et sont utilisés à la discrétion de l'auteur.

Vous pouvez également lire cet article sur notre application mobile Téléchargez sur Google Play

Articles Relatifs

Source : https://www.analyticsvidhya.com/blog/2021/05/how-to-perform-one-hot-encoding-for-multi-categorical-variables/

Horodatage:

Plus de Analytique Vidhya