【问题标题】:How to get Precision, Recall, Accuracy and F1 for Binary Class如何获得二进制类的精度、召回率、准确率和 F1
【发布时间】:2019-09-06 17:06:09
【问题描述】:

我正在使用 Apache Spark 的 ML 库构建机器学习模型,比如说 RandomForestClassifier。

我将数据集划分为如下训练和测试

(tr,test) = dataframe.randomSplit([0.8,0.2]), seed = 23)

应用模型

rf = RandomForestClassifier(numTrees=10,featuresCol = "features", 
labelCol = "label")

model= rf.fit(tr)

prediction = model.transform(test)

eval = BinaryClassificationEvaluator(rawPredictionCol="rawPrediction")

eval.evaluate(prediction)

我的印象是这给我的 AUC 并不准确。如何获得此模型的 Precision、Recall、F1 和 Accuracy?

我的类变量是二进制(0 或 1)。

【问题讨论】:

标签: apache-spark pyspark apache-spark-ml


【解决方案1】:

AUC 是 ROC 曲线下的面积。根据我的观点,与准确性无关,但更有用的指标。更好地概述模型的能力。 您需要的所有指标都在这里: https://spark.apache.org/docs/latest/mllib-evaluation-metrics.html#binary-classification 请注意,所有指标都是针对一个标签计算的(取决于您的真阳性是 0 还是 1)。如果您有类别不平衡并且您计算主要类别的指标(比如说 1),那么您的结果可能会产生误导。所以使用对你的模型更重要的标签来正确分类。 请在使用指标之前仔细阅读文档以充分了解它们的全部含义。 干杯。

【讨论】:

    【解决方案2】:

    您可以使用 MulticlassMetrics 来获得准确率和召回率。

    predictionAndLabels = prediction.select("prediction","label").rdd
    # Instantiate metrics objects
    multi_metrics = MulticlassMetrics(predictionAndLabels)
    precision_score = multi_metrics.weightedPrecision
    recall_score = multi_metrics.weightedRecall
    

    或者,您可以获取混淆矩阵并自己计算。

    confusion_matrix = multi_metrics.confusionMatrix().toArray()
    

    【讨论】:

      猜你喜欢
      • 2021-09-01
      • 2017-06-21
      • 2017-03-14
      • 2016-06-19
      • 2023-03-29
      • 2016-01-09
      • 1970-01-01
      • 2021-03-02
      • 2019-11-23
      相关资源
      最近更新 更多