r - pROC 如何处理多级因子标签?
问题描述
我正在计算 R 中模型的 AUC。该模型已经过训练以预测两级因子(好/坏)。它已应用于具有三级结果(好/坏/缺失)的数据。我对得分部分很好。我根据每个观察的一组预测变量得到一个概率。
我不明白的部分是当我使用 计算 AUC 时会发生什么roc(data$label, data$score)
,因为现在roc$label
有 3 个级别(好/坏/缺失),但分数是在只有 2 个级别(好/坏)的数据上训练的。新级别被忽略了吗?我应该从数据中手动排除所有此类观察结果以获得准确的 AUC 测量吗?
data <- structure(list(label = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 1L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L), .Label = c("missing",
"good", "bad"), class = "factor"), score = c(0.151147571051044,
0.0411329810171418, 0.0688491931089625, 0.0457818202643564, 0.0411038297454905,
0.0652004019004794, 0.105964115208592, 0.0538514549969684, 0.0415476305130247,
0.0533831523731155, 0.0639788335617257, 0.0434341986489527, 0.0520826001358534,
0.0642210548642832, 0.0536219837901353, 0.0415821872079014, 0.0416555537422,
0.0491937562992912, 0.0469082976746886, 0.0538194884632293)), row.names = c(NA,
-20L), class = c("tbl_df", "tbl", "data.frame"))
roc(data$label, data$score)
解决方案
类别missing
是data$label
因子的 3 个水平之一。
您可以设置missing
为真正的缺失,然后降低此级别:
library(pROC)
# Set 'missing' to a real missing
data$label[data$label=="missing"] <- NA
# Drop 'missing' levels from 'label' factor
data$label <- droplevels(data$label)
# ROC estimation
roc(data$label, data$score)
输出是:
Setting levels: control = good, case = bad
Setting direction: controls > cases
Call:
roc.default(response = data$label, predictor = data$score)
Data: data$score in 16 controls (data$label good) > 1 cases (data$label bad).
Area under the curve: 0.8125
推荐阅读
- laravel - 我将如何在 laravel eloquent 的急切加载中加入条件
- mysql - Mysql:如何在自动增量列中的每个增量号上设置间隙 5 的数量?
- flutter - `颤振医生`报告错误`Android工具链-为Android设备开发`
- python-3.x - 无法在亚马逊中提取商品标题
- python - pyqt5.14 支持 Markdown 吗?
- linux - 使用 awk 比较两个文件并打印不匹配的记录
- html - 尝试使用下拉菜单更改渐变背景
- html - 使用正确的单位获取元素宽度
- angular - 我指的是“angular.json”中“node_modules”中的“bootstrap”但是当我用一个例子来做的时候,这些样式并不适用
- scala - Spark LSH approxSimilarityJoin 花费了太多时间