讲师中心 微信公众号
AI工具推荐 视频效率加速

Python怎么做基于树模型的特征重要性评估_RandomForest提取特征重要性

陌杰同学_5904

陌杰同学_5904

发布时间:2026-05-03 10:29:04

|

657人浏览过

|

来源于php中文网

原创

RandomForest.feature_importances_ 返回基于平均不纯度减少量(MDI)计算的各特征相对重要性得分,为未归一化的numpy数组;需模型fit后调用,注意Pipeline中需从named_steps获取,且X_train须为二维数组。

python怎么做基于树模型的特征重要性评估_randomforest提取特征重要性

RandomForest.feature_importances_ 返回的是什么

feature_importances_ 是训练完成的 RandomForestClassifier 或 RandomForestRegressor 实例的一个属性,返回一个 numpy.ndarray,每个元素对应一个输入特征的重要性得分。这个值不是统计显著性,也不是归一化后的概率,而是基于「平均不纯度减少量」(mean decrease in impurity, MDI)计算出来的相对贡献度:树在某个特征上做分裂时,加权后的基尼不纯度(分类)或均方误差(回归)下降越多,该特征得分越高。

注意它不反映特征对预测结果的实际影响方向(正/负),也不处理特征间相关性——如果两个高度相关的特征同时存在,它们的 feature_importances_ 可能都被稀释,总和却接近 1。

直接调用 feature_importances_ 的常见错误

最常踩的坑是:模型没 fit 就访问 feature_importances_,会报 AttributeError: 'RandomForestClassifier' object has no attribute 'feature_importances_';或者用了 fit_transform()(比如 Pipeline 中套了 StandardScaler),但忘记确认最终 estimator 是否真的被训练过。

  • 必须确保调用前已执行 rf.fit(X_train, y_train)
  • 如果用 sklearn.pipeline.Pipeline,得从 pipeline.named_steps['randomforest'].feature_importances_ 获取,不能直接写 pipeline.feature_importances_
  • 传入 fit() 的 X_train 必须是二维数组(shape = (n_samples, n_features)),一维或 Series 会触发 ValueError: Expected 2D array, got 1D array instead
  • 使用 oob_score=True 并不会改变 feature_importances_ 的计算逻辑,它仍基于所有树的分裂增益,不是 OOB 样本上的表现变化

怎么让重要性更可信:Permutation Importance 补充验证

feature_importances_ 容易高估冗余特征、低估类别不平衡下的少数类相关特征。更稳健的做法是用 sklearn.inspection.permutation_importance 做后验验证——它通过随机打乱单个特征列,观察模型性能(如 accuracy、r2_score)下降多少来衡量重要性。

立即学习“Python免费学习笔记(深入)”;

Li Python Sec Check
Li Python Sec Check

Python 安全规范检查工具:基于 CloudBase 规范、腾讯安全指南,LLM 智能分析(默认禁用,优先本地执行)

下载

示例关键步骤:

from sklearn.inspection import permutation_importance
perm_imp = permutation_importance(rf, X_val, y_val, n_repeats=5, random_state=42, scoring='accuracy')
# perm_imp.importances_mean 是每个特征的平均下降值,可直接排序对比

注意:permutation_importance 计算成本高(要重跑模型预测多次),只建议在验证集或小样本上运行;它依赖评估指标选择,scoring 必须与任务一致(分类用 'f1' 或 'roc_auc',别默认用 'accuracy' 在极度不平衡时)。

可视化与特征筛选的实操要点

画重要性图本身很简单,但容易忽略坐标轴含义和筛选边界。不要只看 top-5,要结合标准差(feature_importances_.std())判断稳定性;对低重要性但业务强相关的特征,别直接丢弃。

  • 用 pd.Series(rf.feature_importances_, index=feature_names).sort_values(ascending=False) 快速排序并带名输出
  • 绘图时建议用 seaborn.barplot 或 matplotlib.pyplot.barh,横轴设为重要性值,纵轴为特征名,避免堆叠或 3D 效果干扰判断
  • 若要做自动筛选,别硬设阈值如 > 0.01;可用 np.percentile(rf.feature_importances_, 75) 取上四分位数作为动态基准
  • 多棵树下 feature_importances_ 方差大?说明数据噪声高或树数量不足,可尝试增大 n_estimators=200 再试

真正难的不是取出来,而是解释为什么某个特征排第 3 却业务上最关键——这时候得回头检查数据泄露、目标编码污染、或特征工程是否掩盖了原始信号。

热门AI工具

更多
立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

1671

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

4144

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1669

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

23957

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2927

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2967

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

1143

2023.08.11

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

596

2023.08.10

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

80

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn