私は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つしか取得しません。