R中具有createFolds函数的训练和测试集

R中具有createFolds函数的训练和测试集,r,machine-learning,regression,r-caret,R,Machine Learning,Regression,R Caret,我试图手动计算一些线性回归性能度量,我想使用30倍的交叉验证来分割我的数据 这些性能度量需要计算培训和测试集 我运行了以下代码,但它给了我一个错误(“维度不兼容,较长的对象长度不是较短对象长度的倍数”) 有没有办法使用createfold函数解决此问题 ######### Upload the data set ######### wdbc <- read.delim("yacht_hydrodynamics.data",sep = "",header = FALSE) wdbc[]

我试图手动计算一些线性回归性能度量,我想使用30倍的交叉验证来分割我的数据

这些性能度量需要计算培训和测试集

我运行了以下代码,但它给了我一个错误(“维度不兼容,较长的对象长度不是较短对象长度的倍数”)

有没有办法使用
createfold
函数解决此问题

######### Upload the data set #########

wdbc <- read.delim("yacht_hydrodynamics.data",sep = "",header = FALSE) 
wdbc[] <- lapply(wdbc, scale)
wdbc<-as.data.frame(wdbc)

############## Leave One Out Cross Validation split ###########

k=30
fitted_value <- rep(0,k)

for(i in 1:k){
test<-wdbc[i,]
training<-wdbc[-i,]

m=lad(V7 ~ ., data=training, method="BR")

co.data = coef(m)  
x = cbind(1, as.matrix(test[, !(colnames(test) %in% "V7")]))

fitted_value[i] <- x %*% co.data

}

 R2<-(cor(wdbc$V7,fitted_value)^2) ### R-squared
 SAD<-sum(abs(wdbc$V7 - fitted_value)) ### Sum Absloute Deviation

 c(round(SAD,2) ,round(R2,2))
上传数据集#########

wdbc您的错误来自这一行:

R2<-(cor(wdbc$V7,fitted_value)^2)
所以从308的向量中减去30个值的向量是行不通的

不太确定是做30倍交叉验证还是漏掉1,您上面的代码是漏掉1,您应该为漏掉1设置
k=nrow(wdbc)
。以下是30倍的建议:

k=30
foldidx = split(sample(nrow(wdbc)),1:nrow(wdbc) %% k)
fitted_value <- vector("list",k)

for(i in 1:k){
test<-wdbc[foldidx[[i]],]
training<-wdbc[-foldidx[[i]],]

m=lad(V7 ~ ., data=training, method="BR")

co.data = coef(m)  
x = cbind(1, as.matrix(test[, !(colnames(test) %in% "V7")]))

fitted_value[[i]] <- x %*% co.data

}
k=30
foldidx=拆分(样本(nrow(wdbc)),1:nrow(wdbc)%%k)

拟合的_值有什么错误?@jcken,它给了我“不兼容的尺寸,较长的物体长度不是较短物体长度的倍数”。你知道这对应哪一行吗?如果它在for循环中,那么将for循环复制到一个新的r脚本中(同一个会话),设置i=1并查找代码停止工作的位置
k=30
foldidx = split(sample(nrow(wdbc)),1:nrow(wdbc) %% k)
fitted_value <- vector("list",k)

for(i in 1:k){
test<-wdbc[foldidx[[i]],]
training<-wdbc[-foldidx[[i]],]

m=lad(V7 ~ ., data=training, method="BR")

co.data = coef(m)  
x = cbind(1, as.matrix(test[, !(colnames(test) %in% "V7")]))

fitted_value[[i]] <- x %*% co.data

}
obs = wdbc$V7[unlist(foldidx)]
test = unlist(fitted_value)

R2<-(cor(obs,test)^2)