关于R中的K折叠交叉验证

关于R中的K折叠交叉验证,r,cross-validation,confusion-matrix,R,Cross Validation,Confusion Matrix,我创建这个函数代码是为了对逻辑回归执行5次交叉验证 require(ISLR) folds <- cut(seq(1,nrow(Smarket)),breaks=5,labels=FALSE) log_cv=sapply(1:5,function(x) { set.seed(123) testIndexes <- which(folds==x,arr.ind=TRUE) testData &

我创建这个函数代码是为了对逻辑回归执行5次交叉验证

  require(ISLR)
    folds <- cut(seq(1,nrow(Smarket)),breaks=5,labels=FALSE)



    log_cv=sapply(1:5,function(x)
    {
      set.seed(123)           

      testIndexes <- which(folds==x,arr.ind=TRUE)
      testData <- Smarket[testIndexes, ]
      trainData <- Smarket[-testIndexes, ]
      glm_log=glm(Direction ~ Lag1 + Lag2 + Lag3 + 
Lag4 + Lag5 + Volume ,family = "binomial",  data = trainData)
      glm.prob <- predict(glm_log, testData, "response")
      glm.pred <- ifelse(glm.prob >= 0.5, 1, 0)
      return(glm.pred)

    }
    )

有没有办法结合上述结果,使用5倍交叉验证得到混淆矩阵?

混淆矩阵由真阳性、假阳性、真阴性、假阴性的数量组成。通过交叉验证,您需要每个折叠的平均值。您有一个预测矩阵,
log\u cv
,需要与您的
testData
进行比较

一种方法是将测试数据转换为矩阵,尽管我相信这里的其他人会推荐tidyverse:

truth <- matrix(testData$response, ncol = 5, nrow = nrow(testData))
真正的否定:

mean(apply(!truth & !testData, 2, sum))
mean(apply(!truth & testData, 2, sum))
误报:

mean(apply(truth & testData, 2, sum))
mean(apply(truth & !testData, 2, sum))
假阴性:

mean(apply(!truth & !testData, 2, sum))
mean(apply(!truth & testData, 2, sum))