如何使用R自动拆分矩阵进行5倍交叉验证?我实际上想要生成5组(test_matrix_indices,train matrix_indices).
Jor*_*eys 23
我想你想要矩阵行是要分割的情况.然后,所有你需要的是sample和split:
X <- matrix(rnorm(1000),ncol=5)
id <- sample(1:5,nrow(X),replace=TRUE)
ListX <- split(x,id) # gives you a list with the 5 matrices
X[id==2,] # gives you the second matrix
Run Code Online (Sandbox Code Playgroud)
我会使用该列表,因为它允许您执行以下操作:
names(ListX) <- c("Train1","Train2","Train3","Test1","Test2")
mean(ListX$Train3)
Run Code Online (Sandbox Code Playgroud)
这使代码更容易阅读,并使您无法在工作区中创建大量的矩阵.如果将矩阵单独放在工作区中,则必然会陷入困境.使用清单!
如果您希望测试矩阵小于或大于其他矩阵,请使用以下prob参数sample:
id <- sample(1:5,nrow(X),replace=TRUE,prob=c(0.15,0.15,0.15,0.15,0.3))
Run Code Online (Sandbox Code Playgroud)
为您提供一个测试矩阵,其大小是火车矩阵的两倍.
如果您想确定确切的病例数,sample并且prob不是最佳选择.你可以用一个技巧:
indices <- rep(1:5,c(100,20,20,20,40))
id <- sample(indices)
Run Code Online (Sandbox Code Playgroud)
分别得到100,20,......和40个案例的矩阵.
Woj*_*ala 15
f_K_fold <- function(Nobs,K=5){
rs <- runif(Nobs)
id <- seq(Nobs)[order(rs)]
k <- as.integer(Nobs*seq(1,K-1)/K)
k <- matrix(c(0,rep(k,each=2),Nobs),ncol=2,byrow=TRUE)
k[,1] <- k[,1]+1
l <- lapply(seq.int(K),function(x,k,d)
list(train=d[!(seq(d) %in% seq(k[x,1],k[x,2]))],
test=d[seq(k[x,1],k[x,2])]),k=k,d=id)
return(l)
}
Run Code Online (Sandbox Code Playgroud)