生成给定 AUC 的合成数据

机器算法验证 r 机器学习 模拟 奥克
2022-04-02 02:56:09

我正在试验ROC-AUC用于二进制分类问题。我想为给定的 AUC 分数生成合成数据。问题的输入如下:

  • 标签向量,由 0 和 1 组成。
  • 假设给定的 AUC0.8

我想生成一个分数向量(最好在0和之间1),使用这些标签,具有给定的AUC. 我知道解决方案不是唯一的,但我想不出一种方法来生成这样的分数向量。实现R也很棒。

1个回答

有多种方法可以做到这一点。一种是假设将 AUC 转换为 cohen 的 D,然后仅从 2 个标准正态分布 D 标准差中采样数据。

我们可以根据SALGADO, Jesús F. 的公式将 AUC 转换为 D。将正态曲线下的面积 (AUC) 转换为 Cohen 的 d、Pearson 的 r pb 、优势比和自然对数优势比:两个转换表。应用于法律背景的欧洲心理学杂志[在线]。2018 年,第 10 卷,第 1 期,第 35-47 页。ISSN 1989-4007。 http://dx.doi.org/10.5093/ejpalc2018a5

在此处输入图像描述

R 代码中的哪个会像这样工作

auc <- 0.95

t <- sqrt(log(1/(1-auc)**2))
z <- t-((2.515517 + 0.802853*t + 0.0103328*t**2) / 
          (1 + 1.432788*t + 0.189269*t**2 + 0.001308*t**3))
d <- z*sqrt(2)

n <- 10000
x <- c(rnorm(n/2, mean = 0), rnorm(n/2, mean = d))
y <- c(rep(0, n/2), rep(1, n/2))

library(AUC)
auc(roc(x, as.factor(y)))

# out
# [1] 0.9486257

当然,由于我们是抽样,这将平均产生正确的 AUC,但具体样本不会完全是所需的 AUC。