首页 文章

Caret的火车和混乱矩阵功能

提问于
浏览
1

我试图通过遵循Max Khun的应用预测建模书来学习插入符号的工作方式,但是无法理解插入符号的混淆矩阵函数的工作原理 .

我使用glmnet训练了训练数据集(training [,fullSet]),它有8190行和1073列,如下所示:

glmnGrid <- expand.grid(alpha = c(0,  .1,  .2, .4, .6, .8, 1),
                    lambda = seq(.01, .2, length = 40))

ctrl <- trainControl(method = "cv", 
                 number = 10,
                 summaryFunction = twoClassSummary,
                 classProbs = TRUE,
                 index = list(TrainSet = pre2008),
                 savePredictions = TRUE)

glmnFit <- train(x = training[,fullSet], 
             y = training$Class,
             method = "glmnet",
             tuneGrid = glmnGrid,
             preProc = c("center", "scale"),
             metric = "ROC",
             trControl = ctrl)

然后,我从合适中打印出混淆矩阵:

glmnetCM <- confusionMatrix(glmnFit, norm = "none")

当我查看混淆矩阵时,我得到以下结果:

Reference
Prediction     successful unsuccessful
  successful          507          208
  unsuccessful         63          779

但是,我不明白为什么混淆表只有1757个观测值(1757 = 507 208 63 779),因为插入符号的混乱矩阵 . 文档说“当列车用于调整模型时,它会跟踪混淆矩阵单元格条目保留样品 . “由于训练数据集有8190行,而我使用了10倍的CV,我认为混淆矩阵应该基于819个数据点(819 = 8190/10),但实际情况并非如此 .

显然,我并不完全了解插入符号的火车控制或火车是如何工作的 . 有人可以解释一下我误解了什么吗?

非常感谢你的帮助 .

Young-Jin Lee

1 回答

  • 1

    问题出在控制参数中 . 您正在使用 method = "cv"number = 10 ,但您还指定了用于拟合模型的精确重采样(通过 index 参数) . 我假设这是来自the book的授权数据 . 在第12章中,我们描述了数据分裂方案,其中 pre2008 向量表明8,190个样本中的6,633个将用于训练 . 在模型调整过程中遗漏了1,557:

    > dim(training)
    [1] 8190 1785
    > length(pre2008)
    [1] 6633
    > 8190-6633
    [1] 1557
    

    pre2008 样本的预测就是您在表格中看到的内容 . 如果您尝试重现我们所拥有的内容,则第312页具有正确的语法:

    ctrl <- trainControl(method = "LGOCV",
                         summaryFunction = twoClassSummary,
                         classProbs = TRUE,
                         index = list(TrainSet = pre2008))
    

    如果您只想做10倍的CV,请摆脱 index 参数 .

    tl;dr 控制功能表示10倍CV,但 index 参数表示应该使用1,557个样本 .

    马克斯

相关问题