插入符号包火车:使用 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

说明:

  1. 我想使用 k-最近邻方法并通过使用 AUC 作为度量来找到最佳邻居数 k。

  2. 我首先加载数据集“iris”并将响应变量设为“y”。

  3. 然后,我尝试使用留一法交叉验证来计算每个“k”的 AUC(参见第 6 行(方法 =“LOOCV”))

  4. 在最后的结果中,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 (将#修改为@)