python - 从 XGBoost 模型中获取实际特征名称

标签 python pandas plot xgboost

我知道这个问题已经被问过好几次了,我已经阅读过它们,但仍然无法弄清楚。 和其他人一样,我的功能名称最后显示为 f56、f234、f12 等,我想要实际的名称而不是 f-something!这是与模型相关的代码部分:

optimized_params, xgb_model = find_best_parameters() #where fitting and GridSearchCV happens
xgdmat = xgb.DMatrix(X_train_scaled, y_train_scaled)
feature_names=xgdmat.feature_names
final_gb = xgb.train(optimized_params, xgdmat, num_boost_round = 
                     find_optimal_num_trees(optimized_params,xgdmat)) 


final_gb.get_fscore()
mapper = {'f{0}'.format(i): v for i, v in enumerate(xgdmat.feature_names)}
mapped = {mapper[k]: v for k, v in final_gb.get_fscore().items()}
mapped
xgb.plot_importance(mapped, color='red')   

我也尝试过这个:

feature_important = final_gb.get_score(importance_type='weight')
keys = list(feature_important.keys())
values = list(feature_important.values())

data = pd.DataFrame(data=values, index=keys, columns=["score"]).sort_values(by = "score", ascending=False)
data.plot(kind='barh')

但特征仍然显示为 f+number。我真的很感激任何帮助。

我现在正在做的是获取 fs 末尾的数字,例如 f234 中的 234 并在 X_train.columns[234] 中使用它来查看实际名称是什么。但是,我重新考虑了,因为我通过这种方式得到的名称是 f234 所代表的实际功能。

最佳答案

首先根据原始特征创建一个字典,并将它们映射回特征名称。

# create dict to use later
myfeatures = X_train_scaled.columns
dict_features = dict(enumerate(myfeatures))

# feat importance with names f1,f2,...
axsub = xgb.plot_importance(final_gb )

# get the original names back
Text_yticklabels = list(axsub.get_yticklabels())
dict_features = dict(enumerate(myfeatures))
lst_yticklabels = [ Text_yticklabels[i].get_text().lstrip('f') for i in range(len(Text_yticklabels))]
lst_yticklabels = [ dict_features[int(i)] for i in lst_yticklabels]

axsub.set_yticklabels(lst_yticklabels)
print(dict_features)
plt.show()

以下是其工作原理的示例: enter image description here

关于python - 从 XGBoost 模型中获取实际特征名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59341289/

相关文章:

python - flask-httpauth:get_password 装饰器是如何为 basic-auth 工作的?

python - 局部变量的第一个 lambda 捕获始终为 False

python - 如何使 ResNet 适应时间序列数据

python - 强制将 DatetimeIndex 与 Pandas 一起使用

R/Shiny 图不显示在浏览器中

python - 枚举 - Python 循环

pandas - 如何使用pyspark的@pandas_udf进行groupby.agg

python - Pandas中双大括号 `[[...]]`和单大括号 `[..]`索引的区别

matlab - 如何在 Matlab R2012b 的绘图中获取斯堪的纳维亚字母 ä 和 ö

r - 如何使用 ggplot2 绘制矩阵并为相同的值保持相同的颜色