scikit-learn 基于排列的特征重要性
基于排列的特征重要性是一种模型检查技术,可用于表格型数据中任一个拟合的估计器 。 这对于非线性或不可解释的估计器特别有用 。基于排列的特征重要性定义为单个特征取值被随机打乱时模型得分的降低程度。此过程破坏了特征与目标之间的关系,因此模型得分的下降程度表示了模型对特征的依赖程度。这种技术的好处在于它不依赖于模型,并且可以通过特征的不同排列进行多次计算。
permutation_importance
函数可以计算给定数据集的估计器的特征重要性。n_repeats
参数设置特征取值随机重排的次数,并返回样本的特征重要性。
让我们考虑下面训练回归模型的例子:
>>> from sklearn.datasets import load_diabetes
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.linear_model import Ridge
>>> diabetes = load_diabetes()
>>> X_train, X_val, y_train, y_val = train_test_split(
... diabetes.data, diabetes.target, random_state=0)
...
>>> model = Ridge(alpha=1e-2).fit(X_train, y_train)
>>> model.score(X_val, y_val)
0.356...
通过得分验证其性能,明显大于随机水平。这样就可以使用 permutation_importance
函数来探查哪些特征对预测准确度贡献最大:
>>> from sklearn.inspection import permutation_importance
>>> r = permutation_importance(model, X_val, y_val,
... n_repeats=30,
... random_state=0)
...
>>> for i in r.importances_mean.argsort()[::-1]:
... if r.importances_mean[i] - 2 * r.importances_std[i] > 0:
... print(f"{diabetes.feature_names[i]:<8}"
... f"{r.importances_mean[i]:.3f}"
... f" +/- {r.importances_std[i]:.3f}")
...
s5 0.204 +/- 0.050
bmi 0.176 +/- 0.048
bp 0.088 +/- 0.033
sex 0.056 +/- 0.023
值得注意的是,s5特征的重要性值占参考分数0.356的很大一部分。
排列特征重要性可以在训练集上或在保留的测试或验证集上进行计算。使用保留集可以突出显示哪些特征对模型的泛化能力贡献最大;对训练集重要但对保留数据集不重要的功能可能会导致模型过拟合。
警告 |
---|
对不良模型(较低的交叉验证分数)不重要的特征,可能对于良好模型非常重要,因此,在计算重要性之前,使用保留数据集评估模型(或更好地使用交叉验证)的预测能力始终很重要。特征排列重要性本身并不能反映特征的内在预测价值,但是能体现这个特征对于特定模型的重要性。 |
4.2.1 排列重要性算法概述
输入:拟合的预测模型 ,表格型数据集(训练或验证)。
计算模型关于数据 (例如,分类器的准确性或回归器的)的参考分数 。
对于中的特征:
对于中的每个:
随机打乱数据集 D 的第列取值,打乱后的数据集命为 。 计算模型的对数据集的分数 。
计算特征 的重要性 ,计算公式为:
4.2.2 树模型中基于不纯度的特征重要性
基于树的模型提供了另一种基于不纯度平均减少量 (MDI)的特征重要性度量方法。通过决策树的分裂准则(基尼系数,信息熵或均方误差)来量化不纯度。然而,这种方法会过度重视模型而引起过拟合, 可能无法预测新数据的特征 。另一方面,基于排列特性重要性的方法避免了这个问题,因为它可以对新的数据进行计算。
基于不纯度的树模型对特征的重要性的判断很容易产生偏见,并且偏向于高基数特征(通常是数值特征),而不是低基数特征(例如具有少量可能类别的二元特征或分类变量)。
基于排列的特征重要性不表现出这种偏差。它可以在模型预测的基础上计算出性能指标,并且可以用于分析任何模型(不仅仅是基于树的模型)。
以下示例突出了与基于排列的特征重要性相比,基于不纯度的特征重要性的局限性: 置换重要性与随机森林特征重要性(MDI)。
4.2.3 在高度相关的特征上的误导值
当两个特征相关联并且其中一个特征被随机重排时,模型仍然可以通过其相关特征来访问此特征。这将导致两个特征的重要性指标降低,而这两个特征实际上可能很重要。
处理此问题的一种方法是将关联的特征聚类,并且对于每个聚类仅保留一个特征。在以下示例中探讨了该方法: 具有多重共线性或相关特征的置换重要性。
例子: |
---|
排列重要性与随机森林特征重要性(MDI) 具有多重共线性或相关特征的排列重要性 |
参考文献: |
---|
[1]L. Breiman, “Random Forests”, Machine Learning, 45(1), 5-32, 2001. https://doi.org/10.1023/A:1010933404324 |
更多建议: