首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用XGBClassifier的特性重要性

使用XGBClassifier的特性重要性
EN

Stack Overflow用户
提问于 2016-07-05 21:00:30
回答 10查看 48.3K关注 0票数 24

希望我读错了,但是在XGBoost库文档中,有关于使用feature_importances_提取特性重要性属性的注意事项,就像sklearn的随机林一样。

但是,出于某种原因,我一直收到以下错误:AttributeError: 'XGBClassifier' object has no attribute 'feature_importances_'

我的代码片段如下:

代码语言:javascript
运行
复制
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_

似乎可以通过调用Booster属性来使用get_fscore对象来计算特性的重要性。我使用XGBClassifier over Booster的唯一原因是它能够被包装在一个sklearn管道中。对特征提取有什么想法吗?还有其他人在经历这种事吗?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2016-07-06 15:22:45

正如评论所指出的,我怀疑您的问题是版本问题。但是,如果您不想/不能更新,那么下面的函数应该适用于您。

代码语言:javascript
运行
复制
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}
票数 17
EN

Stack Overflow用户

发布于 2018-06-18 04:36:25

对于xgboost,如果使用xgb.fit(),则可以使用以下方法获得特性重要性。

代码语言:javascript
运行
复制
import pandas as pd
xgb_model=xgb.fit(x,y)
xgb_fea_imp=pd.DataFrame(list(xgb_model.get_booster().get_fscore().items()),
columns=['feature','importance']).sort_values('importance', ascending=False)
print('',xgb_fea_imp)
xgb_fea_imp.to_csv('xgb_fea_imp.csv')

from xgboost import plot_importance
plot_importance(xgb_model, )
票数 15
EN

Stack Overflow用户

发布于 2016-07-09 00:32:54

我找到答案了。0.4a30版本似乎没有feature_importance_属性。因此,如果您使用pip install xgboost安装xgboost包,您将无法从XGBClassifier对象中进行特性提取,如果您想找到解决办法,可以参考@David的答案。

但是,我所做的是通过克隆回购并运行. ./build.sh来从源代码构建它,这将安装0.4版本,feature_importance_属性就是在这里工作的。

希望这能帮到别人!

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38212649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档