Permutation Importance重要性

算法解构

Permutation Importance适用于表格型数据,其对于特征重要性的评判取决于该特征被随机重排后,模型表现评分的下降程度。其数学表达式可以表示为:

  • 输入:训练后的模型m,训练集(或验证集,或测试集)D
  • 模型m在数据集D上的性能评分s
  • 对于数据集D的每一个特征j
    • 对于K次重复实验中的每一次迭代k,随机重排列特征j,构造一个被污染的数据集 D c k , j D c_{k, j} Dck,j
    • 计算模型m在数据集 D c k , j D c_{k, j} Dck,j上的性能评分 s k , j s_{k, j} sk,j
    • 特征j的重要性分数 i j i_{j} ij则可以记作 i j = s − 1 / K ∑ k = 1 K s k , j i_j=s-1 / K \sum_{k=1}^K s_{k, j} ij=s1/Kk=1Ksk,j

L. Breiman, “Random Forests”, Machine Learning, 45(1), 5-32, 2001.

代码

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)


scoring = ['r2', 'neg_mean_absolute_percentage_error', 'neg_mean_squared_error']
# scoring参数可以同时加入多个计算指标,这样比重复使用permutation_importance更有效率,因为预测值能被用来计算不同的指标
r_multi = permutation_importance(model, X_val, y_val, n_repeats=30, random_state=0, scoring=scoring)

for metric in r_multi:
    print(f"{metric}")
    r = r_multi[metric]
    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}")

输出为:

r2
  s5      0.204 +/- 0.050
  bmi     0.176 +/- 0.048
  bp      0.088 +/- 0.033
  sex     0.056 +/- 0.023
neg_mean_absolute_percentage_error
  s5      0.081 +/- 0.020
  bmi     0.064 +/- 0.015
  bp      0.029 +/- 0.010
neg_mean_squared_error
  s5      1013.903 +/- 246.460
  bmi     872.694 +/- 240.296
  bp      438.681 +/- 163.025
  sex     277.382 +/- 115.126

相比而言,树模型通常基于不纯净度的下降来判断特征重要性,该重要性通常是基于训练集的,当模型过拟合时,特征的重要性则具有误导性。在此情况下,看似重要的特征可能对于模型上线后的遇到的新数据并没有令人满意的预测能力。

同时,基于不纯净度的特征重要性容易受到高数量类别属性的影响(High Cardinality Features),所以那些数值型变量往往排名靠前。而Permutation Importance 对模型的特征没有偏见,也不局限于特定的模型类别,适用性较广。请注意。如果特征有较强的多重共线性,建议只取一个重要的特征,方法可查看官方示例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值