gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:54:19 26 4
gpt4 key购买 nike

我知道这个问题已经被问过好几次了,我已经阅读过它们,但仍然无法弄清楚。和其他人一样,我的功能名称最后显示为 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com