r - 混淆矩阵的构建
问题描述
我有一个关于从以下链接构建混淆矩阵的问题:Ranger Predicted Class Probability of each row in a data frame
例如,如果我有以下代码(如链接中的答案所述):
library(ranger)
library(caret)
idx = sample(nrow(iris),100)
data = iris
data$Species = factor(ifelse(data$Species=="versicolor",1,0))
Train_Set = data[idx,]
Test_Set = data[-idx,]
mdl <- ranger(Species ~ ., ,data=Train_Set,importance="impurity", save.memory = TRUE, probability=TRUE)
probabilities <- as.data.frame(predict(mdl, data = Test_Set,type='response', verbose = TRUE)$predictions)
max.col(probabilities) - 1
调用
confusionMatrix(table(Test_Set$Species, max.col(probabilities)-1))
并且,使用这个
caret::confusionMatrix(table(max.col(probabilities) - 1,Test_Set$Species))
这是创建混淆矩阵的正确方法,因为灵敏度、特异性、ppv、npv 的值不同,因为 tp、tn、fp、fn 切换?
如果我要求正类为 1 而不是使用
caret::confusionMatrix(table(max.col(probabilities) - 1,Test_Set$Species), positive = '1')
所以,矩阵中的值是 tp = 13,tn = 36,fp = 0,fn = 1,对吗?
我对如何读取混淆矩阵的值感到困惑。
解决方案
我已经了解了混淆矩阵的构造以及更改类时条目的作用。
使用获得的第 0 类的混淆矩阵
caret::confusionMatrix(table(max.col(probabilities) - 1,Test_Set$Species), positive = '0')
和使用获得的第 1 类
caret::confusionMatrix(table(max.col(probabilities) - 1,Test_Set$Species), positive = '1')
是相同的,并且
在 0 类的情况下:tp = 36,tn = 13,fp = 1,fn = 0,在 1 类的情况下:tp = 13,tn = 36,fp = 0,fn = 1(tp 和tn 和 fp 和 fn 的切换)。
推荐阅读
- html - 如何将 HTML 代码分配给 Windows shell 脚本中的变量?
- selenium - Selenium IDE 测试在 GUI 中运行 - 但在 CL 中运行时失败(链接文本不可见)
- javascript - 谷歌浏览器打开图像文件而不是下载它
- c# - 如何根据用户输入在预制件中旋转多个刚体
- angular - 如何在Angular中为tippy.js工具提示设置不同的颜色
- python - 如何使用 django Forms 在数据库表中为 ChoiceField 添加一列
- r - 在 R/Shiny 中将输出组件设置为空
- javascript - [部分解决]Javascript Regex 允许所有非英文字母、连字符和下划线并阻止其他所有内容?
- python - 从 wiki 词汇表的所有页面中提取页面浏览量?
- python - 如何显示 BERT 分类指标结果?