RFECV仅根据功能的重要性逐个删除功能.理论上,每个使用k < K个特征的模型都可以通过多个指标进行评分.然而,一旦测试了所有可能数量的特征,RFECV
就会 Select 具有最大mean_test_score
的模型,这意味着它依赖于一个数字来 Select 最佳数量的特征.
RFECV如何工作,简短版本:
RFE根据"feature_importance"删除功能.然而,您仍然需要 Select k
个参数-要使用的功能数量.您可以通过在测试数据集上判断所有可能的k
个值的评分函数来实现这一点.然后 Select 在测试数据集上提供最佳性能的k
个.这就是你最后k
个功能结束的方式.然而,为了使此过程更加可靠,您可以在CV-fold上重复此过程多次.然后所有折叠的测试数据集的平均分数.
RFECV如何工作,长版本:
- 首先,它使用提供的CV拆分来拆分数据,从而返回每个折叠的对(X_train、X_Test).
- 对于每对(X_train,X_Test),它应用RFE(显然对于每个cv对RFE结果可能不同).因此,在每个步骤的每个cv对上,如果匹配给定
X_train
,RFE根据feature_importance
Select k
个最佳特征.然后,在所选特征的每个步骤中,它使用评分器判断X_test
上的模型,并返回所选k
个特征的分数.
- 现在,对于每个cv折叠(X_train,X_Test)和每个
k
值,您都会在测试折叠上获得一个分数.该分数在所有cv折叠中获得平均值.所以您最终得到了对:(k_features,cv_Test_score)
- 现在,对于RFE Select 的每
k
个特征,我们都有一个平均单分值.对这些分数进行排序并用于 Select 分数最高的k
个.你得到best-k
- 最后,我们再次运行RFE,但这次是在整个X数据集上运行RFE,目标是返回恰好
best-k
个特征.
总而言之,RFECV需要一个数字来决定哪个k
值最好.因此,它不能使用多个评分功能,除非它们通过自定义评分器以某种方式组合在一起.
回答您的问题:如果您想获得3个单独的评分函数输出,则需要单独对rfe输出进行评分.
还要注意的是,由于f1
已经是precision
和recall
的混合体,因此可能值得用scoring='f1'
运行RFECV.