Python特征分析重要性的常用方法

2023-10-20 05:12

本文主要是介绍Python特征分析重要性的常用方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

特征重要性分析用于了解每个特征(变量或输入)对于做出预测的有用性或价值。目标是确定对模型输出影响最大的最重要的特征,它是机器学习中经常使用的一种方法。

图片

为什么特征重要性分析很重要?

如果有一个包含数十个甚至数百个特征的数据集,每个特征都可能对你的机器学习模型的性能有所贡献。但是并不是所有的特征都是一样的。有些可能是冗余的或不相关的,这会增加建模的复杂性并可能导致过拟合。

特征重要性分析可以识别并关注最具信息量的特征,从而带来以下几个优势:

  • 改进的模型性能

  • 减少过度拟合

  • 更快的训练和推理

  • 增强的可解释性

下面我们深入了解在Python中的一些特性重要性分析的方法。

特征重要性分析方法

1、排列重要性 PermutationImportance

该方法会随机排列每个特征的值,然后监控模型性能下降的程度。如果获得了更大的下降意味着特征更重要

 from sklearn.datasets import load_breast_cancerfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.inspection import permutation_importancefrom sklearn.model_selection import train_test_splitimport matplotlib.pyplot as pltcancer = load_breast_cancer()X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, random_state=1)rf = RandomForestClassifier(n_estimators=100, random_state=1)rf.fit(X_train, y_train)baseline = rf.score(X_test, y_test)result = permutation_importance(rf, X_test, y_test, n_repeats=10, random_state=1, scoring='accuracy')importances = result.importances_mean# Visualize permutation importancesplt.bar(range(len(importances)), importances)plt.xlabel('Feature Index')plt.ylabel('Permutation Importance')plt.show()

图片

2、内置特征重要性(coef_或feature_importances_)

一些模型,如线性回归和随机森林,可以直接输出特征重要性分数。这些显示了每个特征对最终预测的贡献。

 from sklearn.datasets import load_breast_cancerfrom sklearn.ensemble import RandomForestClassifierX, y = load_breast_cancer(return_X_y=True)rf = RandomForestClassifier(n_estimators=100, random_state=1)rf.fit(X, y)importances = rf.feature_importances_# Plot importancesplt.bar(range(X.shape[1]), importances)plt.xlabel('Feature Index')plt.ylabel('Feature Importance')plt.show()

图片

3、Leave-one-out

迭代地每次删除一个特征并评估准确性。

 from sklearn.datasets import load_breast_cancerfrom sklearn.model_selection import train_test_splitfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.metrics import accuracy_scoreimport matplotlib.pyplot as pltimport numpy as np# Load sample dataX, y = load_breast_cancer(return_X_y=True)# Split data into train and test setsX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1)# Train a random forest modelrf = RandomForestClassifier(n_estimators=100, random_state=1)rf.fit(X_train, y_train)# Get baseline accuracy on test database_acc = accuracy_score(y_test, rf.predict(X_test))# Initialize empty list to store importancesimportances = []# Iterate over all columns and remove one at a timefor i in range(X_train.shape[1]):X_temp = np.delete(X_train, i, axis=1)rf.fit(X_temp, y_train)acc = accuracy_score(y_test, rf.predict(np.delete(X_test, i, axis=1)))importances.append(base_acc - acc)# Plot importance scores    plt.bar(range(len(importances)), importances)plt.show()

图片

4、相关性分析

计算各特征与目标变量之间的相关性。相关性越高的特征越重要。

 import pandas as pdfrom sklearn.datasets import load_breast_cancerX, y = load_breast_cancer(return_X_y=True)df = pd.DataFrame(X, columns=range(30))df['y'] = ycorrelations = df.corrwith(df.y).abs()correlations.sort_values(ascending=False, inplace=True)correlations.plot.bar()

图片

5、递归特征消除 Recursive Feature Elimination

递归地删除特征并查看它如何影响模型性能。删除时会导致更大下降的特征更重要。

from sklearn.ensemble import RandomForestClassifierfrom sklearn.feature_selection import RFEimport pandas as pdfrom sklearn.datasets import load_breast_cancerimport matplotlib.pyplot as pltX, y = load_breast_cancer(return_X_y=True)df = pd.DataFrame(X, columns=range(30))df['y'] = yrf = RandomForestClassifier()rfe = RFE(rf, n_features_to_select=10)rfe.fit(X, y)print(rfe.ranking_)
输出为[6 4 11 12 7 11 18 21 8 16 10 3 15 14 19 17 20 13 11 11 12 9 11 5 11]

6、XGBoost特性重要性

