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


在進行數據挖掘時,我們並不需要將所有的自變量用來建模,而是從中選擇若干最重要的變量,這稱為特征選擇(feature selection)。本文主要介紹基於caret包的rfe()函數的特征選擇。

一種算法就是后向選擇,即先將所有的變量都包括在模型中,然后計算其效能(如誤差、預測精度)和變量重要排序,然后保留最重要的若干變量,再次計算效能,這樣反復迭代,找出合適的自變量數目。這種算法的一個缺點在於可能會存在過度擬合,所以需要在此算法外再套上一個樣本划分的循環。在caret包中的rfe命令可以完成這項任務。

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)

functions

method 確定用什么樣的抽樣方法,默認提升boot,還有cv(交叉驗證),LOOCV(留一交叉驗證)

number folds的數量或重抽樣的迭代次數

seeds 每次重抽樣迭代時設置的隨機種子

 

 在第17個變量后面有 * 號,表明選擇17個變量時,其預測精度最高

 plot(lmProfile) 可觀察到同樣結果,如下:

返回最終保留的自變量:

參考:

http://topepo.github.io/caret/recursive-feature-elimination.html 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM