web-dev-qa-db-fra.com

Variables catégorielles XGBoost: Dummification vs encodage

Lorsque vous utilisez XGBoost, nous devons convertir les variables catégorielles en numérique.

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

  1. fausser vos variables catégorielles
  2. encoder vos variables catégorielles, par ex. (a, b, c) à (1,2,3)

ÉGALEMENT:

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

29
ishido

xgboost ne concerne que les colonnes numériques.

si vous avez une fonction [a,b,b,c] qui décrit une variable catégorielle ( c'est-à-dire sans relation numérique)

En utilisant LabelEncoder vous aurez simplement ceci:

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

Xgboost interprètera à tort cette fonctionnalité comme ayant une relation numérique! Ceci mappe juste chaque chaîne ('a','b','c') à un entier, rien de plus.

Façon appropriée

En utilisant OneHotEncoder vous finirez par y arriver:

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

Il s'agit de la représentation appropriée d'une variable catégorielle pour xgboost ou tout autre outil d'apprentissage automatique.

Pandas get_dummies est un bel outil pour créer des variables factices ( qui est plus facile à utiliser, à mon avis).

La méthode n ° 2 dans la question ci-dessus ne représentera pas les données correctement

41
T. Scharf

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

Pour les problèmes de classification binaire , une approche géniale mais encore inexplorée qui est fortement exploitée dans les modèles de notation de crédit traditionnels consiste à utiliser de preuves pour remplacer les niveaux catégoriels. Fondamentalement, chaque niveau catégoriel est remplacé par la proportion de biens/proportion de défauts

Peut en savoir plus ici .

Bibliothèque Python ici .

Cette méthode vous permet de capturer les "niveaux" sous une seule colonne et d'éviter la rareté ou l'induction de biais qui se produiraient lors d'une falsification ou d'un codage.

J'espère que cela t'aides !

4
mamafoku