如何解决插入符号包火车:使用 ROC 指标的 LOOCV
我想知道以下代码是如何工作的。
> rm(list = ls())
> data(iris)
> head(iris)
> iris$y <- factor((iris$Sepal.Length > 6),labels = c("no","yes"))
> library(caret)
> train.control <- trainControl(method = "LOOCV",summaryFunction = twoClassSummary,classprobs = T)
> knn.train <- train(y ~ . -Sepal.Length,data = iris,method = "knn",preProcess = c("center","scale"),metric = "ROC",tuneGrid = expand.grid(k = 1:10),trControl = train.control)
> head(knn.train$results)
k ROC Sens Spec
1 1 0.8337631 0.8314607 0.8360656
2 2 0.8702339 0.8651685 0.7540984
3 3 0.8929821 0.8314607 0.7868852
4 4 0.9187696 0.8314607 0.7868852
5 5 0.9101124 0.8202247 0.8032787
6 6 0.9067968 0.7977528 0.8524590
说明:
-
我想使用 k-最近邻方法并通过使用 AUC 作为度量来找到最佳邻居数 k。
-
我首先加载数据集“iris”并将响应变量设为“y”。
-
然后,我尝试使用留一法交叉验证来计算每个“k”的 AUC(参见第 6 行(方法 =“LOOCV”))
-
在最后的结果中,k:邻居数/ROC:给定k的ROC曲线下面积/Sens:给定k的概率临界值0.5的敏感性/Spec:对给定k的特异性给定 k 的概率截止 0.5
这是我的问题。我们如何用 LOOCV 计算 AUC?
考虑一下,我们可以先除第一个单元,然后使用其他单元和给定的 k 拟合模型。
接下来,我们将尝试计算第一个单元的 AUC。
但是,如果我们只有一个单位,ROC 曲线可能只有两个点,(1,0) 和 (1,1),因为调整概率阈值,我们只会得到零或一的敏感性和特异性。
然后,我认为,我们无法计算第一个单元的 AUC,然后等效地我们无法使用 LOOCV 计算 AUC。
但是,上面的代码确实有效!我错过了什么重要的点吗?
一句话,我无法理解method = "LOOCV"(在第6行代码中)和method = "knn"(在第7行代码中)的组合
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。