You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用R语言Metrics包批量计算多预测列的AUC值?

解决批量计算多列预测值AUC的问题

这个问题我之前也碰到过!Metrics包的auc()函数默认只处理一对一的向量,直接传多列预测值时,它会把多列的预测值拼接成一个长向量,和真实值循环匹配,这就导致了错误的结果和警告。下面给你两个简单的解决方法,帮你批量计算每个预测列对应的AUC:

方法1:使用基础R的apply()函数

apply()可以对数据框的每一列(或行)重复执行指定函数,非常适合这种批量计算场景:

require(Metrics)

# 你的原始数据集
evaluate <- "true prediction_1 prediction_2 prediction_3
1 0.9 0.5 0.8
1 0.9 0.4 0.7
1 0.8 0.6 0.75
0 0.1 0.3 0.2
0 0.05 0.4 0.1
0 0.15 0.45 0.15"
Table <- read.table(text=evaluate, header = TRUE)

# 按列批量计算AUC
auc_results <- apply(Table[, 2:4], MARGIN = 2, FUN = function(col) {
  auc(Table$true, col)
})

# 查看结果
auc_results

运行这段代码后,你会得到每个预测列对应的AUC值:

prediction_1 prediction_2 prediction_3 
          1.0       0.8333        1.0000 

这里的MARGIN=2表示我们要对进行操作,匿名函数里的col代表当前循环到的预测列,每次都用固定的真实值Table$true和当前列计算AUC。

方法2:使用tidyverse风格的purrr::map_dbl()

如果你习惯用tidyverse工具链,purrr包的map_dbl()也能轻松完成这个任务,代码更简洁:

library(purrr)
library(Metrics)

# 批量计算并返回数值向量
auc_results <- map_dbl(Table[, 2:4], ~ auc(Table$true, .x))

auc_results

map_dbl()会遍历数据框的每一列,~用来定义匿名函数,.x指代当前处理的列,最后自动返回一个数值向量,结果和上面完全一致。

这两种方法都能避免手动逐个列计算的繁琐,也不会出现向量循环匹配导致的错误结果。

内容的提问来源于stack exchange,提问作者Kamil

火山引擎 最新活动