我试图使用n次交叉验证来估计逻辑回归分类器的mcr,但是,我得到的结果与我期望的结果相反,而且我是不确定为什么?
这是我完整的R代码:
library(ALL); data(ALL); library(caret)
IsB <- ALL$BT
levels(IsB) <- c(rep(TRUE, 5), rep(FALSE, 5))
ALL.names <- ALL[c('39317_at', '38018_g_at'),]
expr.data <- t(exprs(ALL.names))
data.lgr <- data.frame(IsB, expr.data)
n <- dim(data.lgr)[1]
index <- 1:n
K <- n
flds <- createFolds(index, k = K)
mcr.cv.raw <- rep(NA, K)
for (i in 1:K) {
testID <- flds[[i]]
data.tr <- data.lgr[-testID,]
data.test <- data.lgr[testID,]
reg.lgr <- glm(IsB ~ ., data = data.tr, family = binomial(link = 'logit'))
pred.prob <- predict(reg.lgr, newdata = data.test, type="response")
pred.B <- (pred.prob > 0.5)
mcr.cv.raw[i] <- sum(pred.B != data.test$IsB) / length(pred.B)
}
mcr.cv <- mean(mcr.cv.raw)
mcr.cv
运行此代码将输出0.90625,但是,这几乎与我的预期完全相反。我认为问题来自于for循环中生成的pred.prob的值。从逻辑上讲,我假设产生的概率是data.test中的样本被归类为真的概率,但是当查看为pred.b生成的所有值与IsB中的所有值时,您可以看到他们都与人们期望的完全相反:
pred.b:
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[11] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[21] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[31] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[41] FALSE FALSE TRUE FALSE FALSE FALSE TRUE FALSE FALSE FALSE
[51] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[61] FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
[71] FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
[81] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[91] FALSE FALSE FALSE TRUE FALSE TRUE TRUE TRUE TRUE TRUE
[101] TRUE TRUE FALSE FALSE TRUE TRUE FALSE TRUE FALSE TRUE
[111] FALSE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE
[121] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
ISB:
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[11] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[21] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[31] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[41] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[51] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[61] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[71] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[81] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[91] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE
[101] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[111] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[121] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
对我的逻辑或代码失败的任何帮助表示赞赏!