机器学习特征重要性之feature_importances_属性与permutation_importance方法

devtools/2025/1/15 22:49:39/

一、feature_importances_属性

机器学习中,分类和回归算法的 feature_importances_ 属性用于衡量每个特征对模型预测的重要性。这个属性通常在基于树的算法中使用,通过 feature_importances_ 属性,您可以了解哪些特征对模型的预测最为重要,从而可以进行特征选择或特征工程,以提高模型的性能和解释性。

1、决策树

1.1. sklearn.tree.DecisionTreeClassifier

class sklearn.tree.DecisionTreeClassifier(*, criterion='gini', splitter='best', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, class_weight=None, ccp_alpha=0.0, monotonic_cst=None)[source]

1.2. sklearn.tree.DecisionTreeRegressor

class sklearn.tree.DecisionTreeRegressor(*, criterion='squared_error', splitter='best', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, ccp_alpha=0.0, monotonic_cst=None)

1.3. sklearn.tree.ExtraTreeClassifier

class sklearn.tree.ExtraTreeClassifier(*, criterion='gini', splitter='random', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features='sqrt', random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, class_weight=None, ccp_alpha=0.0, monotonic_cst=None)

1.4. sklearn.tree.ExtraTreeRegressor

property feature_importances_

返回标准化后的特征的重要性,又被称为基尼重要性,即通过计算每个特征在决策树的各个节点上对Gini不纯度的减少量来评估特征的重要性。

具体来说,Gini重要性计算步骤如下:

  1. 在构建决策树的过程中,每次选择一个特征进行节点分裂时,计算该特征在该节点上的Gini不纯度减少量。
  2. 将该特征在所有节点上的Gini不纯度减少量累加,得到该特征的总Gini不纯度减少量。
  3. 对所有特征的总Gini不纯度减少量进行归一化处理,使其总和为1。

最终,Gini重要性值越高,表示该特征对分类结果的贡献越大。Gini重要性常用于特征选择和特征工程中,以识别和保留对模型性能影响较大的特征。

2、随机森林和梯度提升

2.1. sklearn.ensemble.RandomForestClassifier

class sklearn.ensemble.RandomForestClassifier(n_estimators=100, *, criterion='gini', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features='sqrt', max_leaf_nodes=None, min_impurity_decrease=0.0, bootstrap=True, oob_score=False, n_jobs=None, random_state=None, verbose=0, warm_start=False, class_weight=None, ccp_alpha=0.0, max_samples=None, monotonic_cst=None)

2.2. sklearn.ensemble.RandomForestRegressor

class sklearn.ensemble.RandomForestRegressor(n_estimators=100, *, criterion='squared_error', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=1.0, max_leaf_nodes=None, min_impurity_decrease=0.0, bootstrap=True, oob_score=False, n_jobs=None, random_state=None, verbose=0, warm_start=False, ccp_alpha=0.0, max_samples=None, monotonic_cst=None)

2.3. sklearn.ensemble.GradientBoostingClassifier

class sklearn.ensemble.GradientBoostingClassifier(*, loss='log_loss', learning_rate=0.1, n_estimators=100, subsample=1.0, criterion='friedman_mse', min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_depth=3, min_impurity_decrease=0.0, init=None, random_state=None, max_features=None, verbose=0, max_leaf_nodes=None, warm_start=False, validation_fraction=0.1, n_iter_no_change=None, tol=0.0001, ccp_alpha=0.0)

2.4. sklearn.ensemble.GradientBoostingRegressor

class sklearn.ensemble.GradientBoostingRegressor(*, loss='squared_error', learning_rate=0.1, n_estimators=100, subsample=1.0, criterion='friedman_mse', min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_depth=3, min_impurity_decrease=0.0, init=None, random_state=None, max_features=None, alpha=0.9, verbose=0, max_leaf_nodes=None, warm_start=False, validation_fraction=0.1, n_iter_no_change=None, tol=0.0001, ccp_alpha=0.0)

property feature_importances_

返回总和为1的特征重要性,除非所有树只有一个根节点。

