Python中进行特征重要性分析的8个常用方法

news2025/1/4 19:42:03

更多资料获取

📚 个人网站:ipengtao.com


在机器学习和数据科学领域,理解特征在模型中的重要性对于构建准确且可靠的预测模型至关重要。Python提供了多种强大的工具和技术,能够探索特征重要性的各个方面。

本文将详细介绍8种常用的方法,涵盖了基于决策树、集成学习模型以及统计学方法的特征重要性分析。从决策树模型到SHAP值,将深入探讨每种方法的原理和示例代码,帮助全面了解如何评估特征的重要性。通过综合运用这些技术,将能更好地理解特征对模型预测的贡献,为提升模型性能和解释模型决策提供有力支持。

决策树模型方法

1. 特征重要性分析

决策树模型通过特征分裂过程来评估特征的重要性。可以使用DecisionTreeClassifierDecisionTreeRegressor来获得特征的重要性评分。

from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt

# 加载数据集
data = load_iris()
X = data.data
y = data.target

# 构建决策树模型
model = DecisionTreeClassifier()
model.fit(X, y)

# 获取特征重要性
importance = model.feature_importances_

# 特征重要性可视化
plt.barh(range(X.shape[1]), importance, align='center')
plt.yticks(range(X.shape[1]), data.feature_names)
plt.xlabel('Feature Importance')
plt.ylabel('Features')
plt.show()

2. 使用Random Forest进行特征重要性分析

Random Forest是集成学习模型,它可以提供更为稳健的特征重要性评分。

from sklearn.ensemble import RandomForestClassifier

# 构建Random Forest模型
rf_model = RandomForestClassifier()
rf_model.fit(X, y)

# 获取特征重要性
importance_rf = rf_model.feature_importances_

# 可视化Random Forest的特征重要性
plt.barh(range(X.shape[1]), importance_rf, align='center')
plt.yticks(range(X.shape[1]), data.feature_names)
plt.xlabel('Feature Importance')
plt.ylabel('Features')
plt.show()

统计学方法

3. 使用Pearson相关系数

Pearson相关系数可以衡量特征之间的线性关系。

import pandas as pd

# 创建DataFrame
df = pd.DataFrame(data.data, columns=data.feature_names)
df['target'] = data.target

# 计算Pearson相关系数
correlation = df.corr()

# 可视化相关系数矩阵
import seaborn as sns

plt.figure(figsize=(10, 8))
sns.heatmap(correlation, annot=True, cmap='coolwarm')
plt.title('Pearson Correlation Matrix')
plt.show()

4. 使用互信息

互信息衡量的是两个变量之间的不确定性减少程度。

from sklearn.feature_selection import mutual_info_classif

# 计算互信息
mi = mutual_info_classif(X, y)

# 可视化互信息
plt.barh(range(X.shape[1]), mi, align='center')
plt.yticks(range(X.shape[1]), data.feature_names)
plt.xlabel('Mutual Information')
plt.ylabel('Features')
plt.show()

统计学方法与模型解释性

5. 使用SHAP值(SHapley Additive exPlanations)

SHAP是一种现代化的、模型无关的特征重要性评估方法。它可以为模型预测结果解释每个特征的贡献度。

import shap

# 创建并训练一个模型(例如XGBoost)
model = xgb.XGBClassifier()
model.fit(X, y)

# 创建一个SHAP解释器
explainer = shap.Explainer(model)
shap_values = explainer.shap_values(X)

# 可视化SHAP值
shap.summary_plot(shap_values, X, feature_names=data.feature_names, plot_type="bar")

6. Permutation Feature Importance

该方法通过随机地打乱特征值,观察这种打乱对模型性能的影响来计算特征重要性。

from sklearn.inspection import permutation_importance

# 计算Permutation Feature Importance
result = permutation_importance(model, X, y, n_repeats=10, random_state=42)

# 可视化Permutation Feature Importance
sorted_idx = result.importances_mean.argsort()
plt.barh(range(X.shape[1]), result.importances_mean[sorted_idx], align='center')
plt.yticks(range(X.shape[1]), data.feature_names[sorted_idx])
plt.xlabel('Permutation Importance')
plt.ylabel('Features')
plt.show()

