6 votes

Comment obtenir la valeur originale pour l'encodage binaire en utilisant le paquet category_encoder ?

J'ai un ensemble de données qui comprend plus de 100 pays. Je veux les inclure dans un modèle XGBoost pour faire une prédiction de classification. Je sais que le codage à chaud (One Hot Encoding) est le processus à suivre pour cela, mais je préférerais faire quelque chose qui n'augmente pas trop la dimensionnalité et qui soit résilient à de nouvelles valeurs. category_encoders paquet. http://contrib.scikit-learn.org/categorical-encoding/binary.html

L'utilisation de ce codage a aidé mon modèle par rapport à l'utilisation du codage basique à un coup, mais comment puis-je revenir aux étiquettes originales après le codage ?

Je suis au courant de la inverse_transform mais qui fonctionne sur l'ensemble du cadre de données. J'ai besoin d'une méthode qui me permette d'introduire une valeur binaire ou entière et de récupérer la valeur originale.

Voici quelques exemples de données tirées de : https://towardsdatascience.com/smarter-ways-to-encode-categorical-data-for-machine-learning-part-1-of-3-6dca2f71b159

import numpy as np
import pandas as pd
import category_encoders as ce

# make some data
df = pd.DataFrame({
 'color':["a", "c", "a", "a", "b", "b"], 
 'outcome':[1, 2, 3, 2, 2, 2]})

# split into X and y
X = df.drop('outcome', axis = 1)
y = df.drop('color', axis = 1)

# instantiate an encoder - here we use Binary()
ce_binary = ce.BinaryEncoder(cols = ['color'])

# fit and transform and presto, you've got encoded data
ce_binary.fit_transform(X, y)

output

Je voudrais passer les valeurs [0,0,1] o 1 dans une fonction et récupérer a comme une valeur.

La raison principale est d'examiner l'importance des caractéristiques du modèle. Je peux obtenir les importances des caractéristiques sur la base d'une colonne, mais cela me donnera un identifiant de colonne plutôt que la valeur sous-jacente d'une catégorie qui est la plus importante.

1voto

Jeff Points 154

Veuillez noter que l'article auquel vous faites référence suggère d'utiliser le codeur binaire pour les données ordinales uniquement, c'est-à-dire les données discrètes auxquelles est associé un ordre (petit, moyen, grand), et non les données nominales (rouge, blanc, bleu).

Si vous décidez d'utiliser un codeur binaire, l'ordre dans lequel les couleurs (ou les pays) sont codées aura un impact sur vos performances. Par exemple, supposons que rouge=001, blanc=010 et bleu=011. Lorsque vous appliquerez un algorithme ML, il constatera que le rouge et le bleu ont une caractéristique en commun (caractéristique 3). Ce n'est probablement pas ce que vous voulez.

En ce qui concerne l'application de la transformation inverse, vous devez appliquer la transformation inverse à [0,0,1] dans votre exemple ci-dessus, et non à "1". "1" n'a pas de sens sans contexte. Vous devriez être en mesure d'appliquer la transformation inverse à un seul enregistrement (ligne) de vos données, mais pas à une seule colonne. Le curseur inverse devra opérer sur un objet ayant la dimension de sortie du transformateur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X