3、AdaBoost

3.1. sklearn.ensemble.AdaBoostClassifier

class sklearn.ensemble.AdaBoostClassifier(estimator=None, *, n_estimators=50, learning_rate=1.0, algorithm='deprecated', random_state=None)

property feature_importances_

返回值:
feature_importances_:一维数组 (n_features,),The feature importances.

3.2. sklearn.ensemble.AdaBoostRegressor

class sklearn.ensemble.AdaBoostRegressor(estimator=None, *, n_estimators=50, learning_rate=1.0, loss='linear', random_state=None)

property feature_importances_

返回值:
feature_importances_:一维数组 (n_features,),The feature importances.

4、XGBoost

4.1. python/python_api.html" rel="nofollow">xgboost.XGBClassifier

classxgboost.XGBClassifier(*, importance_type='total_gain', objective='binary:logistic', **kwargs)

参数:

  • importance_type: 特征重要性的类型,关系到 feature_importances_属性:
    - 树模型:可选 “gain”, “weight”, “cover”, “total_gain” 或 “total_cover”.
    - 线性模型:进可选 “weight” .

属性:propertyfeature_importances_

  • 返回值取决于importance_type参数:
    - 一维数组[n_features],代表每个特征的重要性
    - 线性模型:二维数组(n_features, n_classes),代表每个特征在每个类别上的重要性

4.2. python/python_api.html" rel="nofollow">xgboost.XGBRegressor

classxgboost.XGBRegressor(*,  importance_type='total_gain', objective='reg:squarederror', **kwargs)

参数与属性相关内容同上

5、LightGBM

5.1. pythonapi/lightgbm.LGBMClassifier.html" rel="nofollow">lightgbm.LGBMClassifier

classlightgbm.LGBMClassifier(boosting_type='gbdt', num_leaves=31, max_depth=-1, learning_rate=0.1, n_estimators=100, subsample_for_bin=200000, objective=None, class_weight=None, min_split_gain=0.0, min_child_weight=0.001, min_child_samples=20, subsample=1.0, subsample_freq=0, colsample_bytree=1.0, reg_alpha=0.0, reg_lambda=0.0, random_state=None, n_jobs=None, importance_type='split', **kwargs)

参数:

  • importance_type(str, optional (default=‘split’)): 关系到 feature_importances_属性的输出:
    - ‘split’:返回结果包含特征使用的次数
    - ‘gain’:返回结果包含特征分裂时的总增益

属性:property feature_importances_

  • 返回特征重要性,值越高,特征越重要:
    - 一维数组[n_features],代表每个特征的重要性

5.2. pythonapi/lightgbm.LGBMRegressor.html" rel="nofollow">lightgbm.LGBMRegressor

classlightgbm.LGBMRegressor(boosting_type='gbdt', num_leaves=31, max_depth=-1, learning_rate=0.1, n_estimators=100, subsample_for_bin=200000, objective=None, class_weight=None, min_split_gain=0.0, min_child_weight=0.001, min_child_samples=20, subsample=1.0, subsample_freq=0, colsample_bytree=1.0, reg_alpha=0.0, reg_lambda=0.0, random_state=None, n_jobs=None, importance_type='split', **kwargs)

参数与属性相关内容同上

二、permutation_importance方法

sklearn.inspection.permutation_importance

-评估特征的重要性,且模型已经过训练,即模型已调用fit(X, y)。
-由参数scoring指定评估度量方式;打乱特征列的值,打乱次数由参数n_repeats指定;评估特征值打乱前后的scoring度量结果的差异,即表示该特征的重要程度。

scoring评估指标可参考博客:分类、聚类与回归的评价指标

sklearn.inspection.permutation_importance(estimator, X, y, *, scoring=None, n_repeats=5, n_jobs=None, random_state=None, sample_weight=None, max_samples=1.0)

参数:

  • estimator:已经训练好的模型
  • X:用于计算特征重要性的输入数据。
  • y:目标值。
  • scoring:评估指标,默认为 None,使用模型的默认评分方法。
  • n_repeats:打乱特征的次数,默认为 5。

