- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否可以为 Caret 中的 5 折交叉验证中的每个折分别设置训练集和测试集的 ROC 曲线?
library(caret)
train_control <- trainControl(method="cv", number=5,savePredictions = TRUE,classProbs = TRUE)
output <- train(Species~., data=iris, trControl=train_control, method="rf")
我可以执行以下操作,但我不知道它是否返回 Fold1 训练集或测试集的 ROC:
library(pROC)
selectedIndices <- rfmodel$pred$Resample == "Fold1"
plot.roc(rfmodel$pred$obs[selectedIndices],rfmodel$pred$setosa[selectedIndices])
最佳答案
确实,documentation关于 rfmodel$pred 的内容根本不清楚 - 我敢打赌,其中包含的预测是针对用作测试集的折叠,但我无法指出文档中的任何证据;尽管如此,无论如何,您在尝试获取 ROC 的过程中仍然遗漏了一些要点。
首先,让我们将 rfmodel$pred
隔离在一个单独的数据框中,以便于处理:
dd <- rfmodel$pred
nrow(dd)
# 450
为什么是 450 行?这是因为您尝试了 3 个不同的参数集(在您的情况下,mtry
只有 3 个不同的值):
rfmodel$results
# output:
mtry Accuracy Kappa AccuracySD KappaSD
1 2 0.96 0.94 0.04346135 0.06519202
2 3 0.96 0.94 0.04346135 0.06519202
3 4 0.96 0.94 0.04346135 0.06519202
150 行 X 3 设置 = 450。
让我们仔细看看rfmodel$pred
的内容:
head(dd)
# result:
pred obs setosa versicolor virginica rowIndex mtry Resample
1 setosa setosa 1.000 0.000 0 2 2 Fold1
2 setosa setosa 1.000 0.000 0 3 2 Fold1
3 setosa setosa 1.000 0.000 0 6 2 Fold1
4 setosa setosa 0.998 0.002 0 24 2 Fold1
5 setosa setosa 1.000 0.000 0 33 2 Fold1
6 setosa setosa 1.000 0.000 0 38 2 Fold1
obs
包含真实值setosa
、versicolor
和 virginica
包含为每个类别计算的相应概率,并且每行的总和为 1pred
包含最终预测,即上述三列中概率最大的类别如果这就是整个故事,那么您绘制 ROC 的方式就可以了,即:
selectedIndices <- rfmodel$pred$Resample == "Fold1"
plot.roc(rfmodel$pred$obs[selectedIndices],rfmodel$pred$setosa[selectedIndices])
但这并不是故事的全部(仅存在 450 行而不是 150 行就应该已经给出了提示):注意名为 mtry
;事实上,rfmodel$pred
包含所有次交叉验证运行的结果(即所有参数设置):
tail(dd)
# result:
pred obs setosa versicolor virginica rowIndex mtry Resample
445 virginica virginica 0 0.004 0.996 112 4 Fold5
446 virginica virginica 0 0.000 1.000 113 4 Fold5
447 virginica virginica 0 0.020 0.980 115 4 Fold5
448 virginica virginica 0 0.000 1.000 118 4 Fold5
449 virginica virginica 0 0.394 0.606 135 4 Fold5
450 virginica virginica 0 0.000 1.000 140 4 Fold5
这就是您的 selectedIndices
计算不正确的最终原因;它还应该包括 mtry
的特定选择,否则 ROC 没有任何意义,因为它“聚合”了多个模型:
selectedIndices <- rfmodel$pred$Resample == "Fold1" & rfmodel$pred$mtry == 2
--
正如我在一开始所说的,我敢打赌 rfmodel$pred
中的预测是针对作为测试集的文件夹;事实上,如果我们手动计算精度,它们与上面显示的 rfmodel$results 中报告的精度一致(所有 3 个设置均为 0.96),我们知道这是用作 test 的文件夹/em>(可以说,各自的训练精度为1.0):
for (i in 2:4) { # mtry values in {2, 3, 4}
acc = (length(which(dd$pred == dd$obs & dd$mtry==i & dd$Resample=='Fold1'))/30 +
length(which(dd$pred == dd$obs & dd$mtry==i & dd$Resample=='Fold2'))/30 +
length(which(dd$pred == dd$obs & dd$mtry==i & dd$Resample=='Fold3'))/30 +
length(which(dd$pred == dd$obs & dd$mtry==i & dd$Resample=='Fold4'))/30 +
length(which(dd$pred == dd$obs & dd$mtry==i & dd$Resample=='Fold5'))/30
)/5
print(acc)
}
# result:
[1] 0.96
[1] 0.96
[1] 0.96
关于Caret 中每次交叉验证的训练集和测试集的 ROC 曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46887972/
尝试使用 caret 包中的 preProcess 函数时出现以下错误。 predict 函数适用于 knn 和中值插补,但会给出装袋错误。我应该如何编辑对预测函数的调用。 可重现的例子: data
我正在尝试让两个 fontawesome 图标向上插入和向下插入以相互堆叠而不隐藏一个并显示另一个?任何建议将不胜感激。这是一个带有 Bootstrap 和 fontawesome 的 plucker
我目前正在使用列表来处理左侧菜单。一切正常,但现在我想对 font-awsome 执行操作,我正在尝试将 fa-caret-right 移动到 fa-caret-down。 fa-caret-righ
我试图了解 Caret 包中的 5 折交叉验证算法,但我无法找到如何为每一折获取训练集和测试集,而且我也无法从类似的建议问题中找到它。想象一下,如果我想通过随机森林方法进行交叉验证,我会执行以下操作:
在 R 包 caret 中,我们能否使用函数 createDataPartition()(或用于交叉验证的 createFolds())基于多个变量创建分层训练和测试集? 这是一个变量的示例: #2/
我对rfe库中的caret函数有疑问。在插入符号主页link上,他们给出了以下RFE算法: algorithm 对于此示例,我将rfe函数与3折交叉验证结合使用,并将train函数与linear-SV
我们可以通过利用foreach软件包,nnet和插入符号软件包来使用多核并行地训练神经网络模型吗? 我只看到randomforest并行执行。神经网络是否可能。 我对插入符号的火车功能特别感兴趣,该功
我希望使用带有不是默认选项之一的指标的插入符号包。对于下面的示例,我使用了 Metrics 包。我已经阅读了 StackOverflow 上的所有相关问题以及 caret 网站上的指南,但仍然收到错误
实际的并行插入符取决于 R、插入符和 doMC 软件包。如 Parallelizing Caret code 中所述 有人和我在类似的环境中工作吗? R 插入符并行化正常工作的最大 R 版本是什么?
我不知道如何使用R中的caret包提取训练误差(即在训练集上获得的误差)。例如,我有以下模型: data(iris); library(caret); model<-train(Species~.,
我最近在插入符号的 trainControl() Funktion 中发现了随机搜索选项。插入符如何生成参数以及是否有办法提供某种特定于用户的输入(例如从中采样参数的分布)?关于website我只找到
我的训练数据集 (train) 是一个具有 n 个特征 的数据框架,以及一个具有结果 y 的附加列。我建立了3个单独的模型,例如: m1 用于测试数据),并且在最后一步中,DATA_TO_PREDI
我正在尝试通过方法 useDelimiter("&|=|~ |^");. 除了被忽略的 ^ 之外,所有定界符都可以正常工作:这是为什么? 我在扫描仪文档中看不出原因。 最佳答案 你需要转义^,像这样:
我目前正在学习如何在 R 中实现逻辑回归 我已经获取了一个数据集并将其分成训练集和测试集,并希望实现前向选择、后向选择和最佳子集选择 使用交叉验证来选择最佳功能。我正在使用 caret 对训练数据集实
“插入符号”一词起源于文本插入点的何处?我试图用谷歌搜索它,但这很难找到(即使我的历史计算机引用书在这里似乎也无济于事)。 我相当确定我记得一些使用文字插入符号(即:^)作为文本插入标记的古老的 Wa
我正在使用 caret R中的库用于模型生成。我想生成一个 earth (又名 MARS)模型,我想指定 degree此模型生成的参数。根据documentation (第 11 页) earth方法
我想使用 AUC 作为性能度量,但 RFE 仅支持 RMSE、RSquared、Accuracy、Kappa。如何使用自定义指标,例如 auc? 最佳答案 您必须指定一个自定义 summaryFunc
代码: library(nnet) library(caret) #K-folds resampling method for fitting model ctrl <- trainControl(m
我试图通过将“knnImpute”传递给 Caret 的 train() 方法的 preProcess 参数来估算值。基于以下示例,这些值似乎没有被估算,保留为 NA,然后被忽略。我究竟做错了什么?
我正在训练基于来自 Kaggle 的心脏病数据的决策树模型。 . 由于我也在使用 10 倍 CV 构建其他模型,因此我尝试使用带有 rpart 方法的 caret 包来构建树。然而,情节结果很奇怪,因
我是一名优秀的程序员,十分优秀!