在進行數據挖掘時,咱們並不須要將全部的自變量用來建模,而是從中選擇若干最重要的變量,這稱爲特徵選擇(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