Comment encoder One-Hot pour les variables multi-catégories

Contenu

Dans cet article, Nous apprendrons comment gérer plusieurs variables de catégorie à l'aide de la technique d'ingénierie de la fonction One Hot Encoding.

Mais avant de continuer, discutons brièvement de l'ingénierie des fonctions et de One Hot Encoding.

Ingénierie fonctionnelle

Ensuite, L'ingénierie de caractéristiques est le processus d'extraction de caractéristiques à partir de données brutes en utilisant la connaissance du domaine du problème. Ces fonctions peuvent être utilisées pour améliorer les performances des algorithmes d'apprentissage automatique et, si les performances augmentent, fournira la meilleure précision. On peut aussi dire que l'ingénierie fonctionnelle est la même que l'apprentissage automatique appliqué. L'ingénierie des fonctionnalités est l'art le plus important de l'apprentissage automatique 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 quelque peu compliqué, car différents modèles nécessitent souvent des approches différentes pour différents types de données. Tel que:-

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

Mais ici, nous ne discuterons que des caractéristiques catégorielles, les caractéristiques catégorielles sont les caractéristiques 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 sous la forme d'un objet.

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

  • Encodage de balise ou encodage ordinal
  • Un codage à chaud
  • Codage factice
  • Encodage des effets
  • Encodage binaire
  • Codage bâlois
  • Encodage de hachage
  • Encodage de destination

Ensuite, ici nous gérons les caractéristiques catégorielles par One Hot Encoding, donc, en premier lieu, discutiremos Un codage à chaud.

Un codage à chaud

Nous savons que les variables catégorielles contiennent les valeurs d'étiquette au lieu de 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 balises. Exiger 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 l’icône variable categorical est une variable de sortie, vous pouvez également vouloir reconvertir les prédictions du modèle sous forme catégorielle pour les présenter ou les utiliser dans une application.

par exemple les données sur le genre se présentent sous la forme de ‘masculin’ Oui ‘Femme’.

Mais si nous utilisons un encodage à chaud, coder et laisser le modèle assumer un ordre naturel entre les catégories peut entraîner des performances médiocres ou des résultats inattendus.

L'encodage à chaud peut être appliqué à la représentation d'entiers. C'est là que la variable codée entière est supprimée et une nouvelle variable binaire est ajoutée pour chaque valeur entière unique.

Par exemple, on code la variable de couleurs,

Couleur rouge Couleur bleu
0 1
1 0
0 1

Maintenant, nous allons commencer notre voyage. Dans la première étape, nous prenons un ensemble de données de prévision des prix des maisons.

Base de données

Ici, nous allons utiliser l'ensemble de données de house_price qui est utilisé pour prédire le prix de la maison 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

À présent, nous devons importer des modules python importants à utiliser pour l'encodage one-hot

# importer des pandas
importer des pandas au format pd
# importation numpy
importer numpy en tant que np
# importation OneHotEncoder
de sklearn.preprocessing importer OneHotEncoder()

Ici, nous utilisons des pandas qui sont utilisés pour l'analyse des données, NumPyutilisé pour les tableaux à n dimensions, et de sklearn, nous utiliserons un encodeur à chaud de classe 1 important pour l'encodage catégoriel.

Maintenant, nous devons lire ces données en utilisant Python.

Lire l'ensemble de données

Généralement, le jeu 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 (). baisser les yeux:

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

production:-

capture d

Mais nous n'avons qu'à utiliser des variables catégorielles pour un encodeur actif et nous essaierons uniquement d'expliquer avec des variables catégorielles pour une compréhension facile.

pour partitionner des variables catégorielles à partir de données, nous devons vérifier combien de caractéristiques ont des valeurs catégorielles.

Vérification des valeurs catégorielles

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

# vérification des fonctionnalités
chat = df.select_dtypes(inclure="O").clés()
# afficher les variables
chat

production:-

capture d

Nous devons maintenant supprimer ces colonnes numériques de l'ensemble de données et nous utiliserons cette variable catégorielle pour notre utilisation. Nous utilisons uniquement 3-4 colonnes catégorielles de l'ensemble de données pour appliquer l'encodage one-hot.

Créer un nouveau bloc de données

À présent, utiliser des variables catégorielles, nous allons créer un nouveau bloc de données à partir des colonnes catégorielles sélectionnées.

# créer un nouveau df
# définir les colonnes que nous utilisons
new_df = pd.read_csv('house_price.csv',usecols =['Neighborhood','Exterior1st','Exterior2nd']) 
nouveau_df.head()

