在进行数据挖掘时,咱们并不须要将全部的自变量用来建模,而是从中选择若干最重要的变量,这称为特征选择(feature selection)。本文主要介绍基于caret包的rfe()函数的特征选择。html
一种算法就是后向选择,即先将全部的变量都包括在模型中,而后计算其效能(如偏差、预测精度)和变量重要排序,而后保留最重要的若干变量,再次计算效能,这样反复迭代,找出合适的自变量数目。这种算法的一个缺点在于可能会存在过分拟合,因此须要在此算法外再套上一个样本划分的循环。在caret包中的rfe命令能够完成这项任务。git
rfe(x, y, sizes = 2^(2:4), metric = ifelse(is.factor(y), "Accuracy", "RMSE"), maximize = ifelse(metric == "RMSE", FALSE, TRUE), rfeControl = rfeControl(), ...)
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)
functionsgithub
method 肯定用什么样的抽样方法,默认提高boot,还有cv(交叉验证),LOOCV(留一交叉验证)算法
number folds的数量或重抽样的迭代次数数据库
seeds 每次重抽样迭代时设置的随机种子app
在第17个变量后面有 * 号,代表选择17个变量时,其预测精度最高dom
plot(lmProfile) 可观察到一样结果,以下:函数
返回最终保留的自变量:spa
参考:.net
http://topepo.github.io/caret/recursive-feature-elimination.html