【问题标题】:Mapping the index of the feat importances to the index of columns in a dataframe将功能重要性的索引映射到数据框中的列索引
【发布时间】:2017-02-21 00:21:47
【问题描述】:

您好,我使用 xgboost 的 feature_importance 绘制了一个图表。但是,该图返回“f 值”。我不知道图中表示的是哪个特征。我听说如何解决这个问题的一种方法是将我的数据框中的特征索引映射到 feature_importance“f 值”的索引并手动选择列。我该怎么做呢?此外,如果有其他方法可以做到这一点,我们将不胜感激:

下面是我的代码:

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

这是图表:

print(feature_importance.head())

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

【问题讨论】:

  • 嘿@jezrael。觉得你也可以帮我看看这个!
  • 检查上面我添加了它@jezrael
  • 很好,谢谢。现在f20f22 正在与一些dict 进行映射?还是其他数据框?
  • 不是问题,它假设映射我的特征标签。但是由于某些奇怪的原因,xgboost 的方法是这样打印的。那些 f 值实际上是我的特征。所以我想知道是否有任何方法可以找到我的列的索引号,例如第 1 列的值可能是 f20 。我只是想要一个比较,之后我可以手动将它们取出@jezrael
  • 我从不使用xgboost,所以这对我来说很难。如果添加您的输入数据样本(如何获得model)和所需的数据框输出feature_importance,可能会有所帮助

标签: python feature-selection data-science xgboost


【解决方案1】:

我在这里尝试了一个简单的例子来看看发生了什么,这是我编写的代码:

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

结果是:

如您所见,标签很好。

现在,让我们传递一个数组而不是数据框:

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

因此您的问题,默认情况下 np.array 没有索引/列名称,因此 xgboost 使默认功能名称 (f0, f1, ..., fn)

【讨论】:

    猜你喜欢
    • 2020-06-21
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-14
    • 1970-01-01
    • 2018-09-29
    相关资源
    最近更新 更多