【发布时间】:2017-01-03 13:57:13
【问题描述】:
我有超过 50 万对真实标签和预测分数(每个 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 计算,以便它可以跨多行广播。
【问题讨论】:
-
所以要清楚,您的
pred和true数组的长度为 500k 条目,每个条目都是形状为 (10k, 1) 的 np.array?如果是,您想计算每个 pred[i|/true[i] 组合的 auc,即每个计算都是独立的? -
计算一对AUC需要多少时间?每对可以允许多少时间
t来满足您的需要(即t * 0.5e6 < T_max?我假设您已经查看了花费时间优化此与成本的成本/收益比购买一台更大的机器(或在计算时在 AWS 租一台)。
标签: python scikit-learn data-science auc