首页 > 解决方案 > 如何在 pyspark 2.3 中的二元问题(BinaryClassificationEvaluator)中为 CrossValidator 评估器使用 f1-score

问题描述

我的用例是一个常见用例:带有不平衡标签的二进制分类,因此我们决定使用 f1-score 通过交叉验证进行超参数选择,我们使用的是 pyspark 2.3 和 pyspark.ml,我们创建了一个 CrossValidator 对象,但对于评估者,问题如下:

但问题是:我使用的是公司/企业 spark 集群,没有升级当前版本(2.3)的计划,所以问题是:考虑到我们仅限于 spark 2.3,我如何在 CrossValidator 评估器中使用 f1 分数来处理二进制情况

标签: pythonapache-sparkmachine-learningpyspark

解决方案


如果您可以使用 Spark v3.0+,最简单的方法是使用F-measure by label指标并指定标签(并将 beta 设置为 1):

evaluator = MulticlassClassificationEvaluator(metricName='fMeasureByLabel', metricLabel=1, beta=1.0) 

但由于您仅限于 v2.3,您可以

  1. 重新实现 CrossValidator 功能。pyspark.mllib.evaluation.MulticlassMetricsfMeasure按标签的方法。请参阅示例以供参考。

  2. 将您的指标更改为areaUnderPRfrom BinaryClassificationEvaluator,这是一种“模型的优点”指标,应该为您完成这项工作(重新不平衡标签)。这篇博文比较了 F1 和 AUC-PR。


推荐阅读