我真的很喜欢该caret
包中使用的方法:递归功能消除。您可以在小插图中了解更多信息,但这是基本过程:
基本思想是使用准则(例如t统计量)消除不重要的变量,并查看如何提高模型的预测准确性。您将整个内容包装在一个重采样循环中,例如交叉验证。这是一个示例,使用线性模型以类似于您描述的方式对变量进行排名:
#Setup
set.seed(1)
p1 <- rnorm(50)
p2 <- rnorm(50)
p3 <- rnorm(50)
p4 <- rnorm(50)
p5 <- rnorm(50)
y <- 4*rnorm(50)+p1+p2-p5
#Select Variables
require(caret)
X <- data.frame(p1,p2,p3,p4,p5)
RFE <- rfe(X,y, sizes = seq(1,5), rfeControl = rfeControl(
functions = lmFuncs,
method = "repeatedcv")
)
RFE
plot(RFE)
#Fit linear model and compare
fmla <- as.formula(paste("y ~ ", paste(RFE$optVariables, collapse= "+")))
fullmodel <- lm(y~p1+p2+p3+p4+p5,data.frame(y,p1,p2,p3,p4,p5))
reducedmodel <- lm(fmla,data.frame(y,p1,p2,p3,p4,p5))
summary(fullmodel)
summary(reducedmodel)
在此示例中,算法检测到有3个“重要”变量,但仅获取其中2个。