在caret(short for classification and regression training)包中有多个函数可以实现特征选择,总的分为封装法和过滤法。封装法,将特征选择过程与训练过程融合在一起,以模型的预测能力作为特征选择的衡量标准。封装法可以选出高质量的变量子集,但运行速度上会大打折扣。在caret包中,封装法有递归特征消除(recursive feature elimination:rfe)算法,遗传算法(genetic algorithms:ga)和模拟退火(Simulated annealing:sa)算法。过滤法的特征选择与训练过程相互独立,通过分析变量内部的关系进行筛选操作,与训练模型的选择并没有关系。过滤法通过变量间的相关性、近零方差检验、聚类分析等方法选择出来的变量,再用于不同的训练模型构建、评估等。过滤法虽然在速度上比封装法更占优势,但可能会删除非常有实质意义的变量。caret包中的过滤法有Selection By Filtering (SBF)。
递归特征消除(recursive feature elimination RFE)算法
RFE算法是基于预测器重要性排序的预测器向后选择。在建模之前,对预测因子进行排序,不太重要的因子依次剔除。其目标是找到可以用于生成准确模型的预测器子集。http://topepo.github.io/caret/recursive-feat-elimination。
使用rfeControl() 对特征选择的参数进行选择,使用ref() 返回特征筛选结果。
下面主要讲解每个函数里参数表示的含义及选择的标准。
Usage (默认参数设置)
rfeControl(
functions = NULL,
rerank = FALSE,
method = "boot",
saveDetails = FALSE,
number = ifelse(method %in% c("cv", "repeatedcv"), 10, 25),
repeats = ifelse(method %in% c("cv", "repeatedcv"), 1, number),
verbose = FALSE,
returnResamp = "final",
p = 0.75,
index = NULL,
indexOut = NULL,
timingSamps = 0,
seeds = NA,
allowParallel = TRUE
)
Arguments
functions #functions选择用什么样的模型进行自变量排序,可以选择的有rfFuncs(随机森林),lmFuncs(线性回归),nbFuncs(朴素贝叶斯,只能用于分类),treebagFuncs(装袋决策树),ldaFuncs(只能用于分类),lrFuncs,caretFuncs。
rerank #逻辑值:每次计算的变量重要性是否删除
method #样本重采样方法,用于重复训练/测试集的分割:boot、cv、LOOCV或LGOCV
s