我真的很喜欢caret
包中使用的方法:递归特征消除。您可以在vignette中阅读更多相关信息,但这是基本过程:
基本思想是使用一个标准(例如 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 个。