SVM-RFE使用及换kernal及estimator

SVM-RFE与SVM-RFECV都是用于对特征进行缩减,用于找到数目最优的特征数。RFECV基于RFE基础上,添加了交叉验证,使得在每个step中,都可以对现有的特征数目进行评估,以确定比较好的数目。RFE中需要指定n_features_to_select而RFECV中需要指定min_features_to_select,二者虽然都要运行到指定挑选特征数目时才停止筛选,但RFECV的每步交叉验证得到特定数目特征的acc,从而可以得到acc达到最大时的最少特征个数。同时,RFECV提供ranking_数组,可以挑选出被选中的特征。

一般来说,RFECV中使用的评估器为SVC,以linear核作为SVC的核,考虑到linear核不如rbf核效率好,尝试换rbf。但使用rbf核的SVC会报一下错误。

回到SVM-RFECV的源码中发现,它需要利用与特征重要性有关的信息:

SVM-RFE使用及换kernal及estimator_第1张图片

此外,通过对estimator的注解可以看到,RFECV对estimato有如下要求:

所以,estimator中必须有一个fit方法,且包含于特征重要有关的信息——cofe_或者feature importances_。

回到SVC,源码中指出SVC类中有coef_属性但没有feature_importances_属性,但是coef_属性只对linear核有效,

所以使用SVC作为estimator,如果改用rbf核时不可行的。

那么时不时只要estimator满足要求,就可以使用RFECV进行特征筛选呢?以RandowForest为例,

是可行的。

 

总结以上:

1. SVC中不能选用rbf核作为FRFECV的estimator;

2. 如果estimator满足拥有fit函数,或者可以使用的coef_或feature_importances_属性,那么就能使用RFECV

3.基于2,因为RFECV自带交叉验证,对于满足2条件的分类器,可以先用RFECV进行特征筛选的同时,得到大致的准确率。

RFECV中的grid_scores_属性会给出每个step的acc。(当然我只试了RF)

 

最后附上RFE的使用使用手册:

https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.RFE.html?tdsourcetag=s_pctim_aiomsg

 

 

你可能感兴趣的:(sklearn)