Python可视化 | 计算特征重要性的3种必备方法

Python中计算特征重要性的3种必备方法

任何有志成为数据科学家的人都必须知道的内容

如何找到数据集中最重要的特征?有很多技巧,本文将教您三种任何数据科学家都应该知道的方法。

阅读后,您将知道如何仅使用几行代码来计算Python中的特征重要性。您还将学到这些技巧的前提条件,这对于使它们正常工作至关重要。

您可以在此文章的笔记本中下载笔记本。

文章的结构如下:

数据集加载和准备

方法1 — 从系数获取重要性

方法2 — 从基于树的模型获取重要性

方法3 — 从PCA载荷得分获取重要性

结论 数据集加载和准备

让我们尽量少花时间在这里。您将使用Scikit-Learn内置的乳腺癌数据集。您还需要_Numpy、Pandas和Matplotlib_用于各种分析和可视化目的。

以下代码片段显示了如何导入库并加载数据集:

# 导入库   import numpy as np   import pandas as pd   import matplotlib.pyplot as plt   from sklearn.datasets import load_breast_cancer   

数据集现在不是最方便的格式。您将大部分时间使用Pandas数据帧,所以让我们快速将其转换为一个数据帧。以下代码片段将预测变量和目标变量连接到一个数据帧中:

# 加载数据集   data = load_breast_cancer()   df = pd.DataFrame(data.data, columns=data.feature_names)   df['target'] = data.target   

调用head()将产生以下输出:

[乳腺癌数据集的前几行]

简而言之,有30个预测变量和一个目标变量。所有的值都是数值的,没有缺失值。唯一明显的问题是规模。只需看看平均面积和平均光滑度列的差异 — 这可能导致模型效果不佳。

在解决规模问题之前,您还需要执行训练/测试拆分。

以下代码片段显示了如何进行训练/测试拆分并使用StandardScaler类来缩放预测变量:

# 数据拆分   from sklearn.model_selection import train_test_split   from sklearn.preprocessing import StandardScaler      X = df.drop('target', axis=1)   y = df['target']      X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)      # 数据缩放   scaler = StandardScaler()   X_train = scaler.fit_transform(X_train)   X_test = scaler.transform(X_test)   

这就是您需要开始获取特征重要性的全部内容。接下来,让我们开始做到这一点。

方法1 — 从系数获取重要性检查特征重要性最简单的方法之一是检查模型的系数。例如,线性回归和逻辑回归都可以归结为一个方程,其中为每个输入值分配了系数(重要性)。

简单来说,如果分配的系数是一个较大的(负数或正数)数字,它对预测有一定的影响。相反,如果系数为零,则不会对预测产生任何影响。

简单的逻辑,但让我们来测试一下。我们有一个分类数据集,所以逻辑回归是一个适合的算法。在模型拟合后,系数存储在coef_属性中。

以下代码片段训练了逻辑回归模型,创建了一个数据帧,其中存储了属性及其相应系数,然后将该数据帧按系数降序排序:

# 训练逻辑回归模型   from sklearn.linear_model import LogisticRegression      lr = LogisticRegression()   lr.fit(X_train, y_train)      # 获取系数   coefficients = lr.coef_[0]   feature_names = X.columns      # 创建包含特征及其系数的数据帧   feature_importance = pd.DataFrame({'feature': feature_names, 'importance': coefficients})      # 按重要性降序排序   feature_importance = feature_importance.sort_values(by='importance', ascending=False)   

这很简单,不是吗?接下来,让我们通过视觉方式来检查系数。以下代码片段从系数制作一个条形图:

# 创建特征重要性的条形图   plt.figure(figsize=(12, 6))   plt.barh(feature_importance['feature'], feature_importance['importance'])   plt.xlabel('Importance')   plt.ylabel('Feature')   plt.title('Feature Importances as Logistic Regression Coefficients')   plt.show()   

以下是相应的可视化效果:

[逻辑回归系数作为特征重要性]

这就是这个简单技术的全部内容。一个要记住的要点是,系数越大(无论是正数还是负数),它对预测的影响就越大。

方法2 — 从基于树的模型获取重要性

在训练任何基于树的模型之后,您将可以访问_feature_importances__属性。这是您可以获取特征重要性的最快方法之一。

