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:
ÉGALEMENT:
Y aurait-il des raisons de ne pas utiliser la méthode 2 en utilisant par exemple labelencoder
?
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
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 !