2017-02-21 10 views
0

こんにちは私はxgboostのfeature_importanceを使ってグラフをプロットしました。ただし、グラフは「f値」を返します。どの機能がグラフに表示されているのか分かりません。私がこれを解決する方法について聞いた1つの方法は、データフレーム内のフィーチャのインデックスをfeature_importance "f-values"のインデックスにマッピングし、カラムを手動で選択することです。これを行うにはどうしたらいいですか?これを行う別の方法がある場合にも、ヘルプは本当にいただければ幸いです。ここフィートのインデックスのインデックスをデータフレームの列のインデックスにマッピングする

は、以下の私のコードです:ここでは

feature_importance = pd.Series(model.booster().get_fscore()).sort_values(ascending=False) 
feature_importance.plot(kind='bar', title='Feature Importances') 
plt.ylabel('Feature Importance Score') 

グラフは次のとおりです。 enter image description here

print(feature_importance.head()) 

Output: 
f20  320 
f22  85 
f29  67 
f34  38 
f81  20 
+0

Hey @jezrael。あなたも私のためにこれを見ることができると思う! –

+0

上記を確認してくださいiIはそれを@jezraelに追加しました –

+0

ニース、ありがとうございます。そして今、 'f20'、' f22'はいくつかの 'dict'とマッピングしていますか?それとも別のデータフレームですか? – jezrael

答えて

0

私が試しました簡単な例を見てみよう。ここに書いたコードはここにある:

import pandas as pd 
import xgboost as xgb 
import numpy as np 

%matplotlib inline 
import matplotlib.pyplot as plt 

model = xgb.XGBRegressor() 

size = 100 

data = pd.DataFrame([], columns=['a','b','c','target']) 
data['a'] = np.random.rand(size) 
data['b'] = np.random.rand(size) 
data['c'] = np.random.rand(size) 

data['target'] = np.random.rand(size)*data['a'] + data['b'] 

model.fit(data.drop('target',1), data.target) 

feature_importance = pd.Series(model.booster().get_fscore()).sort_values(ascending=False) 
feature_importance.plot(kind='bar', title='Feature Importances') 
plt.ylabel('Feature Importance Score') 

結果は次のとおりです。

enter image description here

あなたはラベルが細かい見るように。

は今、代わりにデータフレームの配列を渡すことができます:

model.fit(np.array(data.drop('target',1)), data.target) 

feature_importance = pd.Series(model.booster().get_fscore()).sort_values(ascending=False) 
feature_importance.plot(kind='bar', title='Feature Importances') 
plt.ylabel('Feature Importance Score') 

enter image description here

ので、あなたの問題は、np.arrayはデフォルトの機能名を作るのでxgboost、デフォルトでは何のインデックス/カラム名を持っていません(f0、f1、...、fn)

関連する問題