其他方法

7. 使用GBDT(Gradient Boosting Decision Tree)

GBDT可以提供各个特征在模型中的分裂度。

from sklearn.ensemble import GradientBoostingClassifier

# 构建GBDT模型
gbdt_model = GradientBoostingClassifier()
gbdt_model.fit(X, y)

# 获取特征重要性
importance_gbdt = gbdt_model.feature_importances_

# 可视化GBDT的特征重要性
plt.barh(range(X.shape[1]), importance_gbdt, align='center')
plt.yticks(range(X.shape[1]), data.feature_names)
plt.xlabel('Feature Importance')
plt.ylabel('Features')
plt.show()

8. 使用XGBoost

XGBoost是一种梯度提升算法,也可以用于特征重要性分析。

import xgboost as xgb

# 转换数据为DMatrix格式
dtrain = xgb.DMatrix(X, label=y)

# 定义参数
param = {'objective': 'multi:softmax', 'num_class': 3}

# 训练模型
num_round = 10
xgb_model = xgb.train(param, dtrain, num_round)

# 可视化特征重要性
xgb.plot_importance(xgb_model)
plt.show()

总结

这些方法为理解特征在模型中的重要性提供了多种视角。决策树和集成学习模型提供了直接的特征重要性分析,而统计学方法(如相关系数、互信息)可用于了解特征之间的关系。同时,SHAP值和Permutation Feature Importance提供了模型预测的个性化解释和对特征重要性的直观理解。

综合使用这些方法可以更全面地评估特征的重要性,并且为模型解释提供更深入的认识。在实际应用中,根据数据集的特性和所使用的模型,选择适当的方法来进行特征重要性分析是至关重要的。

这些方法和示例代码将帮助你更好地理解特征重要性分析,并为你的机器学习项目提供有力支持。


Python学习路线

在这里插入图片描述

更多资料获取

📚 个人网站:ipengtao.com

如果还想要领取更多更丰富的资料,可以点击文章下方名片,回复【优质资料】,即可获取 全方位学习资料包。

在这里插入图片描述
点击文章下方链接卡片,回复【优质资料】,可直接领取资料大礼包。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1275313.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

长沙上市公司董秘联谊会首次活动,到底讲了什么?

“首场活动就这么提振士气,一场干货满满的头脑风暴,真的太荣幸加入这个集体了。”这是可孚医疗科技股份有限公司副总裁、董秘薛小桥参加长沙上市公司董秘联谊会首次活动后的感慨。 11月29日,长沙上市公司董秘联谊会首场活动在爱尔眼科全球总…

【Excel】WPS快速按某列查重数据

查重值 excel列几条数据肉眼可见,如何千万级别数据查验呢?平时很少用,记录一下: 先框选列要验证的数据,然后:开始->条件格式->突出显示单元格规则->重复值 效果

Service的双向跨进程通信

一、客户端向服务端通信。 1、创建AIDL文件,用于生成跨进程通信代码。 // ITestService.aidl package com.example.servicetest;interface ITestService {void sayHello(); } 2、创建服务端Service,添加如下代码。 public class TestService extends…

基于springboot+vue的点餐系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

java+springboot学生宿舍公寓管理系统xueshenggongy

经过查阅资料和调查统计发现,高校学生宿舍管理工作变得越来越繁重和琐碎,如在学生住宿安排(特别是新生住宿安排)、宿舍大幅调换、公共设施统计维护、宿舍杂费统计收取、宿舍卫生管理统计、出入登记记录等各个方法存在着大量问题和…

【Java8系列06】Java8数据计算

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

设计模式之美学习笔记-单例模式-为什么说支持懒加载的双重检测不比饿汉式更优?

单例设计模式:一个类只允许创建一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式。 实战案例一:处理资源访问冲突 我们先来看第一个例子。在这个例子…

近期知识点随笔

