我有超过一百万对真实标签和预测分数(每个 1d 数组的长度各不相同,长度可能在 10,000-30,000 之间),我需要计算其 AUC。现在,我有一个 for 循环调用:
# Simple Example with two pairs of true/predicted values instead of 500,000
from sklearn import metrics
import numpy as np
pred = [None] * 2
pred[0] = np.array([3,2,1])
pred[1] = np.array([15,12,14,11,13])
true = [None] * 2
true[0] = np.array([1,0,0])
true[1] = np.array([1,1,1,0,0])
for i in range(2):
fpr, tpr, thresholds = metrics.roc_curve(true[i], pred[i])
print metrics.auc(fpr, tpr)
但是,处理整个数据集并计算每个真/预测对的 AUC 大约需要 1-1.5 小时。有没有更快/更好的方法来做到这一点?
更新
500k 个条目中的每一个都可以具有形状 (1, 10k+)。我知道我可以并行化它,但是我被困在只有两个处理器的机器上,所以我的时间实际上只能有效地减少到 30-45 分钟,这仍然太长了。我发现 AUC 计算本身很慢,并希望找到比 sklearn 中可用的更快的 AUC 算法。或者,至少,找到一种更好的方法来向量化 AUC 计算,以便它可以跨多行广播。