如何用Python计算特征重要性?(一)

简介: 如何用Python计算特征重要性?(一)

1.特征重要性

特征重要性是一种为预测模型的输入特征评分的方法,该方法揭示了进行预测时每个特征的相对重要性。

可以为涉及预测数值的问题(称为回归)和涉及预测类别标签的问题(称为分类)计算特征重要性得分。

这些得分非常有用,可用于预测建模问题中的多种情况,例如:

·     更好地理解数据

·     更好地理解模型

·     减少输入特征的数量

 

特征重要性得分可以帮助了解数据集

相对得分可以突出显示哪些特征可能与目标最相关,反之则突出哪些特征最不相关。这可以由一个领域专家解释,并且可以用作收集更多的或不同的数据的基础。

特征重要性得分可以帮助了解模型

大多数重要性得分是通过数据集拟合出的预测模型计算的。查看重要性得分可以洞悉该特定模型,以及知道在进行预测时哪些特征最重要和哪些最不重要。这是一种模型解释,适用于那些支持它的模型。

特征重要性可用于改进预测模型

可以使用的重要性得分来选择要删除的特征(最低得分)或要保留的特征(最高得分)。这是一种特征选择,可以简化正在建模的问题,加快建模过程(删除特征称为降维),在某些情况下,还可以改善模型的性能。

特征重要性得分可以被输入到包装器模型,如SelectFromModel或SelectKBest,以进行特征选择。

有许多方法和模型可以计算特征重要性得分。

也许最简单的方法是计算每个特征和目标变量之间的统计学相关系数。

在本教程中,我们将研究三种比较高级的特征重要性,即:

·   从模型系数得知的特征重要性。

·   决策树中的特征重要性。

·   随机排序检验中的特征重要性。

现在让我们深入了解这三个!

2.准备

在深入学习之前,我们先确认我们的环境并准备一些测试数据集。

检查Scikit-Learn版本

首先,确认你已安装最新版本的scikit-learn库。这非常重要,因为在本教程中,我们我们研究的一些模型需要最新版的库。

您可以使用以下示例代码来查看已安装的库的版本:

1. # check scikit-learn version  
2. import sklearn  
3. print(sklearn.__version__)

运行示例代码将会打印出库的版本。在撰写本文时,大概是version0.22。你需要使用此版本或更高版本的scikit-learn。

1. 0.22.1  

生成测试数据集

接下来,让我们生成一些测试数据集,这些数据集可以作为基础来证明和探索特征重要性得分。每个测试问题有五个重要特征和五不重要的特征,看看哪种方法可以根据其重要性找到或区分特征可能会比较有意思。

分类数据集

我们将使用make_classification()函数创建一个用于测试的二进制分类数据集。

数据集将包含1000个实例,且包含10个输入特征,其中五个将会提供信息,其余五个是多余的。

为了确保每次运行代码时都得到相同的实例,我们将使用假随机数种子。下面列出了创建数据集的示例。

1. # test classification dataset  
2. from sklearn.datasets import make_classification  
3. # define dataset  
4. X, y = make_classification(n_samples=1000, n_features=10, n_informative=5, n_redundant=5, random_state=1)  
5. # summarize the dataset  
6. print(X.shape, y.shape)

运行示例,创建数据集,并确保所需的样本和特征数量。

1.  (1000, 10) (1000,)  

回归数据集

我们将使用make_regression()函数创建一个用于测试的回归数据集。

像分类数据集一样,回归数据集将包含1000个实例,且包含10个输入特征,其中五个将会提供信息,其余五个是多余的。

1. # test regression dataset  
2. from sklearn.datasets import make_regression  
3. # define dataset  
4. X, y = make_regression(n_samples=1000, n_features=10, n_informative=5, random_state=1)  
5. # summarize the dataset  
6. print(X.shape, y.shape)

运行示例,创建数据集,并确保所需的样本和特征数量。

1. (1000, 10) (1000,)   

接下来,我们仔细看一下特征重要性系数。

3.特征重要性系数

线性的机器学习能够拟合出预测是输入值的加权和的模型。

案例包括线性回归,逻辑回归,和正则化的扩展案例,如岭回归和弹性网络。

所有这些算法都是找到一组要在加权求和中使用的系数,以便进行预测。这些系数可以直接用作粗略类型的特征重要性得分。

我们来仔细研究一下分类和回归中的特征重要性系数。我们将在数据集中拟合出一个模型以找到系数,然后计算每个输入特征的重要性得分,最终创建一个条形图来了解特征的相对重要性。

3.1线性回归特征重要性