返回值:

  • importances_mean:每个特征基于n_repeats的重要性均值。
  • importances_std:每个特征基于n_repeats的的重要性标准差。
  • importances:每次打乱后特征的重要性。为二维数组,表示每个特征每次打乱后的重要性。

三、小结

  1. feature_importances_是一些基于树的模型自带的一个属性,用于衡量每个特征对模型预测结果的重要性。它通常通过计算每个特征在树结构中的分裂点上所带来的信息增益来确定特征的重要性。
  2. permutation_importance是一种模型无关的方法,通过打乱特征的值来评估特征的重要性。具体来说,它通过打乱某个特征的值并观察模型性能的变化来确定该特征的重要性。如果打乱某个特征后模型性能显著下降,则说明该特征对模型非常重要。
魔心依赖性计算方式解释性
feature_importances_仅适用于一些特定的模型(如基于树的模型)基于模型内部的机制(如信息增益)结果依赖于模型的具体实现,可能不容易解释
permutation_importance方法是模型无关的,可以用于任何模型通过打乱特征值并观察模型性能变化来计算结果更直观,因为它直接反映了特征对模型性能的影响

http://www.ppmy.cn/devtools/150350.html

相关文章

算法(二)——一维差分、等差数列差分

文章目录 一维差分、等差数列差分一维差分例题:航班预订统计 等差数列差分例题:三步必杀例题:Lycanthropy 一维差分、等差数列差分 一维差分 差分解决的是 区间修改(更新)问题,特别是多次区间修改问题&…

Scala语言的网络编程

Scala语言的网络编程 引言 网络编程是指通过网络进行数据通信的程序设计。随着互联网的飞速发展,网络编程已经成为现代应用开发中不可或缺的一部分。在众多编程语言中,Scala凭借其强大的功能与灵活性逐渐受到开发者的青睐。由于其兼容Java的特性&#…

TCP__滑动窗口__拥塞控制

目录 1. 滑动窗口1.1 滑动窗口在哪里?1.2 如何理解滑动窗口1.3 滑动窗口的大小会变化吗?1.4 其它问题 2. 拥塞控制2.1 拥塞避免算法2.1.1 怎么理解拥塞窗口2.1.2 避免拥塞算法(慢启动)的思想2.1.3 慢启动的阈值2.1.4 总结&#xf…

iOS - Method Swizzling

让我详细总结一下 Method Swizzling 的使用和注意事项: 1. 基本实现 // 基本的 Method Swizzling 实现 implementation UIViewController (Tracking) (void)load {static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{// 1. 获取原始方法和替换方法…

《AI模型格局演变:Claude、Gemini Flash与OpenAI的技术角力》

Anthropic的Claude模型在通用聊天模型中表现优异,但在市场份额上仍落后于OpenAI Anthropic的Claude模型在通用聊天模型中的表现优异,主要体现在以下几个方面: 1. 技术优势 性能表现: Claude模型在处理复杂任务(如编程、自然语言…

基于django中医药数据可视化平台(源码+lw+部署文档+讲解),源码可白嫖!

摘要 时代在飞速进步,每个行业都在努力发展现在先进技术,通过这些先进的技术来提高自己的水平和优势,中医药管理平台当然不能排除在外。中医药数据可视化平台是在实际应用和软件工程的开发原理之上,运用Python语言、ECharts技术、…

C#进阶2-多线程(原始版)

C#进阶2-多线程 文章目录 C#进阶2-多线程多线程初体验等待AsyncWaitHandleIsCompleted,EndInvoke 其他本线程类Task操作 并发问题 多线程初体验 它允许程序在同一时间执行多个任务,从而提高程序的性能和响应速度 public Form1(){InitializeComponent();}private vo…

【“软件工程”基础概念学习】

基础和相关概念 英文:Software Engineering 软:物体内部的组织疏松,受外力作用后容易改变形状软件: 计算机系统的组成部分,是指挥计算机进行计算、判断、处理信息的程序系统。通常分为系统软件和应用软件。借指某项活…