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

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

4.3基于XGBoost的特征重要性

XGBoost是一个库,它提供了随机梯度提升算法的高效实现。可以通过XGBRegressorXGBClassifier类将此算法与scikit-learn一起使用。

拟合后,模型提供feature_importances_属性,可以访问该属性以检索每个输入特征的相对重要性得分。

scikit-learn还通过GradientBoostingClassifierGradientBoostingRegressor提供了该算法,并且可以使用相同的特征选择方法

首先,安装XGBoost库,例如:

1. sudo pip install xgboost  

然后,通过检查版本号来确认该库已正确安装并且可以正常工作。

1. # check xgboost version  
2. import xgboost  
3. print(xgboost.__version__)

运行该示例,你应该看到以下版本号或者更高版本。

1. 0.90  

      有关XGBoost库的更多信息,请看:

·   XGBoost with Python

让我们看一个用于回归和分类问题的示例。

基于XGBoost(回归)的特征重要性

下面列出了拟合XGBRegressor并且计算特征重要性得分的完整示例

1. # xgboost for feature importance on a regression problem  
2. from sklearn.datasets import make_regression  
3. from xgboost import XGBRegressor  
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 = XGBRegressor()  
9. # fit the model  
10.model.fit(X, y)  
11.# get importance  
12.importance = model.feature_importances_  
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.00060  
2. Feature: 1, Score: 0.01917  
3. Feature: 2, Score: 0.00091  
4. Feature: 3, Score: 0.00118  
5. Feature: 4, Score: 0.49380  
6. Feature: 5, Score: 0.42342  
7. Feature: 6, Score: 0.05057  
8. Feature: 7, Score: 0.00419  
9. Feature: 8, Score: 0.00124  
10.Feature: 9, Score: 0.00491

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

image.png


基于XGBoost(分类)的特征重要性

下面列出了拟合XGBClassifier并且计算特征重要性得分的完整示例

1. # xgboost for feature importance on a classification problem  
2. from sklearn.datasets import make_classification  
3. from xgboost import XGBClassifier  
4. from matplotlib import pyplot  
5. # define dataset  
6. X, y = make_classification(n_samples=1000, n_features=10, n_informative=5, n_redundant=5, random_state=1)  
7. # define the model  
8. model = XGBClassifier()  
9. # fit the model  
10.model.fit(X, y)  
11.# get importance  
12.importance = model.feature_importances_  
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.02464  
2. Feature: 1, Score: 0.08153  
3. Feature: 2, Score: 0.12516  
4. Feature: 3, Score: 0.28400  
5. Feature: 4, Score: 0.12694  
6. Feature: 5, Score: 0.10752  
7. Feature: 6, Score: 0.08624  
8. Feature: 7, Score: 0.04820  
9. Feature: 8, Score: 0.09357  
10.Feature: 9, Score: 0.02220

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

image.png

5.基于随机排序的特征重要性

随机排序特征重要性(Permutation feature importance)可以计算相对重要性,与所使用的模型无关。

首先,在数据集中拟合出一个模型,比如说一个不支持本地特征重要性评分的模型。然后,尽管对数据集中的特征值进行了干扰,但仍可以使用该模型进行预测。对数据集中的每个特征进行此操作。然后,再将整个流程重新操作3、5、10或更多次。我们得到每个输入特征的平均重要性得分(以及在重复的情况下得分的分布)。

此方法可以用于回归或分类,要求选择性能指标作为重要性得分的基础,例如回归中的均方误差和分类中的准确性。

可以通过permutation_importance()函数(以模型和数据集为参数)和评分函数进行随机排序特性选择。

让我们看下这个特征选择方法,其算法并不支持特征选择,尤其是k近邻算法( k-nearest neighbors)。


5.1随机排序(回归)特征重要性

下面列出了拟合KNeighborsRegressor并且计算特征重要性得分的完整示例。

1. # permutation feature importance with knn for regression  
2. from sklearn.datasets import make_regression  
3. from sklearn.neighbors import KNeighborsRegressor  
4. from sklearn.inspection import permutation_importance  
5. from matplotlib import pyplot  
6. # define dataset  
7. X, y = make_regression(n_samples=1000, n_features=10, n_informative=5, random_state=1)  
8. # define the model  
9. model = KNeighborsRegressor()  
10.# fit the model  
11.model.fit(X, y)  
12.# perform permutation importance  
13.results = permutation_importance(model, X, y, scoring='neg_mean_squared_error')  
14.# get importance  
15.importance = results.importances_mean  
16.# summarize feature importance  
17.for i,v in enumerate(importance):  
18.    print('Feature: %0d, Score: %.5f' % (i,v))  
19.# plot feature importance  
20.pyplot.bar([x for x in range(len(importance))], importance)  
21.pyplot.show()

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

结果表明,这十个特征中的两个或三个可能对预测很重要。

1. Feature: 0, Score: 175.52007  
2. Feature: 1, Score: 345.80170  
3. Feature: 2, Score: 126.60578  
4. Feature: 3, Score: 95.90081  
5. Feature: 4, Score: 9666.16446  
6. Feature: 5, Score: 8036.79033  
7. Feature: 6, Score: 929.58517  
8. Feature: 7, Score: 139.67416  
9. Feature: 8, Score: 132.06246  
10.Feature: 9, Score: 84.94768

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

image.png


5.2随机排序(分类)特征重要性

下面列出了拟合KNeighborsClassifier并且计算特征重要性得分的完整示例。

1. # permutation feature importance with knn for classification  
2. from sklearn.datasets import make_classification  
3. from sklearn.neighbors import KNeighborsClassifier  
4. from sklearn.inspection import permutation_importance  
5. from matplotlib import pyplot  
6. # define dataset  
7. X, y = make_classification(n_samples=1000, n_features=10, n_informative=5, n_redundant=5, random_state=1)  
8. # define the model  
9. model = KNeighborsClassifier()  
10.# fit the model  
11.model.fit(X, y)  
12.# perform permutation importance  
13.results = permutation_importance(model, X, y, scoring='accuracy')  
14.# get importance  
15.importance = results.importances_mean  
16.# summarize feature importance  
17.for i,v in enumerate(importance):  
18.    print('Feature: %0d, Score: %.5f' % (i,v))  
19.# plot feature importance  
20.pyplot.bar([x for x in range(len(importance))], importance)  
21.pyplot.show()

 

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

结果表明,这十个特征中的两个或三个可能对预测很重要。

1. Feature: 0, Score: 0.04760  
2. Feature: 1, Score: 0.06680  
3. Feature: 2, Score: 0.05240  
4. Feature: 3, Score: 0.09300  
5. Feature: 4, Score: 0.05140  
6. Feature: 5, Score: 0.05520  
7. Feature: 6, Score: 0.07920  
8. Feature: 7, Score: 0.05560  
9. Feature: 8, Score: 0.05620  
10.Feature: 9, Score: 0.03080

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


 

image.png

总结

在本教程中,您知道了在Python机器学习中的特征重要性得分。

具体来说,您了解到:

·    特征重要性在预测建模问题中的作用

·   如何从线性模型和决策树中计算和查看特征重要性

·   如何计算和查看随机排序特征重要性得分

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