这是我的第277篇原创文章。
一、引言
排列重要性(Permutation Importance)是一种基于模型的方法,用于评估每个特征对模型性能的影响程度。该方法通过随机打乱单个特征的值并观察模型性能的变化,从而确定特征的重要性。如果某个特征对模型性能的影响很大,那么当该特征的值被打乱时,模型的性能会明显下降。排列重要性的计算过程如下:
(1)首先,使用原始数据集训练一个机器学习模型,并记录其性能指标(如准确率、F1 分数等)作为基准性能。
(2)对于每个特征,分别将其值随机打乱,然后使用打乱后的数据集重新评估模型,并记录性能指标。
(3)计算每个特征的重要性得分,该得分通常是基准性能与打乱后性能之间的差异。
(4)特征的重要性得分越高,表示该特征对模型的影响越大。
二、实现过程
2.1 准备数据
data = pd.read_csv(r'dataset.csv')
df = pd.DataFrame(data)
2.2 目标变量和特征变量
target = 'target'
features = df.columns.drop(target)
特征变量如下:
2.3 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(df[features], df[target], test_size=0.2, random_state=0)
X_train如下:
2.4 创建随机森林分类器作为选择器的基模型
model = RandomForestClassifier(n_estimators=50, random_state=42)
2.5 训练模型并进行特征重要性分析
model.fit(X_train, y_train)
result = permutation_importance(model, X_test, y_test, n_repeats=10, random_state=1, scoring='accuracy')
2.6 获取特征排名
# 获取特征排名
feature_ranking = selector.ranking_
# 创建特征排名的DataFrame
ranking_df = pd.DataFrame({'Feature': features, 'Ranking': feature_ranking})
ranking_df如下:
2.7 对特征重要性进行排序
ranking_df = ranking_df.sort_values(by='Ranking')
排序后的 ranking_df如下:
2.8 可视化特征重要性
plt.figure(figsize=(10, 6))
sns.barplot(x='Importance', y='Feature', data=importance_df)
plt.title('Feature Importance')
plt.xlabel('Importance')
plt.ylabel('Feature')
plt.show()
可视化结果如下:
三、小结
-
-
相对简单:实现简单,易于理解和使用。
-
无假设:不依赖于数据分布或特定的模型假设,适用于各种类型的数据和模型。
-
可解释性强:提供直观的特征重要性排序,有助于理解模型预测的原因。
-
计算开销较大:对于大型数据集和复杂模型,计算排列重要性可能会很耗时。
-
忽略特征之间的相关性:该方法独立地评估每个特征的重要性,可能忽略特征之间的相关性对模型性能的影响。
-
对分类器敏感性:不同的分类器可能对排列重要性的计算结果产生不同的影响,因此在选择分类器时需要谨慎考虑。
-
作者简介:
读研期间发表6篇SCI数据挖掘相关论文,现在某研究院从事数据算法相关科研工作,结合自身科研实践经历不定期分享关于Python、机器学习、深度学习、人工智能系列基础知识与应用案例。致力于只做原创,以最简单的方式理解和学习,关注我一起交流成长。需要数据集和源码的小伙伴可以关注底部公众号添加作者微信。