【机器学习】feature_importances_ 参数源码解析

本文深入解析了sklearn中feature_importances_属性的来源和计算逻辑,主要关注于决策树。通过源码分析,发现该属性基于每个决策树节点的不纯度(如基尼指数)和加权样本数。以具体实例验证,展示了如何计算特征的重要性,并得出特征对模型贡献的权重。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在用sklearn的时候经常用到feature_importances_ 来做特征筛选,那这个属性到底是啥呢。

分析源码发现来源于每个base_estimator的决策树的
feature_importances_


 

由此发现计算逻辑来源于cython文件,这个文件可以在其github上查看源代码
在这里插入图片描述
而在DecisionTreeRegressor和DecisionTreeClassifier的对feature_importances_定义中


这段代码看起来是在Python中操作特征重要性,其中`clf.feature_importances_`是一个向量,表示特征在模型中的重要程度。`feature_name`可能是特征列名列表。为了完成这个操作,你需要导入两个主要库: 1. `sklearn`:这是Scikit-Learn库,用于各种机器学习任务,包括计算特征重要性。它包含了分类器(`clf`)和其他相关的机器学习工具。 ```python from sklearn.ensemble import RandomForestClassifier # 或者其他分类器,比如GradientBoostingClassifier等 from sklearn.datasets import load_iris # 如果是基于某个数据集,可能还需要这个库 import numpy as np # 有时候会用到numpy做数组操作 # 加载数据 iris = load_iris() X, y = iris.data, iris.target clf = RandomForestClassifier() # 初始化分类器 ``` 2. 可能还需要用到`pandas`来处理特征名称,如果它们是DataFrame的数据行名,因为`zip`函数需要可迭代的对象,`pandas`的`DataFrame.columns`属性就非常合适。 ```python import pandas as pd if isinstance(feature_name, pd.DataFrame.columns): # 判断是否是DataFrame的列名 feature_name = list(feature_name) ``` 完整的代码可能长这样: ```python from sklearn.ensemble import RandomForestClassifier import numpy as np import pandas as pd # ... (加载数据和初始化分类器) feature_importances_ = clf.feature_importances_ feature_names = iris.feature_names # 如果feature_name来自DataFrame的列名 match = list(zip(feature_names, feature_importances_)) print(match) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

网络毒刘

授人玫瑰,手有余香。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值