我正在试验ROC-AUC用于二进制分类问题。我想为给定的 AUC 分数生成合成数据。问题的输入如下:
- 标签向量,由 0 和 1 组成。
- 假设给定的 AUC
0.8
我想生成一个分数向量(最好在0和之间1),使用这些标签,具有给定的AUC. 我知道解决方案不是唯一的,但我想不出一种方法来生成这样的分数向量。实现R也很棒。
我正在试验ROC-AUC用于二进制分类问题。我想为给定的 AUC 分数生成合成数据。问题的输入如下:
0.8我想生成一个分数向量(最好在0和之间1),使用这些标签,具有给定的AUC. 我知道解决方案不是唯一的,但我想不出一种方法来生成这样的分数向量。实现R也很棒。
有多种方法可以做到这一点。一种是假设将 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。