Qu’est-ce qu’un Encodage à chaud et Comment le faire

Si vous aimez l’apprentissage automatique, vous rencontrerez inévitablement cette chose appelée « Un Encodage à chaud ». Cependant, c’est l’une de ces choses difficiles à saisir en tant que débutant en apprentissage automatique, car vous avez besoin de connaître certaines choses sur l’apprentissage automatique pour le comprendre. Pour aider, j’ai pensé que j’essaierais de fournir une explication pour débutant.

La première chose que vous faites lorsque vous créez un programme d’apprentissage automatique est généralement le prétraitement. Je veux dire par là la préparation des données à analyser par votre programme. Après tout, vous ne pouvez pas simplement jeter une feuille de calcul ou des images dans votre programme et vous attendre à ce qu’il sache quoi faire. Nous ne sommes pas encore à ce niveau d’IA.

Une grande partie du prétraitement est quelque chose d’encodage. Cela signifie représenter chaque donnée d’une manière que l’ordinateur peut comprendre, d’où le nom encode, qui signifie littéralement « convertir en code ». Il existe de nombreuses façons d’encoder, telles que l’encodage d’étiquettes, ou, comme vous l’avez peut-être deviné, Un Encodage à chaud. L’encodage des étiquettes est intuitif et facile à comprendre, je vais donc vous l’expliquer en premier. J’espère qu’à partir de là, vous serez en mesure de comprendre pleinement un encodage à chaud.

Supposons que nous travaillons avec des données catégorielles, comme les chats et les chiens. En regardant le nom de l’encodage de l’étiquette, vous pourrez peut-être deviner qu’il code des étiquettes, où l’étiquette n’est qu’une catégorie (c’est-à-dire un chat ou un chien), et encoder signifie simplement leur donner un nombre pour représenter cette catégorie (1 pour le chat et 2 pour le chien). En donnant un numéro à chaque catégorie, l’ordinateur sait maintenant comment les représenter, car l’ordinateur sait travailler avec les nombres. Et maintenant, nous avons déjà fini d’expliquer l’encodage des étiquettes. Mais il y a un problème qui fait que cela ne fonctionne souvent pas pour les données catégorielles.

Le problème est qu’avec le codage d’étiquettes, les catégories ont maintenant des relations ordonnées naturelles. L’ordinateur le fait parce qu’il est programmé pour traiter des nombres plus élevés comme des nombres plus élevés; il donnera naturellement aux nombres plus élevés des poids plus élevés. Nous pouvons voir le problème avec cela dans un exemple:

  • Imaginez si vous aviez 3 catégories d’aliments: les pommes, le poulet et le brocoli. En utilisant l’encodage des étiquettes, vous attribuez à chacun d’eux un nombre pour les classer: pommes = 1, poulet = 2 et brocoli = 3. Mais maintenant, si votre modèle doit calculer en interne la moyenne entre les catégories, il peut faire 1 + 3 = 4/2 = 2. Cela signifie que selon votre modèle, la moyenne des pommes et du poulet ensemble est le brocoli.

De toute évidence, cette ligne de pensée de votre modèle va entraîner des corrélations complètement fausses, nous devons donc introduire un codage à chaud.

Plutôt que d’étiqueter les choses comme un nombre commençant par 1 puis augmentant pour chaque catégorie, nous allons opter pour un style de catégorisation plus binaire. Vous auriez peut-être pensé que si vous saviez ce qu’est un one-hot (cela concerne le codage binaire, mais ne vous en inquiétez pas). Permettez-moi de fournir une différence visualisée entre l’étiquette et l’encodage à chaud. Voyez si vous pouvez faire la différence:

Quelle est la différence? Eh bien, nos catégories étaient auparavant des lignes, mais maintenant ce sont des colonnes. Notre variable numérique, les calories, est cependant restée la même. Un 1 dans une colonne particulière indiquera à l’ordinateur la catégorie correcte pour les données de cette ligne. En d’autres termes, nous avons créé une colonne binaire supplémentaire pour chaque catégorie.

