置换重要性(permutation_importance)可以查看各个特征对模型结果的影响力,最我们后续进行特征选择最准备,这个阶段是在建模之后进行,我们也可以将这一步骤作为特征工程的一部分。
置换重要性的核心思想在于:如果用随机排列的值替换特征,会导致模型分数的下降。它是通过几个简单的步骤来计算的:

  1. 使用训练数据集(X_train,y_train)来训练模型;
  2. 对训练数据集进行预测(X_train,y_hat),计算准确度得分(score, 得分越高越好);
  3. 计算每个特征(feature_i)的置换重要性:
  • (1) 置换训练数据集中的第i个特征的值(feature_i),保持其它特征不变。生成置换后的训练数据集(X_train_permuted);
  • (2) 用第2步训练好的模型以及X_train_permuted数据集进行预测(y_hat_permuted);
  • (3)计算对应的准确度得分(score_permuted);
  • (4)每个特征的置换重要性即为对应的差异系数(score_permuted - score)。

使用sklearn进行置换重要性

首先我们需要导入sklearn中的相应处理方法
from sklearn.inspection import permutation_importance

接下来步骤的代码如下:

  1. importances = permutation_importance(CLF_XGB, X_test, y_test, n_repeats = 30)
  2. importances_df = pd.DataFrame(importances.importances_mean)
  3. importances_df['Features'] = col_names
  4. importances_df = importances_df.rename(columns={0 : 'Average Importance'})
  5. fig = px.bar(importances_df, x='Features', y='Average Importance')
  6. fig.show()
  • 实例化permutation_importance
  • 第一个参数是之前我们实例化的机器学习模型
  • 第二、三个参数是测试集
  • 第四个参数是置换重要性的次数