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)
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.