我希望对包含“rpart”的分类树模型执行5倍CV,在此之前我使用代码将我的数据划分为5个子数据集,并出现1个错误: 在数据分割步骤中出现错误,例如:
*tmp*
[]中的错误:下标越界
我有谷歌的错误,但仍然无法解决它。
我的数据有点大,超过370,000行和13个预测变量。 我的响应变量中有51个级别。
> w <- read.csv('D:/R code/animal2.csv',header = T)
> names(w)
[1] "cluster_ward50" "AAT10" "AAT0" "ARIDITY" "VEGETATION"
[6] "PRECITAT" "TMAX" "TMIN" "PREMAX" "PREMIN"
[11] "AMT" "T_OC" "ELEMAX" "ELEMIN"
>
> w$cluster_ward50 <- as.factor(w$cluster_ward50)
> w$VEGETATION <- as.factor(w$VEGETATION)
> d <- 1:370827
> dd <- list()
> Z <- 5
> nn <- levels(w$cluster_ward50)
> KL <- length(nn)
> for(i in 1:KL)
+ dd[[i]] <- d[w$cluster_ward50==nn]
> kk<- NULL
> for(i in 1:KL)
+ kk <- c(kk,round(length(dd[[i]])/Z))
> set.seed(1111)
> yy <- list(NULL,NULL,NULL)
> for(i in 1:KL){xx <- list()
+ uu<-dd[[i]]
+ for(j in 1:(Z-1)){xx[[j]] <- sample(uu,kk)
+ uu<- setdiff(uu,xx[[j]])}
+ xx[[Z]] <- uu
+ for(k in 1:Z)
+ yy[[i]][[k]] <- xx[[k]]}
Error in `*tmp*`[] : subscript out of bounds
> mm <- list(NULL,NULL,NULL,NULL,NULL)
> for(i in 1:Z)
+ for(j in 1:KL)
+ mm[[i]] <- c(mm[[i]],yy[[j]][])
Error in yy[[j]] : subscript out of bounds
答案 0 :(得分:0)
您的错误消息的含义是您以某种方式请求不存在的索引 发生错误后,您可以检查循环变量的当前状态。这意味着您可以检查“验尸”错误的计算。
R有一些软件包可以为您完成交叉验证的繁琐工作,例如: cvTools
cvTools允许您提供执行建模和计算损失/性能度量的函数。你需要有一个合适的predict
方法(特别是,我认为它需要在结果结构的第一个元素中返回预测的数量,但我不确定这一点)。如果您想要任何这些,您必须使用自己的分类性能指标。
请阅读本网站上有关模型比较的一些帖子:要以统计上合理的方式进行,您需要非常大的测试集。