私は自分の状況に最適な相互検証方法を見つけようとしています。
次のデータは、問題を処理するための単なる例です(Rで)が、実際のX
データ(xmat
)は相互に関連付けられ、y
変数(ymat
)でさまざまな程度に関連付けられています。Rコードを提供しましたが、私の質問はRについてではなく、メソッドについてです。Xmat
X変数V1〜V100がymat
含まれ、単一のy変数が含まれます。
set.seed(1233)
xmat <- matrix(sample(-1:1, 20000, replace = TRUE), ncol = 100)
colnames(xmat) <- paste("V", 1:100, sep ="")
rownames(xmat) <- paste("S", 1:200, sep ="")
# the real y data are correlated with xmat
ymat <- matrix(rnorm(200, 70,20), ncol = 1)
rownames(ymat) <- paste("S", 1:200, sep="")
のy
すべての変数に基づいて予測するためのモデルを構築したいと思いますxmat
。したがって、線形回帰モデルになりy ~ V1 + V2 + V3+ ... + V100
ます。レビューから、次の3つの相互検証方法を見ることができます。
データを約半分に分割し、一方をトレーニングに使用し、もう半分をテストに使用します(相互検証):
prop <- 0.5 # proportion of subset data set.seed(1234) # training data set training.s <- sample (1:nrow(xmat), round(prop*nrow(xmat),0)) xmat.train <- xmat[training.s,] ymat.train <- ymat[training.s,] # testing data set testing.s <- setdiff(1:nrow(xmat), training) xmat.test <- xmat[testing.s,] ymat.test <- ymat[testing.s,]
K倍交差検証 -10倍交差検証を使用:
mydata <- data.frame(ymat, xmat) fit <- lm(ymat ~ ., data=mydata) library(DAAG) cv.lm(df=mydata, fit, m=10) # ten-fold cross validation
一度に1つの値またはいくつかの値をマスクする:この方法では、データセット(y)の値をNAに置き換えてランダムにマスクし、予測します。このプロセスはn回繰り返されます。
n = 500 predicted.v <- rep(NA, n) real.v <- rep(NA, n) for (i in 1:n){ masked.id <- sample (1:nrow(xmat), 1) ymat1 <- ymat real.v[i] <- ymat[masked.id,] ymat1[masked.id,] <- NA mydata <- data.frame(ymat1, xmat) fit <- lm(ymat1 ~ ., data=mydata) predicted.v[i] <- fit$fitted.values[masked.id] }
どの状況に最適かをどのように知ることができますか?他の方法はありますか?Bootstrap validation
対CV
?実用的な例は高く評価されます。