19

Scikit-Learn 中的特征排名与递归特征消除

 3 years ago
source link: https://xie.infoq.cn/article/c310a6ec54fff9cdae70dfcb2
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

全文2K字,建议阅读时间5分钟​。

由于我本人最近正在做特征工程方面的工作,以特征选择和特征降维为主,所以本篇文章为同学们讲解sklearn库中常用的特征选择方法。

本文介绍如何使用scikit-learn为您的机器学习项目获取最佳数量的特征。

JNNJVni.jpg!mobile

对于任何机器学习应用程序而言, 特征选择 都是一项重要任务。当所讨论的数据具有许多功能时,这尤其重要。最佳数量的特征还可以提高模型的准确性。获得最重要的特征和最佳特征的数量可以通过特征重要性或特征等级来获得。在本文中,我们将探讨功能排名。

递归特征消除

消除递归特征所需的第一项是估计器。例如,线性模型或决策树模型。

这些模型具有线性模型的系数,并且在决策树模型中具有重要的功能。在选择最佳数量的特征时,训练估计器,并通过系数或特征重要性选择特征。最不重要的功能已删除。递归地重复此过程,直到获得最佳数量的特征。

在Sklearn中的应用

Scikit-learn使通过类实现递归特征消除成为可能。该类具有以下参数: sklearn.feature_selection.RFE

  • estimator  —可以通过 coef_  或  feature_importances_  属性提供功能重要性的机器学习估计器 。

  • n_features_to_select  —要选择的功能数量。选择  half  是否未指定。

  • step  —一个整数,指示每次迭代要删除的特征的数量,或者一个介于0和1之间的数字以指示每次迭代要删除的特征的百分比。

拟合后,可以获得以下属性:

  • ranking_  —功能的排名。

  • n_features_  —已选择的功能数。

  • support_  —一个数组,指示是否选择了功能。

应用

如前所述,我们需要使用提供 feature_importance_s  属性或  coeff_  属性的估计器 。让我们来看一个简单的例子。数据集具有13个要素-我们将努力获得最佳数量的要素。

aEFvyy.png!mobile

UJjyueN.png!mobile

让我们获得  X  和  y  特征。

Ybueuaa.png!mobile

我们将其分为测试和训练集以准备建模:

jUnqqmi.png!mobile

几个导入:

  • Pipeline  —因为我们将执行一些交叉验证。最佳实践是为了避免数据泄漏。

  • RepeatedStratifiedKFold  —用于重复分层交叉验证。

  • cross_val_score  —用于评估交叉验证的分数。

  • GradientBoostingClassifier  —我们将使用的估算器。

  • numpy  -这样我们就可以计算分数的平均值。

eEjUn2m.png!mobile

第一步是创建 RFE  类的实例, 同时指定估算器和您要选择的特征数量。在这种情况下,我们选择6:

YnmIb2M.png!mobile

接下来,我们创建要使用的模型的实例:

BJVjY3j.png!mobile

我们将使用  Pipeline  转换数据。在中,  Pipeline  我们指定  rfe  了特征选择步骤以及将在下一步中使用的模型。

然后,我们指定  RepeatedStratifiedKFold  10个拆分和5个重复的。分层的K折确保在每个折中每个类别的样本数量均衡。 RepeatedStratifiedKFold 重复分层K倍指定次数,每次重复具有不同的随机性。

v6JrQbi.png!mobile

VjyEb2.png!mobile

有了这些,我们可以检查支持和排名。支持说明是否选择了特征。

rfe.support_array([ True, False, True, False, True, False, False, True, False,True, False, True, True])

我们可以将其放入数据框并检查结果。

VRVNrqU.png!mobile

N7VVbur.png!mobile

我们还可以检查相对排名。

rf_df = pd.DataFrame(rfe.ranking_,index=X.columns,columns=[‘Rank’]).sort_values(by=’Rank’,ascending= True )rf_df.head()

mAFjaeZ.png!mobile

如果我们可以自动选择功能,那么与其手动配置功能数量,不如说是很好。这可以通过递归特征消除和交叉验证来实现。这是通过 sklearn.feature_selection.RFECV  类完成的 。该类具有以下参数:

  • estimator  -与 RFE  班级相似 。

  • min_features_to_select  —最少要选择的功能。

  • cv —交叉验证拆分策略。

返回的属性是:

  • n_features_  —通过交叉验证选择的最佳特征数。

  • support_  —包含有关要素选择信息的数组。

  • ranking_  —功能的排名。

  • grid_scores_  —从交叉验证中获得的分数。

第一步是导入类并创建其实例。

from sklearn.feature_selection import RFECVrfecv = RFECV(estimator=GradientBoostingClassifier())

下一步是指定管道。在此管道中,我们使用刚刚创建的  rfecv

EBrUnuE.png!mobile

让我们拟合管道,然后获得最佳数量的特征。

fmU7NzM.png!mobile

可以通过该 n_features_  属性获得最佳数量的特征 。

qimi63U.png!mobile

排名和支持可以像上次一样获得。

rfecv.support_rfecv_df = pd.DataFrame(rfecv.ranking_,index=X.columns,columns=[‘Rank’]).sort_values(by=’Rank’,ascending= True )rfecv_df.head()

使用,  grid_scores_  我们可以绘制一个显示交叉验证得分的图表。

RzuiuuA.png!mobile

e6FjUjb.png!mobile

将其应用于回归问题的过程是相同的。只要确保使用回归指标而不是准确性即可。我希望本文能为您提供一些有关为您的机器学习问题选择最佳特征的见解。

参考内容:

具有递归特征消除的代码库

R3QZBfj.png!mobile

看完别走还有惊喜!

我精心整理了计算机/Python/机器学习/深度学习相关的2TB视频课与书籍,价值1W元。关注微信公众号“计算机与AI”,点击下方菜单即可获取网盘链接。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK