将专家重要性的索引映射到数据框中的列索引

时间:2017-02-21 00:21:47

标签: python feature-selection data-science xgboost

您好我使用xgboost中的feature_importance绘制了一个图表。但是,图表会返回" f值"。我不知道图中表示了哪个功能。我听说过如何解决这个问题的一种方法是将我的数据框中的要素索引映射到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

1 个答案:

答案 0 :(得分: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)