Python中如何查看Scikit-learn随机森林的特征重要性_调用feature_importances_
时间:2026-05-24 22:05:18 203浏览 收藏
哈喽!今天心血来潮给大家带来了《Python中如何查看Scikit-learn随机森林的特征重要性_调用feature_importances_》,想必大家应该对文章都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习文章,千万别错过这篇文章~希望能帮助到你!
训练后直接访问 feature_importances_ 属性即可获取归一化特征重要性,其值和为1.0、长度等于特征数,需确保已调用 fit() 且结合原始列名排序解读。

训练后直接访问 feature_importances_ 属性
Scikit-learn 的 RandomForestClassifier 和 RandomForestRegressor 在调用 fit() 后会自动计算并存储特征重要性,存放在 feature_importances_ 这个一维 numpy.ndarray 中。它不依赖额外参数或方法调用,只要模型已拟合,该属性就可用。
常见错误是:未调用 fit() 就尝试访问,会报 AttributeError: 'RandomForestClassifier' object has no attribute 'feature_importances_';或者在 fit() 前打印该属性,得到空值。
- 确保模型已完成训练:
rf.fit(X_train, y_train) feature_importances_是只读属性,不能手动赋值- 长度恒等于输入特征数:
len(rf.feature_importances_) == X_train.shape[1]
特征重要性数值含义与归一化行为
feature_importances_ 返回的是“基于不纯度减少的归一化重要性”,即所有值之和为 1.0(浮点精度范围内)。它不是原始 Gini 减少总和,也不是 p 值或统计显著性指标,仅反映该特征在所有树中平均贡献的相对权重。
注意:这个归一化是 scikit-learn 内部自动完成的,无需手动除以总和;但若你对比多个模型(如不同 n_estimators),其绝对值不可跨模型比较——因为单棵树的分裂增益尺度会随树结构变化而浮动。
- 值越接近 0 表示该特征对当前模型预测几乎无区分作用
- 即使某特征在业务上关键,若数据中它与标签无统计关联,
feature_importances_仍可能极低 - 类别型特征需先用
OneHotEncoder或OrdinalEncoder处理,否则会被当作连续变量误算
把重要性映射回原始特征名并排序
原始 feature_importances_ 只是数字数组,没有列名信息。要可读性强的结果,必须结合你传入训练的 X_train 的列名(如 pandas DataFrame 的 .columns)手动配对。
容易踩的坑是:用 np.argsort() 时方向弄反(默认升序),导致输出的是最不重要的排前面;或忽略 DataFrame 列顺序是否与 fit() 时一致(尤其做过 drop()、reindex() 等操作后)。
import numpy as np
import pandas as pd
<h1>假设 X_train 是 DataFrame,有列名</h1><p>importance_df = pd.DataFrame({
'feature': X_train.columns,
'importance': rf.feature<em>importances</em>
}).sort_values('importance', ascending=False)</p><p>print(importance_df.head(5))</p>多输出或多任务场景下不支持 feature_importances_
如果你用的是 MultiOutputRegressor 或 MultiOutputClassifier 包裹随机森林,内层的 feature_importances_ 不会自动暴露到外层对象上。此时访问 multi_rf.feature_importances_ 会报错 AttributeError。
真正起作用的是底层每个单输出模型的 feature_importances_,但它们彼此独立、不可直接合并——因为每个子模型可能基于不同目标优化,重要性无法简单加总或平均。
- 必须显式遍历
multi_rf.estimators_列表获取各子模型 - 各子模型的
feature_importances_长度相同,但数值分布可能差异极大 - 没有官方推荐的聚合方式;强行取均值会掩盖任务特异性,慎用
实际应用中,最容易被忽略的是:特征重要性高度依赖训练数据分布和超参(尤其是 max_features)。同一份数据,max_features='sqrt' 和 'log2' 下排前三位的特征可能完全不同。别把它当金标准,而是作为初步筛选线索。
今天关于《Python中如何查看Scikit-learn随机森林的特征重要性_调用feature_importances_》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
311 收藏
-
289 收藏
-
259 收藏
-
203 收藏
-
364 收藏
-
266 收藏
-
498 收藏
-
385 收藏
-
249 收藏
-
306 收藏
-
486 收藏
-
379 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 485次学习