如何从Spark ml lib中的交叉验证中获得准确度,召回率和ROC?

时间:2017-01-18 08:38:54

标签: scala apache-spark machine-learning precision-recall

我使用的是Spark 2.0.2。我也使用“ml”库进行数据集机器学习。我想要做的是运行交叉验证算法并提取所提到的指标(准确性,精确度,召回率,ROC,混淆矩阵)。我的数据标签是二进制的。

通过使用MulticlassClassificationEvaluator,我只能通过访问“avgMetrics”来获得算法的准确性。此外,通过使用BinaryClassificationEvaluator,我可以获得ROC下的区域。但我不能同时使用它们。 那么,有没有办法可以提取所有想要的指标?

2 个答案:

答案 0 :(得分:2)

尝试使用MLlib评估您的结果。

我已将数据集转换为RDD,然后在MLlib中使用MulticlassMetrics

您可以在此处查看演示:Spark DecisionTreeExample.scala

private[ml] def evaluateClassificationModel(
      model: Transformer,
      data: DataFrame,
      labelColName: String): Unit = {
    val fullPredictions = model.transform(data).cache()
    val predictions = fullPredictions.select("prediction").rdd.map(_.getDouble(0))
    val labels = fullPredictions.select(labelColName).rdd.map(_.getDouble(0))
    // Print number of classes for reference.
    val numClasses = MetadataUtils.getNumClasses(fullPredictions.schema(labelColName)) match {
      case Some(n) => n
      case None => throw new RuntimeException(
        "Unknown failure when indexing labels for classification.")
    }
    val accuracy = new MulticlassMetrics(predictions.zip(labels)).accuracy
    println(s"  Accuracy ($numClasses classes): $accuracy")
  }

答案 1 :(得分:1)

您可以按照Apache Spark提供的官方评估指标指南进行操作。 该文件提供了所有评估指标,包括

  • 精确度(正预测值),召回(真实正率), F测量,接收器工作特性(ROC),ROC下的面积 曲线,精确回忆曲线下的面积。

以下是链接:https://spark.apache.org/docs/latest/mllib-evaluation-metrics.html