首页 > 其他 > 详细

xgboost.plot_importance画特征重要性,字段是中文名称时

时间:2021-07-16 10:47:11      阅读:38      评论:0      收藏:0      [点我收藏+]

1.一般来说我们可以使用xgboost.get_score去画图,但是如果字段名字有中文时,是会报错的

2.可以通过映射关系,从plot_importance的参数入手。但是可能会复杂一下。

3.可以使用xgb.DMatrix(tfeature_names=list),这个方法简单使用。

下面演示一下第三个方法:

train_x, test_x, train_y, test_y = train_test_split(data_x.values, data_y.values, test_size=0.3,random_state=1234,stratify=data_y)

d_train = xgb.DMatrix(train_x, label=train_y,feature_names=list(data_x.columns))
d_valid = xgb.DMatrix(test_x, label=test_y,feature_names=list(data_x.columns))
watchlist = [(d_train, train), (d_valid, valid)]
#参数设置
params={
    eta: 0.2, # 特征权重 取值范围0~1 通常最后设置eta为0.01~0.2
    max_depth:3,   # 通常取值:3-10 树的深度
    min_child_weight:6, # 最小样本的权重,调大参数可以防止过拟合
    gamma:0.3,
    subsample:0.8, #随机取样比例
    colsample_bytree:0.8, #默认为1 ,取值0~1 对特征随机采集比例
    booster:gbtree, #迭代树
    objective: binary:logistic, #逻辑回归,输出为概率
    nthread:8, #设置最大的进程量,若不设置则会使用全部资源
    scale_pos_weight: 10, #默认为0,1可以处理类别不平衡
    lambda:1,   #默认为1
    seed:1234, #随机数种子
    silent:1 , #0表示输出结果
    eval_metric: auc # 检验指标
}
bst = xgb.train(params, d_train,1000,watchlist,early_stopping_rounds=500, verbose_eval=10)
tree_nums=bst.best_ntree_limit
print(最优模型树的数量:%s,auc:%s % (bst.best_ntree_limit, bst.best_score)) #最优模型树的数量:81,auc:0.870911
bst = xgb.train(params, d_train,tree_nums,watchlist,early_stopping_rounds=500, verbose_eval=10)
#joblib.dump(bst, ‘d:/xgboost.model‘) #保存模型

###########
plot_importance(bst,max_num_features=20)
plt.show()

按照一般的建模流程做就可以,不必在意是否能运行上面这段代码

xgboost.plot_importance画特征重要性,字段是中文名称时

原文:https://www.cnblogs.com/cgmcoding/p/15018719.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!