菜单查询(编写权限时的细节) 菜单查询list为了侧边框展示更完整(不报空指针) 登录时(用户名)查询出多个结果(保证用户名唯一) 文件上传 前端 对权限与菜单绑定的修改(实…

LV.12 D21 PWM实验 学习笔记

一、PWD简介 1.1 蜂鸣器工作原理 有源蜂鸣器 有源蜂鸣器只要接上额定电源就可以发出声音 无源蜂鸣器 无源蜂鸣器利用电磁感应原理,为音圈接入交变电流后形成的电磁铁与永磁铁相吸或相斥而推动振膜发声 1.2 使用GPIO控制 while(1) { GPX2.DATGPX2.D…

基于SSM实现的图书管理系统

一、系统架构 前端:jsp | js | css | jquery | layui 后端:spring | springmvc | mybatis 环境:jdk1.7 | mysql | maven | tomcat 二、代码及数据库 三、功能介绍 01. 登录页 02. 首页 03. 借阅管理 04. 图书管理 05. 读者管理 06. 类型管理…

数据库-MySQL之数据库必知必会17-21章

第17章 组 合 查 询 创建组合查询 可用UNION操作符来组合数条SQL查询。利用UNION,可给出多条SELECT语句,将它们的结果组合成单个结果集。 **例子:**假如需要价格小于等于5的所有物品的一个列表,而且还想包括供应商1001和1002生产…

树莓派系列教程:单总线控制DS18B20

DS18B20是一个比较常用的温度传感器,采用单总线控制,以前用单片机编程控制时严格按照单总线的时序控制,今天来看看在linux系统下如何控制DS18B20,体验一下在linux世界,一切都是文件。 一、修改配置文件 1sudo vi /boot/config.tx…

JavaScript WebAPI(三)(详解)

这次介绍一下webAPI中的一些知识: 回调函数 回调函数是指 如果将函数A做为参数传递给函数B时,我们称函数A为回调函数 例如: // 立即执行函数中传递的函数是一个回调函数 (function(){ console.log("我是回调函数") })(); // …

CSS技巧:从高度0过渡到自动高度

本文翻译自 CSS trick: transition from height 0 to auto!,作者:Francesco Vetere, 略有删改。 如果你在CSS上花了足够长的时间,很可能你曾尝试过从height:0到auto的平滑过渡。。。却发现它不起作用!😢 ️…

USB Type-C的基本原理

1 USB Type-C的基本原理 1.1 基本特性 Figure 1-1 USB Type-C接头外形 USB Type-C(简称USB-C)的基本特性: 1. 接口插座的尺寸与原来的Micro-USB规格一样小,约为8.3mm X 2.5mm 2. 可承受1万次反复插拔 3. 支持正反均可插入的“正反…

力扣6.N字形变换

题目描述 思路 模拟轨迹,每当行数i到最顶(0),或者最底(numRows)的时候,就会反方向走。 用flag来标记方向,在题解里看到,真的很巧妙5555! 代码 class Solu…

Tomcat-安装与基础配置

Tomcat-安装与基础配置 下载 下载Tomcat9 选择适合自己系统位数的版本下载 Tomcat-目录 bin: 存放启动与关闭Tomcat的脚本文件conf: 存放Tomcat的各种配置文件,其中最主要的配置文件就是server.xml【如果端口冲突,就可以将 8080 端口修改】lib: 存放Tomcat运行时所需的j…

2023-12-01 AIGC-自动生成ppt的AI工具

摘要: 2023-12-01 AIGC-自动生成ppt-记录 自动生成ppt: BoardMix boardmix 一键生成ppt boardmix是一款基于云的ai设计软件,允许创建用于各种目的的自定义演示文稿、ai绘画,ai生成思维导图等。以下是它的一些功能: 可定制的模板 - 它有一个…

基于Web邮箱的邮件系统

题目: 基于web的邮件收发系统设计与实现 摘 要 计算机的应用已经越来越广泛,它从产生到完善已经差不多有50年左右的历史,更新换代速度非常快,在人们生活、工作中都发挥了不可替代的作用,几乎所有行业都离不开它,已经成…

校招笔试-Windows开发工程师客观题合集解析

360公司-2019校招笔试-Windows开发工程师客观题合集 API无法实现进程间数据的相互传递是PostMessage 2.以下代码执行后&#xff0c;it的数据为&#xff08;异常&#xff09; std::list<int> temp; std::list<int>::iterator it temp.begin(); it --it; 3.API…