如何使用xgboost的plot_importance函数?特征重要性排序
发布于 作者:苏南大叔 来源:程序如此灵动~

继续描述独立的xgboost
模型,模型对数据的处理过程中,各个特征对最终结果的影响力是不同的。那么,这些特征的影响力里面,谁大谁小呢?换句话说,谁更重要呢?这就是本文讨论的问题。使用xgboost.plot_importance()
来画个特征重要性排序图。

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码所学所想。本文测试环境:win10
,python@3.12.0
,pandas@2.1.3
,matplotlib@3.8.2
,xgboost@2.0.2
。
前文回顾
本文还是使用xgboost
来处理鸢尾花数据集,所以主要的内容,可以参考下面的文章:
本文的结果可以表明:在选择任意两个特征画散点图的时候,可以有依据了。参考文章:
plot
画图显示中文的事情,可以参考:
加载鸢尾花数据集
这里其实有个细节,需要特别说明一下:
拿到的鸢尾花数据X
,从原来的ndarray
类型改成了dataframe
类型。对预测的结果是没有任何影响的。否则也不可能这么多的预测模型方法,都是使用ndarray
类型处理的数据。
但是,对于本文来说,是有一些影响。dataframe
类型变量里面,携带了列名column
的信息。对于本文结果的展示,有着更直观方便的影响。

xgboost的importance_type
本文是以讨论特征的重要性为目的的,而xgb.XGBClassifier()
的importance_type
有着不同的取值。理论上是可以影响预测结果的。【当然,对于本文的鸢尾花数据集来说,似乎没有影响】
weight
默认值,表示一个特征在所有树中被使用的次数。这个参数反映了该特征的重要性,因为如果一个特征被用于更多的树中,那么它对最终预测结果的贡献就更大。gain
,表示一个特征在所有树中对预测结果的平均增益。这个参数反映了该特征在每个节点上的分裂能力,因为如果一个特征在每个节点上的分裂能力越强,它对最终预测结果的贡献就越大。cover
,表示一个特征在所有树中对样本的平均覆盖度。这个参数反映了该特征对模型的覆盖能力,因为如果一个特征对更多的样本有影响,它对最终预测结果的贡献就更大。
画图排序重要性【本文重点】

这里需要说明的是:
xgboost
模型进行数据填充的时候,是带着column
信息的。所以,这里的图会显示对应的标签名。ax
是把plot_importance()
和默认的plt
画图对象进行关联的关键点。- 如果特征点很多的话,
max_num_features
就可以控制显示的特征点的数量。
从图的结果上来看,四个特征里面,最重要的两个特征是:"萼长"和"瓣长"。
结语
不想写结语,不知道写啥。


