全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
6465 11
2013-11-11
本人参考吴喜之先生的《复杂数据统计方法(第二版)》中的5折交叉验证的方法,对自己的数据做5折交叉验证,采用的分类树模型,因变量有51个水平(没办法……),有14个自变量。

在把数据平均分为5份,设立下标集的过程中出现错误:
             Error in `*tmp*`[] : subscript out of bounds

查了谷歌,但至今还没明白是什么问题,该怎么完善,希望论坛的个人能帮帮小弟,指点迷津。

详细代码如下:
w <- read.csv('D:/R code/animal2.csv',header = T)
names(w)


w$cluster_ward50 <- as.factor(w$cluster_ward50)
w$VEGETATION <- as.factor(w$VEGETATION)


# prepare to 5-fold cross validation
d <- 1:370827
dd <- list()
Z <- 5
nn <- levels(w$cluster_ward50)
KL <- length(nn)
for(i in 1:KL)
  dd[] <- d[w$cluster_ward50==nn]
kk<- NULL
for(i in 1:KL)
  kk <- c(kk,round(length(dd[])/Z))
set.seed(1111)
yy <- list(NULL,NULL,NULL)
for(i in 1:KL){xx <- list()
               uu<-dd[]
               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[][[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[] <- c(mm[],yy[[j]][])

此处出现:Error in yy[[j]] : subscript out of bounds


另外,我想用这样的5折交叉验证代码做Adaboost分类、Bagging分类、RandonForest分类等模型,不知道这样的思路是否合理,求各位帮忙解答,谢谢了!






二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-11-11 19:44:39
这帖子就这么沉了吗?不能啊!各位帮帮忙啊!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-11-11 20:26:07
还是没人吗…………
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-11-12 11:45:21
d <- 1:370827
dd <- list()
Z <- 5
nn <- levels(w$cluster_ward50)
KL <- length(nn)
for(i in 1:KL)
dd[] <- d[w$cluster_ward50==nn]  ##dd[i] <- d[w$cluster_ward50==nn]
kk<- NULL
for(i in 1:KL)
  kk <- c(kk,round(length(dd[])/Z))
set.seed(1111)
yy <- list(NULL,NULL,NULL)
for(i in 1:KL){xx <- list()
               
uu<-dd[]   ##
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[][[k]] <- xx[[k]]} ##
yy[i][[k]] <- xx[[k]]
mm <- list(NULL,NULL,NULL,NULL,NULL)
for(i in 1:Z)
  for(j in 1:KL)
   
mm[] <- c(mm[],yy[[j]][]) ##
mm[i] <- c(mm[i],yy[[j]][i])


红色字体那里,你的下标没标清楚。譬如 dd[] <- d[w$cluster_ward50==nn]   改为 ''dd[i]<-.........''
应该是这地方了,我没测试过。
1.png


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-11-12 15:16:36
你好!我按照你讲的再改了下代码,发现还是出现这个问题:

> 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[] <- d[w$cluster_ward50==nn]
> kk<- NULL
> for(i in 1:KL)
+   kk <- c(kk,round(length(dd[])/Z))
> set.seed(1111)
> yy <- list(NULL,NULL,NULL)
> for(i in 1:KL){xx <- list()
+                uu<-dd[]
+                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[][[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[] <- c(mm[],yy[[j]][])
Error in yy[[j]] : subscript out of bounds
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-11-12 15:17:49
CRouGD 发表于 2013-11-12 11:45
d
不好意思,我的代码里本来[]里面是有写 i  的,但是不知道为什么复制到论坛里的时候就消失了……
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

分享

扫码加好友,拉您进群