以下代码片段显示了如何在训练数据上导入并拟合_XGBClassifier_模型。重要性的获取方式与之前类似,存储到一个数据帧中,然后按重要性排序:

# 导入XGBClassifier模型   from xgboost import XGBClassifier      xgb = XGBClassifier()   xgb.fit(X_train, y_train)      # 获取特征重要性   importances = xgb.feature_importances_      # 创建包含特征及其重要性的数据帧   feature_importance = pd.DataFrame({'feature': feature_names, 'importance': importances})      # 按重要性降序排序   feature_importance = feature_importance.sort_values(by='importance', ascending=False)   

您可以通过绘制条形图来可视化重要性。以下是如何制作一个:

# 创建从基于树的模型获取的特征重要性的条形图   plt.figure(figsize=(12, 6))   plt.barh(feature_importance['feature'], feature_importance['importance'])   plt.xlabel('Importance')   plt.ylabel('Feature')   plt.title('Feature Importances obtained from a tree-based model')   plt.show()   

以下是相应的可视化效果:

[从基于树的模型获取的特征重要性]

正如之前提到的,以这种方式获取重要性是轻松的,但结果可能会有点偏倚。这种方法的倾向性是增加连续特征或高基数分类变量的重要性[1]。确保首先进行适当的准备和转换,然后您应该可以继续进行。

方法3 — 从PCA载荷得分获取重要性

主成分分析 PCA 是一种出色的降维技术,也可以用于确定特征重要性。

PCA不会直接显示您最重要的特征,就像前两种方法所做的那样。相反,它将返回N个主要成分,其中N等于原始特征的数量。

如果您对PCA有点生疏,可以在本文末尾找到一篇完整的从头开始的指南。

首先,让我们将PCA适应我们的缩放数据,并看看会发生什么。以下代码片段就是这样做的,还绘制了累积解释方差的线图:

# 导入PCA模型   from sklearn.decomposition import PCA      pca = PCA()   pca.fit(X_train)      # 绘制累积解释方差的线图   explained_variance_ratio = pca.explained_variance_ratio_   cumulative_variance_ratio = np.cumsum(explained_variance_ratio)      plt.figure(figsize=(8, 4))   plt.plot(range(1, len(cumulative_variance_ratio) + 1), cumulative_variance_ratio, marker='o', linestyle='--')   plt.xlabel('Number of Principal Components')   plt.ylabel('Cumulative Explained Variance')   plt.title('PCA Cumulative Explained Variance')   plt.grid()   plt.show()   

以下是相应的可视化效果:

[PCA累积解释方差]

但这意味着什么?

这意味着您可以使用前五个主要成分解释源数据集中约90%的方差。如果您不知道这意味着什么,可以参考从头开始的指南。

现在,您可以开始处理PCA载荷。这些只是主成分构建的原始变量的线性组合的系数[2]。

您可以使用载荷来找到实际变量和主成分之间的相关性。

如果主成分和原始变量之间存在强相关性,这意味着此特征很重要 — 用最简单的话来说。

如何使用Python计算载荷分数:

# 计算PCA载荷分数   loadings = pca.components_.T * np.sqrt(pca.explained_variance_)      # 创建包含PCA载荷分数的数据帧   loading_scores = pd.DataFrame(loadings, columns=[f'PC{i}' for i in range(1, len(loadings) + 1)], index=feature_names)      # 打印前几行   print(loading_scores.head())   

相应的数据帧如下所示:

[PCA载荷分数的前几行]

第一个主成分非常重要。它只是一个单一的特征,但它解释了数据集中超过60%的方差。如您从图像5中所看到的,它与平均半径特征的相关系数几乎为0.8 — 这被认为是强正相关。

让我们可视化所有输入特征与第一个主成分之间的相关性。以下是包含整个代码段(包括可视化):

# 绘制PCA载荷分数的可视化   plt.figure(figsize=(12, 6))   plt.barh(loading_scores.index, loading_scores['PC1'])   plt.xlabel      ('Correlation with PC1')   plt.ylabel('Feature')   plt.title('PCA Loading Scores from the first Principal Component')   plt.show()   

以下是相应的可视化效果:

[来自第一个主成分的PCA载荷分数]