production:-

capture d

Maintenant, nous devons savoir 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 unique des pandas ().

# valeurs uniques dans chaque colonne
pour x dans new_df.columns:
    #impression de valeurs uniques
    imprimer(X ,':', longueur(nouveau_df[X].unique()))

production:-

Quartier: 25
Extérieur 1er: 15
Extérieur 2e: 16

À présent, nous utiliserons notre technique pour appliquer un encodage one-hot sur des variables multi-catégories.

Technique pour les variables multi-catégories

La technique consiste à limiter l'encodage one-hot à 10 les étiquettes les plus fréquentes de la variable. Cela signifie que nous ferions une variable binaire uniquement pour chacun des 10 balises les plus fréquentes, cela équivaut à regrouper toutes les autres balises dans une nouvelle catégorie, qui dans ce cas sera éliminé. A) Oui, les 10 les nouvelles variables muettes indiquent si l'une des 10 les balises les plus fréquentes sont présentes est 1 ou pas alors 0 pour une observation particulière.

Variables les plus fréquentes

Ici, nous sélectionnerons le 20 variables les plus fréquentes.

Supposons que nous prenons une variable catégorielle Quartier.

# trouver le haut 20 catégories
new_df.Neighborhood.value_counts().trier_valeurs(ascendant=Faux).diriger(20)

production:

capture d

Quand vous voyez dans cette image de sortie, vous remarquerez que le Noms L'étiquette se répète 225 fois dans les colonnes du quartier et on descend ce nombre est décroissant.

Alors on prend le 10 meilleurs résultats principaux et nous convertissons ce meilleur résultat 10 en encodage one-hot et les étiquettes de gauche deviennent zéro.

production:-

capture d

Liste des variables catégorielles les plus fréquentes

# faire une liste avec le haut 10 variables
top_10 = [x pour x dans new_df.Neighborhood.value_counts().trier_valeurs(ascendant=Faux).diriger(10).indice]
Top 10

production:-

['Noms',
'CollgCr',
'Vieille ville',
'Edouard',
« Somerst »,
"Gilbert",
« NridgHt »,
'Scieur',
« NWAmes »,
« SawyerW »]

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

Faire du binaire

À présent, nous devons faire le 10 variables binaires du top_10 étiquettes:

# faire des étiquettes binaires

pour la balise dans le top_10:

nouveau_df[étiqueter] = np.où (nouveau_df['Quartier']== étiquette, 1,0)

nouveau_df[['Quartier']+ Top 10]


production:-

Noms CollgCr Vieille ville Edwards Somerst 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 NoRidge 0 0 0 0 0 0 0 0 0 0
5 Michel 0 0 0 0 0 0 0 0 0 0
6 Somerst 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 BrkSide 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 balises top_10 sont maintenant converties au format binaire.

Prenons un exemple, voir dans le tableau où 1 indice Veenker qui n'appartenaient pas à notre tag top_10 categories, il en résultera donc 0 toutes les colonnes.

Nous allons maintenant le faire pour toutes les variables catégorielles que nous avons sélectionnées précédemment.

Toutes les variables sélectionnées dans OneHotEncoding

# pour toutes les variables catégorielles que nous avons sélectionnées
def top_x(df2, variable,top_x_labels):
pour l'étiquette dans top_x_labels:
df2[variable+'_'+label] = np.où(Les données[variable]== étiquette,1,0)
# relire les données
données = pd.read_csv('D://xdatasets/train.csv',usecols = ['Neighborhood','Exterior1st','Exterior2nd'])
#encoder le quartier dans le 10 catégories les plus fréquentes
top_x(Les données,'Neighborhood',Top 10)
# afficher les données
data.head()

Production:-

capture d

À présent, ici, nous appliquons un encodage à chaud sur toutes les variables multi-catégories.

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

avantage

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

Désavantages

  • Il n'ajoute aucune information qui pourrait rendre la variable plus prédictive
  • Ne pas enregistrer les informations des variables ignorées.

Remarques finales

Ensuite, le résumé de ceci est que nous apprenons à gérer les variables de plusieurs catégories. Si vous rencontrez ce problème, c'est donc une tâche très difficile. Alors merci d'avoir lu cet article..

Connectez-vous avec moi sur Linkedin: Profil

Lire 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é de DataPeaker et sont utilisés à la discrétion de l'auteur.

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.

Haut-parleur de données