我正在尝试使用验证方法来确定模型对多个不同训练样本的测试误差。
library(ISLR)
set.seed(1)
train1 <- sample(10000,5000)
train2 <- sample(10000,5000)
train3 <- sample(10000,5000)
trains <- c('train1','train2','train3')
verror = rep(0,3)
for (i in trains){
glm.fit <- glm(default~income+balance,data=Default,family='binomial',subset=i)
logitpred <- predict(glm.fit,Default[-i,],type='response')
classifier <- rep('No',length(logitpred))
classifier[logitpred > 0.5] <- 'Yes'
verror[i] <- 1-mean(Default[-i,]$default==classifier)
}
我的 'for' 循环出现“model.matrix.default(mt, mf, contrasts) 中的错误:变量 1 没有级别”错误,但我不知道为什么。另外,是否有一种简单的方法可以使用应用函数来实现这一点?
问题是i
哪个是字符串而不是向量或数字
尝试代替类似的东西
library(ISLR)
set.seed(1)
train1 <- sample(10000,5000)
train2 <- sample(10000,5000)
train3 <- sample(10000,5000)
trains <- data.frame(train1,train2,train3) ## changed
verror = numeric() ## changed
for (i in trains){
glm.fit <- glm(default~income+balance,data=Default,family='binomial',subset=i)
logitpred <- predict(glm.fit,Default[-i,],type='response')
classifier <- rep('No',length(logitpred))
classifier[logitpred > 0.5] <- 'Yes'
verror <- c(verror, 1-mean(Default[-i,]$default==classifier)) ## changed
}
或使用 sapply
verrorcalc <- function(i){
glm.fit <- glm(default~income+balance,data=Default,family='binomial',subset=i)
logitpred <- predict(glm.fit,Default[-i,],type='response')
classifier <- rep('No',length(logitpred))
classifier[logitpred > 0.5] <- 'Yes'
1-mean(Default[-i,]$default==classifier)
}
verror_alt <- sapply(trains, verrorcalc)
给予
> verror
[1] 0.0286 0.0236 0.0280
> verror_alt
train1 train2 train3
0.0286 0.0236 0.0280
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句