基于重采样的性能度量在caret中

我执行了一个带惩罚的逻辑回归,并使用 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$ROC 是否是一个向量(其大小等于我的调优参数 lambda 的大小),其中包含跨重采样的性能度量的均值?

是的;确切地说,其长度将等于你的 tuneGrid 的行数,在这里恰好与你的 lambdaSeq 的长度一致(因为另一个参数 alpha 被保持不变)。

这里有一个快速示例,改编自 caret 文档(使用的是 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,                 ## 这个最后的选项实际上是给 gbm() 的一个选项,它会传递过去                 verbose = FALSE)

在这里,gbmGrid 有3行,即它仅包含三个(3)不同的 n.trees 值,而其他参数保持不变;因此,对应的 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             20gbmFit1$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.1061387gbmFit1$results$Accuracy# [1] 0.7450672 0.7829704 0.7765188

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

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

正确,不是那样的。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注