Xgboost: Est-il nécessaire de se débarrasser des fonctionnalités inutiles dans la tâche de classification dans xgboost ?

Créé le 14 mars 2017  ·  3Commentaires  ·  Source: dmlc/xgboost

J'ai plus de 650 fonctionnalités et j'utilise xgboost pour classer l'importance de ces fonctionnalités. La fonction est get_score() qui renvoie l'occurrence des caractéristiques lors de la construction d'arbres.

Quand je vérifie le résultat, il y a près de 150 fonctionnalités dont le score est inférieur à 20. Certaines d'entre elles sont nulles. Je me débarrasse de ces fonctionnalités et je vois si le modèle aura de meilleures performances. Mais le résultat est à peu près le même que le précédent. Alors faut-il se débarrasser de ces fonctionnalités qui n'ont pas d'importance ?

Dans le résultat de l'expérience, le nouvel ordre d'importance des caractéristiques n'est pas comme l'ordre précédent. Certains n'étaient pas trop importants sont devenus importants. Je veux dire que l'ordre d'importance des fonctionnalités n'est pas stable. Pourquoi ce n'est pas stable ?

Commentaire le plus utile

Dans la plupart des algorithmes d'apprentissage automatique, il est important de sélectionner des fonctionnalités pour éviter le surajustement.

En boost, et surtout en xgboost, l'apprentissage est fait pour que vous généralisiez le plus possible (apprenant faible, approximation de taylor, apprentissage stochastique,...) ce qui le rend robuste au sur-apprentissage (cela dit, vous pouvez sur- fit si vous le voulez vraiment :) -> nombre élevé d'itérations, taux d'apprentissage élevé, pas d'apprentissage stochastique...). Pour répondre à vos questions, se débarrasser des fonctionnalités non pertinentes peut avoir une importance à un moment donné. Supposons que vous ayez des valeurs aberrantes, vous pourriez commencer à utiliser ces fonctionnalités non pertinentes pour classer les valeurs aberrantes pendant le processus d'apprentissage et ce n'est pas bon.

Pour votre deuxième question, il n'y a pas qu'une seule façon de combiner les apprenants faibles pour obtenir de bons résultats. cependant, pour obtenir différentes combinaisons (et différentes importances de caractéristiques), vous devez utiliser un certain caractère aléatoire pendant votre processus d'entraînement, tel que sous-échantillon, max_features... Une autre possibilité est que vous ayez des caractéristiques redondantes. Vous devriez vérifier la corrélation entre eux.

En résumé, si vous savez qu'une fonctionnalité est inutile : supprimez-la. Si vous ne le savez pas, laissez-les faire, il est toujours bon de supprimer les fonctionnalités non pertinentes car cela ralentira l'entraînement de votre modèle.

Tous les 3 commentaires

Dans la plupart des algorithmes d'apprentissage automatique, il est important de sélectionner des fonctionnalités pour éviter le surajustement.

En boost, et surtout en xgboost, l'apprentissage est fait pour que vous généralisiez le plus possible (apprenant faible, approximation de taylor, apprentissage stochastique,...) ce qui le rend robuste au sur-apprentissage (cela dit, vous pouvez sur- fit si vous le voulez vraiment :) -> nombre élevé d'itérations, taux d'apprentissage élevé, pas d'apprentissage stochastique...). Pour répondre à vos questions, se débarrasser des fonctionnalités non pertinentes peut avoir une importance à un moment donné. Supposons que vous ayez des valeurs aberrantes, vous pourriez commencer à utiliser ces fonctionnalités non pertinentes pour classer les valeurs aberrantes pendant le processus d'apprentissage et ce n'est pas bon.

Pour votre deuxième question, il n'y a pas qu'une seule façon de combiner les apprenants faibles pour obtenir de bons résultats. cependant, pour obtenir différentes combinaisons (et différentes importances de caractéristiques), vous devez utiliser un certain caractère aléatoire pendant votre processus d'entraînement, tel que sous-échantillon, max_features... Une autre possibilité est que vous ayez des caractéristiques redondantes. Vous devriez vérifier la corrélation entre eux.

En résumé, si vous savez qu'une fonctionnalité est inutile : supprimez-la. Si vous ne le savez pas, laissez-les faire, il est toujours bon de supprimer les fonctionnalités non pertinentes car cela ralentira l'entraînement de votre modèle.

Merci. J'ai supprimé près de 150 fonctionnalités qui ne sont pas importantes. Mais l'auc de la nouvelle expérience n'est pas modifié. Je n'ai donc trouvé aucun avantage à les supprimer.

L'avantage, s'il n'améliore pas la mesure de la performance, sera le temps de formation. Les arbres de décision utilisent une approche gourmande pour trouver la meilleure division, donc plus de fonctionnalités = plus de divisions à essayer.

Cette page vous a été utile?
0 / 5 - 0 notes