2017-09-27 6 views
-1

J'essaie de résoudre un problème de régression en utilisant xgboost en python. Mais j'ai rencontré un problème. Je l'ai cherché de nombreux endroits, mais je n'ai pas pu obtenir de résultats précis.Comment gérer des variables numériques numériques ayant un grand nombre de valeurs différentes dans python xgboost?

J'ai un modèle d'affaires agrégateur alimentaire. Les utilisateurs de ma plateforme peuvent commander dans de nombreux restaurants différents. Je souhaite utiliser le modèle de régression pour prédire l'ETA pour une commande (à afficher sur l'application) après que l'utilisateur l'ait placée. J'envisage d'utiliser "restaurant_id" dans mon modèle de formation. Mais maintenant le problème est que j'ai plus de 100 restaurants répertoriés sur ma plate-forme. Et je ne peux pas utiliser cette fonction numérique. Je dois l'employer la caractéristique catégorique. Comment gérer ce cas? c'est-à-dire comment gérer une fonctionnalité catégorielle avec autant de valeurs différentes? J'utilise Xgboost en python. J'ai utilisé la fonction get_dummies des pandas. Je ne suis pas sûr de le faire de cette façon ou de suivre une autre approche. Toutes les suggestions seront utiles.

Merci d'avance.

+0

Voulez-vous prédire l'ETA en utilisant XGBoost? –

+0

@AmeyYadav Je peux utiliser n'importe quel algo, xgboost n'est pas le seul. Mais l'idée est de savoir comment résoudre le problème, je suis coincé dans – user3457384

Répondre

0

Sckit learn a une bonne classe pour gérer ce genre de tâche Dans votre cas, LabelBinarizer peut faire un encodage à chaud pour vous !! Plus here, cette réponse peut aider

0

Votre approche avec get_dummies() semble OK pour moi, comme restaurant_id est une caractéristique catégorique, comme vous l'avez mentionné. Avec des méthodes arborescentes non paramétriques telles que random forest et xgboost, vous pouvez même essayer d'utiliser le restaurant_id comme une fonction numérique entière et obtenir toujours de bonnes performances (voir la réponse par ogrisel ici https://github.com/scikit-learn/scikit-learn/issues/5442).

Ceci est particulièrement pratique lorsque vous avez des milliers de catégories, et get_dummies() donnerait une matrice énorme.

0

Vous pouvez utiliser le hachage de fonctions (par exemple l'astuce de hachage) pour représenter de grandes entités catégorielles. C'est la même chose que Onehotencoding mais la matrice éparse formée est de dimensions inférieures. Elle est donc efficace dans le temps et dans la mémoire.