python get score gain_机器学习的特征重要性究竟是怎么算的

本文详细介绍了XGBoost和GBDT的特征重要性计算原理。对于XGBoost,特征重要性可以通过weight、gain、cover等方式计算,其中gain是信息增益之和除以特征出现频次。GBDT则根据节点分裂前后impurity减少量评估特征重要性,impurity计算通常基于MSE或MAE。特征重要性的最终输出经过归一化处理,转换为百分比形式。
摘要由CSDN通过智能技术生成

最近将主流模型的sklearn的代码撸了一遍,特别是计算特征重要性这块仔仔细细了解了一番;常用算法中xgboost、gbdt、randomforest、tree等都可以输出特征的重要性评分,下面着重记录xgboost和gbdt特征重要性计算过程,randomforest和gbdt差不多,就不赘述了。

1.xgboost

1.简介

xgboost是当下流行的boosting算法,基学习器可以是gbtree也可以是gbliner

当基学习器是gbtree时,可以计算特征重要性;

在基础的xgboost模块中,计算特征重要性调用get_score()

在xgboost的sklearn API中,计算特征重要性调用feature_importance_;

feature_importance_依然派生于get_score(),所以查看xgboost的get_score()源码就可知其所以然;

2.url:https://github.com/zengfanxi/xgboost/blob/master/python-package/xgboost/core.pyget_score有两个参数,fmap是一个包含特征名称映射关系的txt文档; importance_type指importance的计算类型;可取值有5个:weight:权重(某特征在整个树群节点中出现的次数,出现越多,价值就越高)

gain:(某特征在整个树群作为分裂节点的信息增益之和再除以某特征出现的频次)

total_gain(同上,代码中有介绍,这里total_gain就是gain)

cover和total_cover

cover比较复杂,python文档未做解释,其实是指某特征节点样本的二阶导数和再除以某特征出现的 我在xgboost R API文档中找到了部分解释: https://github.com/dmlc/xgboost/blob/f5659e17d5200bd7471a2e735177a81cb8d3012b/R-package/man/xgb.plot.tree.Rd

代码中频繁提到通过get_dump获取树规则,举个例子看看什么是树规则:

trees = bst.get_dump(with_stats=True)

for tree in trees:

print(tree)

# 以下输出了2次迭代的决策树规则,规则内包含量特征名、gain和cover,

# 源码就是提取上述3个变量值进行计算特征重要性

[out]:

0:[inteval<1] yes=1,no=2,missing=1,gain=923.585938,cover=7672

1:[limit<9850] yes=3,no=4,missing=3,gain=90.4335938,cover=6146.5

3:leaf=-1.86464596,cover=5525.25

4:leaf=-1.45520294,cover=621.25

2:[days<3650] yes=5,no=6,missing=5,gain=164.527832,cover=1525.5

5:leaf=-1.36227047,cover=598

6:leaf=-0.688206792,cover=927.5

0:[days<7850] yes=1,no=2,missing

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值