【问题标题】:Resampling based performance measure in caret插入符号中基于重采样的性能度量
【发布时间】:2018-06-26 08:15:26
【问题描述】:

我执行惩罚逻辑回归并使用 caret (glmnet) 训练模型。

model_fit <- train(Data[,-1], Data[,1],
               method = "glmnet",
               family="binomial",
               metric = "ROC",
               maximize="TRUE",
               trControl = ctrl,
               preProc = c("center", "scale"),
               tuneGrid=expand.grid(.alpha=0.5,.lambda=lambdaSeq)
               )

根据 caret 文档,函数 train“[...] 计算基于重采样的性能度量”和“在每个数据集上,计算保留样本的性能并汇总每个组合的均值和标准差。"

results 是“一个数据帧”(包含)“训练错误率和调整参数的值。”

model_fit$results$ROC 是跨重采样的性能测量平均值的向量(大小等于我的调整参数 lambda 的大小)吗? (而不是在针对 lambda 的每个值对整个样本重新估计模型后对整个样本计算的性能度量?)

【问题讨论】:

  • 考虑查看model_fit$results 它应该是不言自明的。通常插入符号总是显示通过重新采样获得的性能度量。要获得更详细的答案,我建议您提供具有内置数据集和列车控制参数的可重现代码。

标签: r machine-learning r-caret glmnet


【解决方案1】:

model_fit$results$ROC 是跨重采样的性能度量平均值的向量(大小等于我的调整参数 lambda 的大小)吗?

是的;准确地说,长度将等于tuneGrid 的行数,这里恰好与lambdaSeq 的长度一致(因为唯一的其他参数alpha 保持不变) .

这里是一个简单的例子,改编自caret docs(它与gbmAccuracy 度量标准,但想法是一样的):

library(caret)
library(mlbench)
data(Sonar)

set.seed(998)
inTraining <- createDataPartition(Sonar$Class, p = .75, list = FALSE)
training <- Sonar[ inTraining,]
testing  <- Sonar[-inTraining,]

fitControl <- trainControl(method = "cv",
                           number = 5)

set.seed(825)

gbmGrid <-  expand.grid(interaction.depth = 3, 
                        n.trees = (1:3)*50, 
                        shrinkage = 0.1,
                        n.minobsinnode = 20)

gbmFit1 <- train(Class ~ ., data = training, 
                 method = "gbm", 
                 trControl = fitControl,
                 tuneGrid = gbmGrid,
                 ## This last option is actually one
                 ## for gbm() that passes through
                 verbose = FALSE)

这里,gbmGrid 有 3 行,即它仅由 n.trees 的三 (3) 个不同值组成,其他参数保持不变;因此,对应的gbmFit1$results$Accuracy 将是一个长度为 3 的向量:

gbmGrid
#   interaction.depth n.trees shrinkage n.minobsinnode
# 1                 3      50       0.1             20
# 2                 3     100       0.1             20
# 3                 3     150       0.1             20

gbmFit1$results
#   shrinkage interaction.depth n.minobsinnode n.trees  Accuracy     Kappa AccuracySD   KappaSD
# 1       0.1                 3             20      50 0.7450672 0.4862194 0.05960941 0.1160537
# 2       0.1                 3             20     100 0.7829704 0.5623801 0.05364031 0.1085451
# 3       0.1                 3             20     150 0.7765188 0.5498957 0.05263735 0.1061387

gbmFit1$results$Accuracy
# [1] 0.7450672 0.7829704 0.7765188

返回的 3 个Accuracy 值中的每一个都是我们用作重采样技术的 5 折交叉验证的 validation 折中度量的结果;更准确地说,它是在这 5 次折叠中计算的验证准确度的均值(您可以看到有一个 AccuracySD 列,还包含它的标准差)。

而不是在针对 lambda 的每个值对整个样本重新估计模型后对整个样本计算的性能度量?

没错,不是这样的。

【讨论】:

    猜你喜欢
    • 2015-10-18
    • 1970-01-01
    • 2015-01-05
    • 2019-03-03
    • 1970-01-01
    • 2023-02-15
    • 2018-10-03
    • 2016-08-26
    • 1970-01-01
    相关资源
    最近更新 更多