On ne sait pas immédiatement pourquoi c’est mieux (à part le problème que j’ai mentionné plus tôt), et c’est parce qu’il n’y a pas de raison claire. Comme beaucoup de choses dans l’apprentissage automatique, nous ne l’utiliserons pas dans toutes les situations; ce n’est pas carrément mieux que l’encodage d’étiquettes. Cela résout simplement un problème que vous rencontrerez avec l’encodage d’étiquettes lorsque vous travaillez avec des données catégorielles

Un encodage à chaud dans le Code (Obtenez-le? C’est un jeu de mots)

Il est toujours utile de voir comment cela se fait dans le code, alors faisons un exemple. Normalement, je crois fermement que nous devrions faire quelque chose sans aucune bibliothèque pour l’apprendre, mais juste pour ce travail fastidieux de prétraitement, nous n’en avons pas vraiment besoin. Les bibliothèques peuvent rendre cela si simple. Nous allons utiliser numpy, sklearn et pandas, car vous utiliserez ces 3 bibliothèques dans plusieurs de vos projets

from sklearn.preprocessing import LabelEncoder, OneHotEncoder
import numpy as np
import pandas as pd

Maintenant que nous avons les outils, commençons. Nous allons travailler avec un ensemble de données composé. Entrez le jeu de données avec les pandas.fonction read_csv:

dataset = pd.read_csv('made_up_thing.csv')

J’espère que c’est explicite. La prochaine étape est un peu plus délicate. La chose à propos des feuilles de calcul est que vous pouvez ou non vous soucier de certaines colonnes. Par souci de simplicité, disons que nous nous soucions de tout sauf de la dernière colonne. Nous allons utiliser la fonctionnalité des pandas.iloc, qui obtient les données à n’importe quelle colonne (s) à laquelle vous lui dites:

X = dataset.iloc.values

.iloc prend en fait, alors nous avons entré. Le : est parce que nous voulons toutes les lignes de ces colonnes, et : est exactement la façon dont vous le faites. Nous ajoutons le.valeurs pour, eh bien, obtenir les valeurs des segments que nous avons sélectionnés. En d’autres termes, la première partie sélectionne les valeurs, la deuxième partie obtient les valeurs.

Maintenant, faisons l’encodage réel. Sklearn le rend incroyablement facile, mais il y a un hic. Vous avez peut-être remarqué que nous avons importé à la fois le labelencoder et le one hot encoder. L’encodeur one hot de Sklearn ne sait pas vraiment comment convertir les catégories en nombres, il sait seulement comment convertir les nombres en binaires. Nous devons d’abord utiliser le labelencoder.

Tout d’abord, nous allons configurer un labelencoder comme vous le feriez pour tout objet normal:

le = LabelEncoder()

Ensuite, nous devons utiliser celui de sklearn.fonction fit_transform. Disons que nous devons encoder uniquement la première colonne. Que nous eussions fait:

X = le.fit_transform(X)

Cette fonction est juste une combinaison de la.en forme et.commandes de transformation. .fit prend X (dans ce cas la première colonne de X à cause de notre X) et convertit tout en données numériques. .transform applique ensuite cette conversion.

Il ne reste plus qu’à utiliser l’encodeur à chaud. Heureusement, c’est presque la même chose que ce que nous venons de faire:

ohe = OneHotEncoder(categorical_features = )
X = ohe.fit_transform(X).toarray()

Categorical_feartures est un paramètre qui spécifie quelle colonne nous voulons coder à chaud, et puisque nous voulons coder la première colonne, nous mettons. Enfin, nous adaptons_transform en binaire, et le transformons en un tableau afin que nous puissions travailler avec lui facilement à l’avenir.

Et c’est tout! C’est assez simple. Une dernière note cependant, si vous devez faire plus que la première colonne, vous faites ce que nous venons de faire, mais au lieu de 0, vous mettez la colonne que vous voulez. Pour de nombreuses colonnes, vous pouvez le mettre dans une boucle for:

le = LabelEncoder()#for 10 columns
for i in range(10):
X = le.fit_transform(X)

Bonne chance pour vos aventures d’apprentissage automatique!