permutation_importance(),如何衡量模型特征重要性?
发布于 作者:苏南大叔 来源:程序如此灵动~

继续特征重要性分析的话题,本文和上一篇文章类似,龙套代码还是采用xgboost
对泰坦尼克号数据进行分析。但是特征重要性分析的结果,则采用更加具有通用性的permutation_importance()
。

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验文章。测试环境:python@3.12.3
,pandas@2.2.2
,numpy@1.26.4
,xlrd@2.0.1
,openpyxl@3.1.2
,scikit-learn@1.5.0
,xgboost@2.0.3
。
前文回顾
首先,需要明确的观点是:特征重要性分析并没有唯一的标准答案。正如每个模型都有不同的转确率一样。每种方法都可能得到不同的结果。主要回顾的文章是这篇:
文章里,使用xgboost
对泰坦尼克号数据集进行预测的时候,使用了三种方案对其进行分析。
模型名 | 基于 | 参数booster | .coef_ | .feature_importances_ | plot_importance() |
---|---|---|---|---|---|
gbtree | 树模型 | 默认值 | 不存在 | 存在(越大越重要) | 存在(越大越重要) |
gblinear | 线性模型 | 非默认值 | 存在(越小越重要) | 存在(越大越重要) | 存在(越大越重要) |
对于其它模型来说,
.coef_
属性和线性模型深度绑定。.feature_importances_
属性和树模型深度绑定。plot_importance()
方法和xgbooster
深度绑定。
permutation_importance()
permutation_importance()
方法来自于sklearn.inspection
,所以它并不是和某种模型深度绑定的。是一个较为通用的算法表述。它是一种外部的特征重要性的观测方式。
其官方描述链接,如下:
- https://scikit-learn.org/stable/modules/permutation_importance.html#permutation-importance
- https://scikit-learn.org/stable/modules/generated/sklearn.inspection.permutation_importance.html
原型如下:
permutation_importance()
是一种基于排列的特征重要性计算方法,它不依赖于模型本身,而是通过随机打乱某个特征的值,观察模型的预测性能变化来评估该特征的重要性。permutation_importance()
是一种模型无关的方法。
龙套代码
龙套代码如下,这里就不详细解释了。可以参考文章:
permutation_importance()调用
本文虽然是以xgboost
模型为例的。但是,需要知道的是:permutation_importance()
是一个通用的第三方特征观测体系。并不是针对xgboost
而设计的。
这里也不是非要画图,只不过画图比较直观罢了。
输出:
结果对比
在gbtree
的情况下,使用permutation_importance()
进行特征重要性分析,结果是:

在gbliner
的情况下,使用permutation_importance()
进行特征重要性分析,结果是:

结束语
更多苏南大叔的机器学习的文章,可以参考:


