插入符号包火车:使用 ROC 指标的 LOOCV

如何解决插入符号包火车:使用 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?