这就是如何“突破”PCA以将其用作特征重要性算法。让我们在下一节中总结一切。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python 3官方手册中文版是一本详尽而权威的文档,用于学习和使用Python编程语言。它由Python官方团队编写和维护,对于初学者和经验丰富的开发者来说都是一个宝贵的资源。 这本手册提供了Python 3的全面指南,从基本的语法和数据类型开始介绍,逐步深入探讨各个方面的主题,包括函数、模块、类和异常处理等。手册使用简明扼要的语言,配以示例代码和解释,帮助读者更好地理解相关概念和用法。 与其他编程手册相比,Python 3官方手册中文版的优势在于其权威性和准确性。由于它是由Python官方编写,因此可以确保所提供的信息是最新和最准确的。这对于开发者来说非常重要,因为Python语言的发展非常迅速,新的功能和改进不断出现。 此外,这本手册的布局和组织方式也非常清晰。每个主题都有自己的章节,可以循序渐进地学习新的概念和技术。同时,手册还提供了大量的链接和引用,可以帮助读者进一步深入研究感兴趣的主题。 总之,Python 3官方手册中文版是一本非常有价值的资源,无论是Python初学者还是有经验的开发者都可以从中获益。它不仅能够帮助读者掌握Python的基本知识,还可以引导他们进一步探索更高级和复杂的主题。无论是作为学习材料还是作为参考工具,这本手册都是学习和使用Python编程语言的不可或缺的指南。 ### 回答2: Python 3官方手册中文版是一本权威的Python 3编程语言指南,为广大Python开发者提供了详尽的参考和指导。该手册由Python开发者社区合作翻译而成,内容涵盖了Python语言的方方面面。 手册首先介绍了Python的基本语法和基础知识,包括变量、数据类型、运算符、条件语句、循环语句等。然后深入讲解了Python的核心特性和高级主题,如函数、模块、包、异常处理、文件操作等。此外,手册还涵盖了Python的面向对象编程,包括类、继承、多态等概念和用法。 另外,手册介绍了Python标准库中的各模块和函数,用以解决一些常见问题。比如,你可以学习到如何使用math模块进行数学计算,使用os模块进行文件和目录操作,使用re模块进行正则表达式匹配等等。此外,手册还介绍了Python的常用第三方库和工具,如NumPy、Pandas、Matplotlib等,帮助你更好地进行数据分析、科学计算可视化。 手册中还提供了大量的示例代码和运行结果,这些示例代码可以帮助你理解Python的语法规范和常用编程模式。此外,手册还提供了常见的问题和解答,帮助你快速解决遇到的困惑和错误。 总的来说,Python 3官方手册中文版是学习和使用Python编程语言必备参考资料。无论你是初学者还是有一定经验的开发者,都可以从中受益匪浅。它的简洁明了的语言和丰富的例子,使得学习Python变得更加容易和有趣。 ### 回答3: Python3官方手册是Python官方发布的一份权威文档,提供了丰富的Python语言的详细说明和使用指南。这本手册的中文版是由社区开发者们翻译完成的,以满足中文用户对Python的需求。 Python3官方手册中文版按照主题和章节进行了整理,其中包含了Python3的核心语言和标准库的详细介绍和使用方法。手册以简洁明了的语言阐述了Python语法、数据类型、控制结构等基础知识,并提供了丰富的示例代码帮助读者理解和掌握。 此外,手册还介绍了Python标准库中各个模块的使用方法和功能特性,如字符串操作、文件处理、网络编程等。它还包含了Python的一些高级特性,例如面向对象编程和异常处理等。 手册的编写目的是帮助读者更好地理解和使用Python编程语言。它不仅提供了丰富的信息资源,还包含了大量的参考链接和推荐书籍,帮助读者深入学习。 Python3官方手册中文版在广大中文Python开发者中得到了广泛的认可和使用。它极大地方便了初学者的学习和开发,同时也为有经验的开发者提供了查阅参考的便利。 总之,Python3官方手册中文版是一本重要的Python学习资料,它详尽地介绍了Python语言和标准库的各个方面,为读者提供了方便和全面的学习资源。它对于提高中文Python开发者的编程水平有着积极的推动作用,是学习Python编程语言的重要参考资料。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值