xgbclassifier predict_proba plot_importance importance python scikit-learn xgboost

python - predict_proba - Importancia de funciones con XGBClassifier



xgboost plot_importance (2)

Como lo indican los comentarios, sospecho que tu problema es un control de versiones. Sin embargo, si no desea / no puede actualizar, la siguiente función debería funcionar para usted.

def get_xgb_imp(xgb, feat_names): from numpy import array imp_vals = xgb.booster().get_fscore() imp_dict = {feat_names[i]:float(imp_vals.get(''f''+str(i),0.)) for i in range(len(feat_names))} total = array(imp_dict.values()).sum() return {k:v/total for k,v in imp_dict.items()} >>> import numpy as np >>> from xgboost import XGBClassifier >>> >>> feat_names = [''var1'',''var2'',''var3'',''var4'',''var5''] >>> np.random.seed(1) >>> X = np.random.rand(100,5) >>> y = np.random.rand(100).round() >>> xgb = XGBClassifier(n_estimators=10) >>> xgb = xgb.fit(X,y) >>> >>> get_xgb_imp(xgb,feat_names) {''var5'': 0.0, ''var4'': 0.20408163265306123, ''var1'': 0.34693877551020408, ''var3'': 0.22448979591836735, ''var2'': 0.22448979591836735}

Espero que esté leyendo esto mal, pero en la documentación de la biblioteca XGBoost, hay una nota de extracción de los atributos de importancia de la función usando feature_importances_ muy parecido al bosque aleatorio de sklearn.

Sin embargo, por alguna razón, sigo recibiendo este error: AttributeError: ''XGBClassifier'' object has no attribute ''feature_importances_''

Mi fragmento de código está a continuación:

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_

Parece que puede calcular la importancia de las funciones utilizando el objeto Booster llamando al atributo get_fscore . La única razón por la que estoy usando XGBClassifier sobre Booster es porque puede envolverse en una tubería sklearn. ¿Alguna idea sobre las extracciones de características? ¿Hay alguien más experimentando esto?


Descubrí la respuesta. Parece que la versión 0.4a30 no tiene el atributo feature_importance_ . Por lo tanto, si instala el paquete xgboost utilizando pip install xgboost , no podrá realizar la extracción de características desde el objeto XGBClassifier , puede consultar la respuesta de XGBClassifier si desea una solución alternativa.

Sin embargo, lo que hice fue construirlo desde la fuente clonando el repositorio y ejecutándolo . ./build.sh . ./build.sh que instalará la versión 0.4 donde funciona el atributo feature_importance_ .

Espero que esto ayude a otros!