java - 如何在 Apache Spark 中获取评估数据?
问题描述
我实现了一个简单的朴素贝叶斯方法,它与 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 并将 JavaRDD 写入文件,方法是发出predictions.javaRDD().saveAsTextFile(<file path>);
以下是多类分类评估器的指标:
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
推荐阅读
- android - 尝试将 Visualizer 与 ExoPlayer 一起使用时出现“无法初始化 Visualizer 引擎,错误:-3”
- java - java中switch语句的最佳替代选择
- angular - Disable radio button based on condition in Angular popup?
- node.js - MERN堆栈访问控制
- c# - Api 在 Postman 中运行良好,但在 Xamarin Forms 代码中运行良好
- sql - 每个月得到总和
- java - 使用Java将项目添加到HashMap中的存在键
- javascript - 如何以角度解决模糊和同时提交事件
- python - 使用 Beautiful Soup 将多个列表项包装在新标签 ('ul'/'ol') 中?
- python - 循环内的尖峰值