这些模型正在做不同的事情 . SVC在您的完整特征空间上训练模型,并在整个特征空间上进行预测 . RFECV使用完整的功能空间并调整所选功能的数量 . 最终模型及其所做的任何预测都基于您的特征的子集(未消除的特征) .
您可以检查RFECV对象以获取有关所选功能或执行各种功能子集的更多信息(请参阅RFECV documentation, . support_,.grid_scores_和.ranking_都特别相关,因为This example) .
问题的第二部分是关于数据分区 . 通常,在构建新模型时,应将数据分为三组:
训练数据用于训练模型(显然)
验证数据用于调整模型(不用于测试模型)
测试数据用于实际测试模型
验证和测试之间的区别可能有点模糊,但非常重要 . 以你的例子为例(并且假设你当时没有工作,你可以检查模型并使用验证集进行一些预测 . 这可以让你了解哪些功能正常工作,哪些功能没有,另一些功能位于其他位置 . 关于模型(例如,使用什么样的内核以及该内核上的任何参数) . 最终决定使用原始特征的某个子集,以及3阶的多项式内核 .
大!现在你有了一个工作模型 . 该模型对看不见的数据有多好?如果你没有测试装置,你永远不会知道 . 您所知道的就是如何让它在验证集上工作 .
现在在您的实际示例中,RFECV使用交叉验证来进行特征选择,这是处理训练验证分离的另一种方法,它可以挤出更多数据(如果您有少量样本并且获得更多是昂贵/不可能的) .
通常,交叉验证以平均值处理(例如,随机k倍的平均性能),练习的目标是不断调整模型直到您对平均性能感到满意为止 . 只有这样你才能测试它(在测试集上) .
编辑:修正了一个链接