为什么在Apache Spark中Accuracy和Weighted Recall值始终保持相同?

时间:2019-01-05 18:37:58

标签: java apache-spark machine-learning

在使用Apache Spark的朴素贝叶斯实现中,我始终获得相同的准确性值和加权召回值。

我从Spark的教程中实现了朴素贝叶斯算法,除了上面提到的内容之外,它都运行良好。

        Dataset<Row>[] splits = dataFrame.randomSplit(new double[]
                {mainController.getTrainingDataRate(), mainController.getTestDataRate()});
        Dataset<Row> train = splits[0];
        Dataset<Row> test = splits[1];

        NaiveBayes nb = new NaiveBayes();
        NaiveBayesModel model = nb.fit(train);

        Dataset<Row> predictions = model.transform(test);

        MulticlassClassificationEvaluator evaluator = new MulticlassClassificationEvaluator()
                .setLabelCol("label")
                .setPredictionCol("prediction")
                .setMetricName("weightedPrecision");

        precisionSum += (evaluator.evaluate(predictions));

        evaluator.setMetricName("weightedRecall");
        recallSum += (evaluator.evaluate(predictions));

        evaluator.setMetricName("accuracy");
        accuracySum += (evaluator.evaluate(predictions));  

我将代码运行了一百次以上,并且即使在包含数十万行的不同数据文件中进行尝试,其每次的准确性结果也均等于加权召回值。我在哪里做错了?

1 个答案:

答案 0 :(得分:0)

对于单个任务分类,微平均召回率(所谓的加权召回率)在准确性上总是相同的。