R語言caret包的學習(二)--特徵選擇

在進行數據挖掘時,咱們並不須要將全部的自變量用來建模,而是從中選擇若干最重要的變量,這稱爲特徵選擇(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(), ...)
  • x 訓練集自變量矩陣或數據庫,注意,列名必須惟一
  • y 訓練集的結果向量(數值型或因子型)
  • sizes 對應於應該保留的特徵的數量的數值向量
  • metric 指定將使用什麼彙總度量來選擇最優模型。默認狀況下,"RMSE" and "Rsquared" for regression and "Accuracy" and "Kappa" for classification
  • maximize 邏輯值,metric是否最大化
  • rfeControl 控制選項列表,包括擬合預測的函數。一些模型的預約義函數以下: linear regression (in the object lmFuncs), random forests (rfFuncs), naive Bayes (nbFuncs), bagged trees (treebagFuncs) and functions that can be used with caret’s train function (caretFuncs). 若是模型具備必須在每次迭代中肯定的調整參數,則後者是有用的。
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 

http://blog.csdn.net/jiabiao1602/article/details/44975741

相關文章
相關標籤/搜索