前言
结合交叉验证之递迴特徵删除(recursive feature elimination with cross-validation, RFECV)属于特徵筛选(feature selection)中的包裹式(wrapper)。
动机
昨天跑了RFECV发现效果不错,想知道它的原理但网路上都只介绍RFE,而关于RFECV的介绍都草草带过,所以我直接看sklearn代码整理出流程,并且跟大家分享
什么是包裹式
包裹式是由两个部件组成建立:
投放策略:根据前一次迭代的结果,决定本次应投入哪些特徵到模型中进行训练预测模型:可以评估特徵与目标间关係的模型RFE
在介绍RFECV前,需要先科普一下什么是RFE。首先,当我们準备好数据并且决定要用什么模型后,首先将所有特徵灌入模型进行训练,然后删除step个回归係数最小的特徵;紧接着用剩余特徵重新训练一个新模型后再删除step个回归係数最小的特徵,如此反覆循环直到剩余特徵数目等于我们的期望数字,就是这么简单,流程图在下面:
RFECV
RFECV其实就是RFE结合KFOLD。实际计算方法为,将数据分割为K-FOLD个,然后分别执行一次RFE(砍到剩1个特徵),须注意我们这次需要记下每次循环所得到的预测误差。
举个例子:
step1. 我们有一个总特徵数n=16的数据,令每次删除特徵数step=1,将数据分成3个FOLD
step2. 因为想知道k=1~16相应的最佳组合,因此我们必须强制令每个RFE的关键特徵数目k=1
step3. 对每个FOLD执行RFE,然后要记得每次迭代都要记录预测误差,因为特徵是从16=>15=>14=>...=>2=>1,所以每个RFV会有16个预测误差,三个FOLD就有3x16个预测误差(误差矩阵)
step4. 将误差矩阵取平均,会得到1x16的数列(平均误差矩阵),gridscore就是从这来的
step5. 从平均误差矩阵中找出误差最小相应的特徵数目a,这也是sklearn RFECV会帮我们自动挑选最佳特徵数目的原因
step6. 用完整的数据跑一次RFE(令k=a),完工