내 상황에 가장 적합한 교차 유효성 검사 방법을 찾으려고합니다.
다음 데이터는 문제를 해결하기위한 예제 (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
됩니다. 리뷰에서 다음 세 가지 교차 검증 방법을 볼 수 있습니다.
데이터를 약 절반으로 나누고 하나는 훈련에 사용하고 다른 하나는 테스트에 사용합니다 (교차 검증)
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
한 번에 하나의 값 또는 몇 개의 값 마스킹 :이 방법에서는 데이터 세트 (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
vs CV
? 작동하는 예는 감사하겠습니다.