楼主: speedness
6534 11

[问答] 请教一个关于交叉验证的问题 [推广有奖]

  • 1关注
  • 0粉丝

初中生

23%

还不是VIP/贵宾

-

威望
0
论坛币
644 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
244 点
帖子
10
精华
0
在线时间
13 小时
注册时间
2012-5-15
最后登录
2017-4-20

楼主
speedness 发表于 2013-11-11 19:10:34 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
本人参考吴喜之先生的《复杂数据统计方法(第二版)》中的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分类等模型,不知道这样的思路是否合理,求各位帮忙解答,谢谢了!






二维码

扫码加我 拉你入群

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

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

关键词:交叉验证 Bounds script scrip Bound 谷歌 因变量 自变量 Error 模型

沙发
speedness 发表于 2013-11-11 19:44:39
这帖子就这么沉了吗?不能啊!各位帮帮忙啊!

藤椅
speedness 发表于 2013-11-11 20:26:07
还是没人吗…………

板凳
CRouGD 发表于 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


报纸
speedness 发表于 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

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

7
speedness 发表于 2013-11-12 15:20:13
CRouGD 发表于 2013-11-12 11:45
d
论坛貌似会把 ""给弄消失……不明其原因

8
speedness 发表于 2013-11-12 15:21:18
speedness 发表于 2013-11-12 15:20
论坛貌似会把 ""给弄消失……不明其原因
…………两个中括号之间加一个i,无法输入……

9
CRouGD 发表于 2013-11-13 18:51:29
dd[] <- d[w$cluster_ward50==nn]  这里改了试试?

10
CRouGD 发表于 2013-11-13 18:58:10
论坛里 中括号,中间加个i,表示斜体。。所以打不出来。。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-2 06:56