Si vous avez récemment commencé votre parcours d'apprentissage automatique, vous risquez de vous retrouver confus entre LabelEncoder et OneHotEncoder . Les deux encodeurs font partie de la bibliothèque SciKit Learn en Python et sont tous deux utilisés pour convertir des données catégorielles ou textuelles en nombres que nos modèles prédictifs comprennent le mieux. Voyons les différences entre les encodeurs sur un exemple simple.
Encodage des caractères
Tout d'abord, la documentation SciKit Learn pour LabelEncoder peut être trouvée ici . Considérez maintenant les données suivantes:
Données de SuperDataScienceDans cet exemple, la première colonne (pays) est entièrement en texte. Comme vous le savez peut-être déjà, nous ne pouvons pas utiliser de texte dans les données pour former le modèle. Par conséquent, avant de pouvoir commencer le processus, nous devons préparer ces données.
Et pour convertir ces catégories en modèles compréhensibles de données numériques, nous utilisons la classe LabelEncoder . Ainsi, tout ce que nous devons faire pour obtenir l'attribut de la première colonne est d'importer la classe à partir de la bibliothèque sklearn , de traiter la colonne avec la fonction fit_transform et de remplacer les données de texte existantes par la nouvelle codée. Voyons le code.
from sklearn.preprocessing import LabelEncoder labelencoder = LabelEncoder() x[:, 0] = labelencoder.fit_transform(x[:, 0])
On suppose que les données sont dans la variable x . Après avoir exécuté le code ci-dessus, si vous vérifiez la valeur x , vous verrez que les trois pays de la première colonne ont été remplacés par les chiffres 0, 1 et 2.
En général, c'est le codage des signes. Mais selon les données, cette conversion crée un nouveau problème. Nous avons converti un ensemble de pays en un ensemble de nombres. Mais ce ne sont que des données catégoriques, et en fait il n'y a aucun lien entre les chiffres.
Le problème ici est que, comme il y a des nombres différents dans la même colonne, le modèle pensera à tort que les données sont dans un ordre spécial - 0 <1 <2 Bien que ce ne soit bien sûr pas du tout le cas. Pour résoudre le problème, nous utilisons OneHotEncoder .
OneHotEncoder
Si vous êtes intéressé à lire la documentation, vous pouvez la trouver ici . Maintenant, comme nous l'avons déjà discuté, selon les données dont nous disposons, nous pouvons rencontrer une situation où, après encodage des attributs, notre modèle se confond, en supposant à tort que les données sont connectées par un ordre ou une hiérarchie qui n'est pas vraiment là. Pour éviter cela, nous utiliserons OneHotEncoder .
Cet encodeur prend une colonne avec des données catégorielles qui a été précédemment encodée dans une caractéristique et crée plusieurs nouvelles colonnes pour celle-ci. Les nombres sont remplacés par des uns et des zéros, selon la colonne dont la valeur est inhérente. Dans notre exemple, nous obtenons trois nouvelles colonnes, une pour chaque pays - France, Allemagne et Espagne.
Pour les lignes dont la première colonne est la France, la colonne «France» sera définie sur «1» et les deux autres colonnes sur «0». De même, pour les lignes dont la première colonne est l'Allemagne, la colonne Allemagne aura «1» et les deux autres colonnes auront «0».
Cela se fait très simplement:
from sklearn.preprocessing import OneHotEncoder onehotencoder = OneHotEncoder(categorical_features = [0]) x = onehotencoder.fit_transform(x).toarray()
Dans le constructeur, nous indiquons quelle colonne doit être traitée par OneHotEncoder , dans notre cas - [0] . Transformez ensuite le tableau x à l'aide de la fonction fit_transform de l'objet encodeur que vous venez de créer. Ça y est, nous avons maintenant trois nouvelles colonnes dans l'ensemble de données:
Comme vous pouvez le voir, au lieu d'une colonne avec un pays, nous en avons eu trois nouvelles encodant ce pays.
C'est la différence entre LabelEncoder et OneHotEncoder .