计算一个特性用于跨所有树拆分数据的次数。更多的分裂意味着更重要。

 import xgboost as xgbimport pandas as pdfrom sklearn.datasets import load_breast_cancerimport matplotlib.pyplot as pltX, y = load_breast_cancer(return_X_y=True)df = pd.DataFrame(X, columns=range(30))df['y'] = ymodel = xgb.XGBClassifier()model.fit(X, y)importances = model.feature_importances_importances = pd.Series(importances, index=range(X.shape[1]))importances.plot.bar()

图片

7、主成分分析 PCA

对特征进行主成分分析,并查看每个主成分的解释方差比。在前几个组件上具有较高负载的特性更为重要。

 from sklearn.decomposition import PCAimport pandas as pdfrom sklearn.datasets import load_breast_cancerimport matplotlib.pyplot as pltX, y = load_breast_cancer(return_X_y=True)df = pd.DataFrame(X, columns=range(30))df['y'] = ypca = PCA()pca.fit(X)plt.bar(range(pca.n_components_), pca.explained_variance_ratio_)plt.xlabel('PCA components')plt.ylabel('Explained Variance')

图片

8、方差分析 ANOVA

使用f_classif()获得每个特征的方差分析f值。f值越高,表明特征与目标的相关性越强。

 from sklearn.feature_selection import f_classifimport pandas as pdfrom sklearn.datasets import load_breast_cancerimport matplotlib.pyplot as pltX, y = load_breast_cancer(return_X_y=True)df = pd.DataFrame(X, columns=range(30))df['y'] = yfval = f_classif(X, y)fval = pd.Series(fval[0], index=range(X.shape[1]))fval.plot.bar()

图片

9、卡方检验

使用chi2()获得每个特征的卡方统计信息。得分越高的特征越有可能独立于目标。

from sklearn.feature_selection import chi2import pandas as pdfrom sklearn.datasets import load_breast_cancerimport matplotlib.pyplot as pltX, y = load_breast_cancer(return_X_y=True)df = pd.DataFrame(X, columns=range(30))df['y'] = ychi_scores = chi2(X, y)chi_scores = pd.Series(chi_scores[0], index=range(X.shape[1]))chi_scores.plot.bar()

图片

为什么不同的方法会检测到不同的特征?

不同的特征重要性方法有时可以识别出不同的特征是最重要的,这是因为:

1、他们用不同的方式衡量重要性:

有的使用不同特特征进行预测,监控精度下降

像XGBOOST或者回归模型使用内置重要性来进行特征的重要性排列

而PCA着眼于方差解释

2、不同模型有不同模型的方法:

线性模型倾向于线性关系,树模型倾向于非线性有增益的特征

3、交互作用:

有的方法可以获取特征之间的相互左右,而有一些则不行,这就会导致结果的差异

4、不稳定:

使用不同的数据子集,重要性值可能在同一方法的不同运行中有所不同,这是因为数据差异决定的

5、Hyperparameters:

通过调整超参数,如PCA组件或树深度,也会影响结果

所以不同的假设、偏差、数据处理和方法的可变性意味着它们并不总是在最重要的特征上保持一致。

选择特征重要性分析方法的一些最佳实践

  • 尝试多种方法以获得更健壮的视图

  • 聚合结果的集成方法

  • 更多地关注相对顺序,而不是绝对值

  • 差异并不一定意味着有问题,检查差异的原因会对数据和模型有更深入的了解

这篇关于Python特征分析重要性的常用方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/244905

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

常用的jdk下载地址

jdk下载地址 安装方式可以看之前的博客: mac安装jdk oracle 版本:https://www.oracle.com/java/technologies/downloads/ Eclipse Temurin版本:https://adoptium.net/zh-CN/temurin/releases/ 阿里版本: github:https://github.com/

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

浅谈主机加固,六种有效的主机加固方法

在数字化时代,数据的价值不言而喻,但随之而来的安全威胁也日益严峻。从勒索病毒到内部泄露,企业的数据安全面临着前所未有的挑战。为了应对这些挑战,一种全新的主机加固解决方案应运而生。 MCK主机加固解决方案,采用先进的安全容器中间件技术,构建起一套内核级的纵深立体防护体系。这一体系突破了传统安全防护的局限,即使在管理员权限被恶意利用的情况下,也能确保服务器的安全稳定运行。 普适主机加固措施:

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作

webm怎么转换成mp4?这几种方法超多人在用!

webm怎么转换成mp4?WebM作为一种新兴的视频编码格式,近年来逐渐进入大众视野,其背后承载着诸多优势,但同时也伴随着不容忽视的局限性,首要挑战在于其兼容性边界,尽管WebM已广泛适应于众多网站与软件平台,但在特定应用环境或老旧设备上,其兼容难题依旧凸显,为用户体验带来不便,再者,WebM格式的非普适性也体现在编辑流程上,由于它并非行业内的通用标准,编辑过程中可能会遭遇格式不兼容的障碍,导致操

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss