我实现了一个简单的朴素贝叶斯方法,与Spark教程中给出的示例完全相同。以下是我实现的方法:
public void applyNaiveBayes(String fileWithBinaryLabelsPath){ Dataset<Row> dataFrame = sparkBase.getSpark().read().format("libsvm").load(fileWithBinaryLabelsPath); Dataset<Row>[] splits = dataFrame.randomSplit(new double[]{0.8, 0.2}, 1234L); 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); predictions.show(); MulticlassClassificationEvaluator evaluator = new MulticlassClassificationEvaluator() .setLabelCol("label") .setPredictionCol("prediction") .setMetricName("accuracy"); double accuracy = evaluator.evaluate(predictions); System.out.println("Test set accuracy = " + accuracy);}
它运行得很好。但是我还需要做一件事。这里我使用了20%的数据作为测试数据。计算后,我想获取结果数据,也就是朴素贝叶斯对每行的预测结果。在Java中我该如何做到这一点?
回答:
要将预测数据集保存到文件中,可以将Dataset转换为JavaRDD,并通过执行predictions.javaRDD().saveAsTextFile(<file path>);
将JavaRDD写入文件。
以下是多类分类评估器的指标:
https://spark.apache.org/docs/2.2.0/api/java/org/apache/spark/ml/evaluation/MulticlassClassificationEvaluator.html#metricName–
由于您使用的是二元分类的朴素贝叶斯模型,您需要使用二元分类评估器:
https://spark.apache.org/docs/2.0.1/api/java/org/apache/spark/ml/evaluation/BinaryClassificationEvaluator.html