4.3基于XGBoost的特征重要性
XGBoost是一个库,它提供了随机梯度提升算法的高效实现。可以通过XGBRegressor和XGBClassifier类将此算法与scikit-learn一起使用。
拟合后,模型提供feature_importances_属性,可以访问该属性以检索每个输入特征的相对重要性得分。
scikit-learn还通过GradientBoostingClassifier和GradientBoostingRegressor提供了该算法,并且可以使用相同的特征选择方法
首先,安装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
然后为特征重要性得分创建条形图。
基于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
然后为特征重要性得分创建条形图。
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
然后为特征重要性得分创建条形图。
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
然后为特征重要性得分创建条形图。
总结
在本教程中,您知道了在Python机器学习中的特征重要性得分。
具体来说,您了解到:
· 特征重要性在预测建模问题中的作用
· 如何从线性模型和决策树中计算和查看特征重要性
· 如何计算和查看随机排序特征重要性得分