gpt4 book ai didi

python - PySpark:计算按 AUC 分组

转载 作者:太空宇宙 更新时间:2023-11-03 15:01:23 28 4
gpt4 key购买 nike

  • 星火版本:1.6.0

我尝试计算按字段 id 分组的 AUC(ROC 下的面积)。给定以下数据:

# Within each key-value pair
# key is "id"
# value is a list of (score, label)
data = sc.parallelize(
[('id1', [(0.5, 1.0), (0.6, 0.0), (0.7, 1.0), (0.8, 0.0)),
('id2', [(0.5, 1.0), (0.6, 0.0), (0.7, 1.0), (0.8, 0.0))
]

BinaryClassificationMetrics类可以计算给定 (score, label) 列表的 AUC。

我想按键计算 AUC(即 id1, id2)。但是如何通过键将一个“映射”到一个RDD呢?

更新

我试图将 BinaryClassificationMetrics 包装在一个函数中:

def auc(scoreAndLabels):
return BinaryClassificationMetrics(scoreAndLabels).areaUnderROC

然后将包装函数映射到每个值:

data.groupByKey()\
.mapValues(auc)

但是 (score, label) 的列表实际上是 mapValues() 中的 ResultIterable 类型,而 BinaryClassificationMetrics 需要 RDD

是否有任何方法可以将 ResultIterable 转换为 RDD 以便可以应用 auc 函数?或者任何其他计算 AUC 分组的解决方法(无需导入第三方模块,如 scikit-learn)?

最佳答案

您可以使用 sklearn.metrics.auc 而不是使用 BinaryClassificationMetrics并映射每个 RDD 元素值,您将获得每个键的 AUC 值:

from sklearn.metrics import auc

data = sc.parallelize([
('id1', [(0.5, 1.0), (0.6, 0.0), (0.7, 1.0), (0.8, 0.0)]),
('id2', [(0.5, 1.0), (0.6, 0.0), (0.7, 1.0), (0.8, 0.0)])])

result_aucs = data.map(lambda x: (x[0] + '_auc', auc(*zip(*x[1]))))
result_aucs.collect()


Out [1]: [('id1_auc', 0.15000000000000002), ('id2_auc', 0.15000000000000002)]

关于python - PySpark:计算按 AUC 分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37582385/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com