关于大数据分类树模型中K折交叉验证的问题

时间:2013-11-12 08:36:33

标签: r cross-validation

我希望对包含“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

1 个答案:

答案 0 :(得分:0)

  • 您的错误消息的含义是您以某种方式请求不存在的索引 发生错误后,您可以检查循环变量的当前状态。这意味着您可以检查“验尸”错误的计算。

  • R有一些软件包可以为您完成交叉验证的繁琐工作,例如: cvTools
    cvTools允许您提供执行建模和计算损失/性能度量的函数。你需要有一个合适的predict方法(特别是,我认为它需要在结果结构的第一个元素中返回预测的数量,但我不确定这一点)。如果您想要任何这些,您必须使用自己的分类性能指标。

请阅读本网站上有关模型比较的一些帖子:要以统计上合理的方式进行,您需要非常大的测试集。