Xgboost Variables catégoriques: Dummification vs encodage

en utilisant XGBoost il faut convertir les variables catégoriques en numériques.

y aurait-il une différence dans les paramètres de rendement/d'évaluation entre les méthodes de:

  1. dummifying vos variables catégorielles
  2. l'encodage des variables catégorielles, par exemple (a,b,c) (1,2,3)

AUSSI:

y aurait-il des raisons de ne pas utiliser la méthode 2 en utilisant par exemple labelencoder?

20
demandé sur abhiieor 2015-12-14 13:48:22

2 réponses

xgboost ne traite que des colonnes numériques.

si vous avez une fonction [a,b,b,c] qui décrit une variable catégorielle ( C.-à-d. pas de relation numérique)

en utilisant LabelEncoder vous aurez simplement à ceci:

array([0, 1, 1, 2])

Xgboostinterprètent mal cette fonctionnalité comme ayant une relation numérique! ceci ne fait que cartographier chaque chaîne ('a','b','c') pour un entier, rien de plus.

Bon

en utilisant OneHotEncoder vous finirez par arriver à ceci:

array([[ 1.,  0.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  0.,  1.]])

C'est la bonne représentation d'une variable catégorielle pour xgboost ou n'importe quelle autre machine outil d'apprentissage.

Pandas get_dummies un bel outil pour la création des variables nominales (ce qui est plus facile à utiliser, à mon avis).

la méthode 2 de la question ci-dessus ne représentera pas les données correctement

26
répondu T. Scharf 2015-12-19 16:52:49

je veux répondre à cette question non seulement en termes de XGBoost mais en termes de tout problème traitant des données catégoriques. Tandis que la "dummification" crée une configuration très clairsemée, spécialement si vous avez plusieurs colonnes catégoriques avec différents niveaux, l'encodage des étiquettes est souvent biaisé car la représentation mathématique ne reflète pas la relation entre les niveaux.

Classification Binaire problèmes, une approche de génie encore inexplorée qui est très l'effet de levier traditionnels modèles d'évaluation du crédit est d'utiliser Poids de la Preuve pour remplacer l'catégorique niveaux. Fondamentalement, chaque niveau catégorique est remplacé par le proportion des marchandises / Proportion des Dja.

en lire plus ici.

bibliothèque Python ici.

cette méthode vous permet de capturer les "niveaux" sous une colonne et d'éviter la sparsity ou l'induction de biais qui se produirait par dummification ou encodage.

Espérons que cette aide !

1
répondu mamafoku 2018-04-15 00:44:42