我们可以在回归数据集中拟合出一个LinearRegression模型,并检索coeff_属性,该属性包含为每个输入变量(特征)找到的系数。这些系数可以为粗略特征重要性评分提供依据。该模型假设输入变量具有相同的比例或者在拟合模型之前已被按比例缩放。

下面列出了针对特征重要性的线性回归系数的完整示例。

1. # linear regression feature importance  
2. from sklearn.datasets import make_regression  
3. from sklearn.linear_model import LinearRegression  
4. from matplotlib import pyplot  
5. # define dataset  
6. X, y = make_regression(n_samples=1000, n_features=10, n_informative=5, random_state=1)  
7. # define the model  
8. model = LinearRegression()  
9. # fit the model  
10.model.fit(X, y)  
11.# get importance  
12.importance = model.coef_  
13.# summarize feature importance  
14.for i,v in enumerate(importance):  
15.    print('Feature: %0d, Score: %.5f' % (i,v))  
16.# plot feature importance  
17.pyplot.bar([x for x in range(len(importance))], importance)  
18.pyplot.show()

运行示例,拟合模型,然后输出每个特征的系数值。

得分表明,模型找到了五个重要特征,并用零标记了剩下的特征,实际上,将他们从模型中去除了。

1. Feature: 0, Score: 0.00000  
2. Feature: 1, Score: 12.44483  
3. Feature: 2, Score: -0.00000  
4. Feature: 3, Score: -0.00000  
5. Feature: 4, Score: 93.32225  
6. Feature: 5, Score: 86.50811  
7. Feature: 6, Score: 26.74607  
8. Feature: 7, Score: 3.28535  
9. Feature: 8, Score: -0.00000  
10.Feature: 9, Score: 0.00000

然后为特征重要性得分创建条形图。

image.png


这种方法也可以用于岭回归和弹性网络模型。

目录
相关文章
|
2月前
|
Python
【10月更文挑战第10天】「Mac上学Python 19」小学奥数篇5 - 圆和矩形的面积计算
本篇将通过 Python 和 Cangjie 双语解决简单的几何问题:计算圆的面积和矩形的面积。通过这道题,学生将掌握如何使用公式解决几何问题,并学会用编程实现数学公式。
165 60
|
12天前
|
Python
Python中的函数是**一种命名的代码块,用于执行特定任务或计算
Python中的函数是**一种命名的代码块,用于执行特定任务或计算
38 18
|
15天前
|
Python
使用Python计算字符串的SHA-256散列值
使用Python计算字符串的SHA-256散列值
23 7
|
1月前
|
机器学习/深度学习 算法 编译器
Python程序到计算图一键转化,详解清华开源深度学习编译器MagPy
【10月更文挑战第26天】MagPy是一款由清华大学研发的开源深度学习编译器,可将Python程序一键转化为计算图,简化模型构建和优化过程。它支持多种深度学习框架,具备自动化、灵活性、优化性能好和易于扩展等特点,适用于模型构建、迁移、部署及教学研究。尽管MagPy具有诸多优势,但在算子支持、优化策略等方面仍面临挑战。
71 3
|
2月前
|
Python
【10月更文挑战第15天】「Mac上学Python 26」小学奥数篇12 - 图形变换与坐标计算
本篇将通过 Python 和 Cangjie 双语实现图形变换与坐标计算。这个题目帮助学生理解平面几何中的旋转、平移和对称变换,并学会用编程实现坐标变化。
66 1
|
2月前
|
机器学习/深度学习 移动开发 Python
【10月更文挑战第11天】「Mac上学Python 22」小学奥数篇8 - 排列组合计算
本篇将通过 Python 和 Cangjie 双语讲解如何计算排列与组合。这道题目旨在让学生学会使用排列组合公式解决实际问题,并加深对数学知识和编程逻辑的理解。
65 4
|
2月前
|
数据可视化 Python
【10月更文挑战第12天】「Mac上学Python 23」小学奥数篇9 - 基础概率计算
本篇将通过 Python 和 Cangjie 双语实现基础概率的计算,帮助学生学习如何解决简单的概率问题,并培养逻辑推理和编程思维。
53 1
|
2月前
|
机器学习/深度学习 数据格式 Python
将特征向量转化为Python代码
将特征向量转化为Python代码
25 3
|
2月前
|
Python
使用python计算两个日期之前的相差天数,周数
使用python计算两个日期之前的相差天数,周数
45 0
|
2月前
|
索引 Python
Excel学习笔记(一):python读写excel,并完成计算平均成绩、成绩等级划分、每个同学分数大于70的次数、找最优成绩
这篇文章是关于如何使用Python读取Excel文件中的学生成绩数据,并进行计算平均成绩、成绩等级划分、统计分数大于70的次数以及找出最优成绩等操作的教程。
89 0