2016-07-05 226 views
6

希望我讀這個錯誤,但在XGBoost庫documentation,有注意到使用feature_importances_提取功能重要性屬性很像sklearn的隨機森林。功能重要性與XGBClassifier

然而,出於某種原因,我不斷收到此錯誤:AttributeError: 'XGBClassifier' object has no attribute 'feature_importances_'

我的代碼片段如下:

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_ 

看來你可以通過調用get_fscore使用Booster對象計算功能的重要性屬性。我使用XGBClassifier而不是Booster的唯一原因是它能夠被包裹在sklearn管道中。有關功能提取的任何想法?有沒有人遇到過這種情況?

+0

我無法重現與您的代碼段的問題。你有什麼版本的XGBoost? – BrenBarn

+0

從我的'pip freeze',我有'xgboost == 0.4a30' –

+0

這是否有幫助? https://www.kaggle.com/mmueller/liberty-mutual-group-property-inspection-prediction/xgb-feature-importance-python/評論 –

回答

13

正如評論所示,我懷疑你的問題是一個版本問題。但是,如果你不想/不能更新,那麼下面的函數應該適合你。

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} 
+0

有趣的方法!但是,如果我調整「XGBClassifer」的參數,會否影響?我將如何確保它與您在XGBClassifer()對象中引用booster()對象的Booster' –

+0

的參數相匹配,以便匹配:'xgb.booster()' – David

+0

我意識到一些奇怪的東西,並且是應該發生的?從xgb.booster()。get_fscore()返回的值應該包含模型所訓練的所有列的值?因爲我發現imp_vals中缺少2列,這些列出現在列列中,但不是imp_cols –

5

我找到了答案。看來版本0.4a30沒有feature_importance_屬性。因此,如果您使用pip install xgboost來安裝xgboost軟件包,您將無法從XGBClassifier對象中進行特徵提取,如果需要解決方法,可以參考@David的答案。

不過,我所做的是通過克隆回購和運行. ./build.sh其中feature_importance_屬性工程將安裝版本0.4從源頭上構建它。

希望這可以幫助別人!