Fonction de l'Importance avec XGBClassifier
J'espère que je vais lire ce mal, mais en XGBoost bibliothèque la documentation, il y a la note de l'extraction de la fonction de l'importance des attributs à l'aide de feature_importances_
comme sklearn de la forêt aléatoire.
Cependant, pour une raison quelconque, je reçois cette erreur: AttributeError: 'XGBClassifier' object has no attribute 'feature_importances_'
Mon bout de code est ci-dessous:
from sklearn import datasets
import xgboost as xg
iris = datasets.load_iris()
X = iris.data
Y = iris.target
Y = iris.target[ Y < 2] # arbitrarily removing class 2 so it can be 0 and 1
X = X[range(1,len(Y)+1)] # cutting the dataframe to match the rows in Y
xgb = xg.XGBClassifier()
fit = xgb.fit(X, Y)
fit.feature_importances_
Il semble que vous pouvez calculer la fonction de l'importance à l'aide de la Booster
objet en appelant le get_fscore
attribut. La seule raison pour laquelle je suis en utilisant XGBClassifier
sur Booster
est parce qu'il est capable d'être enveloppé dans un sklearn pipeline. Toute réflexion sur la fonctionnalité des extractions? Est ce que quelqu'un d'autre rencontre ce?
- Je ne peux pas reproduire le problème avec votre extrait de code. Quelle est la version de XGBoost avez-vous?
- de mon
pip freeze
, j'aixgboost==0.4a30
- Cela vous aide? kaggle.com/mmueller/...
- J'ai vu cela avant. Le problème est cependant, est que les
get_fscore
méthode est liée à laBooster
objet plutôt queXGBClassifier
à partir de ma compréhension. Voir la doc ici - J'ai 0,4 et votre extrait de code fonctionne sans problème.
- Hrm c'est étrange. La version actuelle est
0.4a30
droit? Il apparaît donc à la recherche à leurs repo - à l'aide de
feature_importances_
via booster() êtes-vous en mesure d'obtenir les noms de colonne avec précision ? Dans mon cas, il jette un KeyError que pas certaines fonctionnalités ne sont pas présentes dans les données.
Vous devez vous connecter pour publier un commentaire.
Comme les commentaires l'indiquent, je suppose que votre question est une gestion des versions un. Toutefois, si vous ne voulez/pouvez pas mettre à jour, puis la fonction suivante devrait fonctionner pour vous.
XGBClassifer
? Comment m'assurer qu'il correspond aux paramètres deBooster
xgb.booster()
xgb.get_booster().get_fscore()
. Sinon j'ai été faireTypeError: 'str' object is not callable
. Je suis à l'aide de xgboost 0.6.J'ai trouvé la réponse. Il semble que la version
0.4a30
n'a pasfeature_importance_
attribut. Par conséquent, si vous installez le xgboost package à l'aide depip install xgboost
il vous sera impossible d'effectuer l'extraction de caractéristiques de laXGBClassifier
objet, vous pouvez vous référer à @David réponse si vous souhaitez une solution de contournement.Cependant, ce que j'ai fait est de le construire à partir de la source par cloner le repo et en cours d'exécution
. ./build.sh
qui va installer la version0.4
où lafeature_importance_
attribut fonctionne.Espère que cela aide les autres!
Obtenir la Fonction de l'Importance en tant que données triées cadre
Pour
xgboost
, si vous utilisezxgb.fit()
,alors vous pouvez utiliser la méthode suivante pour obtenir la fonctionnalité de l'importance.Pour ceux ayant le même problème que Luís Bianchin, "TypeError: 'str' object n'est pas appelable", j'ai trouvé une solution (qui fonctionne pour moi au moins) ici.
En bref, j'ai trouvé la modification de Davidle code de
à
a fonctionné pour moi.
Pour plus de détails, je vous recommande de visiter le lien ci-dessus.
Grand merci à David et ianozsvald