首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XGBoost plot_importance不显示功能名称

XGBoost plot_importance不显示功能名称
EN

Stack Overflow用户
提问于 2017-10-26 07:01:15
回答 7查看 30.9K关注 1票数 27

我正在使用XGBoost和Python,并且已经使用在DMatrix数据上调用的XGBoost train()函数成功地训练了一个模型。该矩阵是从Pandas数据帧创建的,该数据帧具有列的特征名称。

代码语言:javascript
复制
Xtrain, Xval, ytrain, yval = train_test_split(df[feature_names], y, \
                                    test_size=0.2, random_state=42)
dtrain = xgb.DMatrix(Xtrain, label=ytrain)

model = xgb.train(xgb_params, dtrain, num_boost_round=60, \
                  early_stopping_rounds=50, maximize=False, verbose_eval=10)

fig, ax = plt.subplots(1,1,figsize=(10,10))
xgb.plot_importance(model, max_num_features=5, ax=ax)

现在,我希望使用xgboost.plot_importance()函数查看特征的重要性,但结果图没有显示特征名称。相反,这些特性被列为f1f2f3等,如下所示。

我想问题是我把我原来的熊猫数据帧转换成了DMatrix。如何正确关联特征名称,以使特征重要性图显示它们?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2017-10-26 07:13:06

您希望在创建xgb.DMatrix时使用feature_names参数

代码语言:javascript
复制
dtrain = xgb.DMatrix(Xtrain, label=ytrain, feature_names=feature_names)
票数 25
EN

Stack Overflow用户

发布于 2019-03-12 20:42:31

如果你使用的是scikit learn包装器,你需要访问底层的XGBoost Booster并在其上设置特性名称,而不是scikit模型,如下所示:

代码语言:javascript
复制
model = joblib.load("your_saved.model")
model.get_booster().feature_names = ["your", "feature", "name", "list"]
xgboost.plot_importance(model.get_booster())
票数 39
EN

Stack Overflow用户

发布于 2017-10-26 21:48:15

train_test_split会将数据帧转换成不再包含列信息的numpy数组。

你可以按照@piRSquared建议的那样做,并将这些特性作为参数传递给DMatrix构造器。或者,您可以将从train_test_split返回的numpy数组转换为Dataframe,然后使用您的代码。

代码语言:javascript
复制
Xtrain, Xval, ytrain, yval = train_test_split(df[feature_names], y, \
                                    test_size=0.2, random_state=42)

# See below two lines
X_train = pd.DataFrame(data=Xtrain, columns=feature_names)
Xval = pd.DataFrame(data=Xval, columns=feature_names)

dtrain = xgb.DMatrix(Xtrain, label=ytrain)
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46943314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档