2017-02-21 4 views
0

안녕하세요 xgboost의 feature_importance를 사용하여 그래프를 그렸습니다. 그러나 그래프는 "f 값"을 반환합니다. 어떤 기능이 그래프에 표시되는지 모르겠습니다. 이 문제를 해결하는 방법에 대해 들었던 한 가지 방법은 데이터 프레임 내의 지형지 물 인덱스를 feature_importance "f-values"의 인덱스에 매핑하고 열을 수동으로 선택하는 것입니다. 이 일을 어떻게 수행합니까? 이 일을 다른 방법이 있는지 또한 도움은 정말 감사하겠습니다 : enter image description here데이터 프레임의 열 인덱스에 대한 위업 가져 오기의 인덱스 매핑

print(feature_importance.head()) 

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

안녕하십니까. 당신도 저를 위해 이것을 볼 수 있다고 생각하십시오! –

+0

위를 확인하세요. 안녕하세요. @jezrael –

+0

니스, 고마워. 그리고 이제'f20','f22'는 어떤'dict'와 매핑됩니까? 아니면 다른 데이터 프레임? – jezrael

답변

0

내가 시도 : 여기

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') 

그래프입니다 : 여기

이 아래에있는 내 코드입니다 여기에 간단한 예제가 있는데, 여기에 내가 작성한 코드가있다 :

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') 
(210)

결과는 다음과 같습니다

enter image description here

당신이 레이블이 괜찮 볼 수있다. 기본 기능 이름을 따라서 xgboost,

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 기본적으로 인덱스/열 이름이 없습니다 :

지금, 대신 dataframe의 배열을 전달 할 수 있습니다 (f0, f1, ..., fn)

관련 문제