特征重要性排序--Permutation Importance

PermutationImportance是一种计算特征重要性的方法,具有计算量小、易于理解和与目标一致的优点。它在模型训练后进行,通过打乱验证集中某一特征的数据来观察模型预测精度的变化,以此评估特征的重要性。例如,当第二列数据被打乱后,如果预测精度大幅下降,说明该特征对模型预测至关重要。实现过程包括训练模型、对特征列进行打乱、评估预测精度变化。在小数据集上,有时会观察到负的特征重要性,意味着在某些情况下,打乱数据可能导致预测更准确,这通常是因为随机性。为了减小随机性的影响,可以多次重复此过程。

特征重要性排序–Permutation Importance

参考:Permutation Importance | Kaggle

相比于其他衡量特征重要性的方法,Permutation Importance的优点:

  • 计算量低
  • 广泛使用和容易理解
  • 与我们要测量特征重要性的属性一致

Permutation Importance的计算是在模型训练完成后进行的,即,模型参数不再改变。如果我们将验证集中的单独一列的数据进行打乱,并保持其他列和目标值不变,那么,预测打乱后的验证集的结果会怎么变化?
在这里插入图片描述

上图示例是将第二列的数据进行shaffle,如果模型预测对该列特征的依赖性很大,那么打乱后,预测精度会受到很大的影响。

具体实施流程:

  1. 训练模型
  2. 打乱其中一列的数据,用该数据集进行预测,评估预测精度下降来提现该特征变量的重要性
  3. 将验证数据集还原,并重复第二步,分析其他特征变量

代码示例:

import numpy as np
import pandas 
特征重要性排序机器学习中一个关键的概念,它帮助我们理解模型中哪些特征对预测结果最为重要。以下是一些常见的方法和对应的示例代码,展示了如何在 Python 中实现特征重要性排序。 ### 使用随机森林进行特征重要性排序 随机森林是一种集成学习方法,它可以提供特征重要性的评估。下面是一个使用 `RandomForestRegressor` 的示例: ```python import pandas as pd import matplotlib.pyplot as plt from sklearn.ensemble import RandomForestRegressor # 假设 train_x, train_y, test_x, test_y 已经定义好了 # 创建随机森林回归器实例 rfr = RandomForestRegressor(min_samples_split=6, n_estimators=100) # 训练模型 rfr.fit(train_x, train_y) # 输出模型评分 print(rfr.score(test_x, test_y)) # 将特征重要性转换为 pandas Series 并按重要性排序 feature_important = pd.Series(rfr.feature_importances_, index=housing.feature_names).sort_values(ascending=False) # 绘制条形图显示特征重要性 plt.bar(feature_important.index, feature_important.values) plt.xlabel('Features') plt.ylabel('Importance') plt.title('Feature Importance using Random Forest') plt.xticks(rotation=90) plt.show() ``` ### 使用 XGBoost 进行特征重要性排序 XGBoost 是另一种强大的集成学习方法,同样可以用来评估特征重要性。以下是使用 XGBoost 的示例代码: ```python from xgboost import XGBRegressor # 创建 XGBoost 回归器实例 xgb = XGBRegressor(n_estimators=100) # 训练模型 xgb.fit(train_x, train_y) # 获取特征重要性 feature_importance = pd.Series(xgb.feature_importances_, index=housing.feature_names).sort_values(ascending=False) # 绘制条形图显示特征重要性 plt.figure(figsize=(10, 6)) plt.barh(feature_importance.index, feature_importance.values) plt.xlabel('Importance') plt.ylabel('Features') plt.title('Feature Importance using XGBoost') plt.gca().invert_yaxis() # 为了从高到低显示特征 plt.show() ``` ### 使用 Permutation Importance 进行特征重要性排序 Permutation Importance 是一种通过打乱特征值来评估特征重要性的方法。如果打乱某个特征的值会导致模型性能显著下降,则说明该特征对模型的预测非常重要。以下是使用 Scikit-Learn 的 `permutation_importance` 函数的示例: ```python from sklearn.inspection import permutation_importance # 使用测试集评估特征重要性 result = permutation_importance(rfr, test_x, test_y, n_repeats=10, random_state=42) # 获取重要性得分 importances = result.importances_mean # 将结果转换为 pandas Series 并排序 feature_importance = pd.Series(importances, index=housing.feature_names).sort_values(ascending=False) # 绘制条形图显示特征重要性 plt.figure(figsize=(10, 6)) plt.barh(feature_importance.index, feature_importance.values) plt.xlabel('Importance') plt.ylabel('Features') plt.title('Permutation Importance') plt.gca().invert_yaxis() plt.show() ``` ### 使用 Merit 公式进行特征重要性排序 根据提供的公式,我们可以手动计算特征重要性。这个公式考虑了特征与类别的相关性以及特征之间的相关性。下面是这个公式的实现示例: ```python import numpy as np from scipy.stats import pearsonr from sklearn.preprocessing import StandardScaler def calculate_merit(X, y): k = X.shape[1] X_scaled = StandardScaler().fit_transform(X) y_scaled = StandardScaler().fit_transform(y.reshape(-1, 1)).flatten() # 计算特征与目标的相关性 r_cf = [pearsonr(X_scaled[:, i], y_scaled)[0] for i in range(k)] avg_r_cf = np.mean(r_cf) # 计算特征之间的相关性 r_ff = np.corrcoef(X_scaled, rowvar=False) avg_r_ff = (np.sum(r_ff) - k) / (k * (k - 1)) merit = (k * avg_r_cf) / np.sqrt(k + k * (k - 1) * avg_r_ff) return merit # 假设 X 和 y 已经定义好了 merit_score = calculate_merit(train_x, train_y) print(f'Merit Score: {merit_score}') ``` 这些示例展示了不同的方法来计算特征重要性,并且提供了可视化的方法来展示这些特征重要性。通过这些方法,可以更好地理解哪些特征对于模型的预测能力最为关键,并据此进行特征选择和模型优化。
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值