1

我是一位经验丰富的 Python 程序员,试图将一些 Python 代码转换为 Spark 以完成分类任务。这是我第一次在 Spark/Scala 工作。

在 Python 中,Keras/tensorflow 和 sci-kit Learn 神经网络在多类分类方面做得很好,我能够轻松地返回前 3 个最可能的类以及对这个项目至关重要的概率。

我通常成功地将代码移动到 Spark (Scala),并且能够生成正确的预测,但我无法找到一种方法来从 MLlib 中的 MultilayerPerceptronClassifier 返回最高预测类的概率。

我找到的最接近的解决方案是在这篇文章中:如何从 MultilayerPerceptronClassifier 中获取分类概率? 但是,我无法使帖子中的解决方案正常工作,因为它缺少关键代码,或者我对 Scala 太陌生(可能是后者),无法进行必要的调整。

有没有人解决过这个问题?

这些是我环境中的当前版本。Spark 版本:2.1.1 Scala 版本:2.11.8

谢谢你的帮助,

RKB

4

1 回答 1

2

如果你仔细看一下MultilayerPerceptronClassificationModel.transformmodel以及官方文档中示例管道中test定义的)的结果

val result = model.transform(test)

result.printSchema
root
 |-- label: double (nullable = true)
 |-- features: vector (nullable = true)
 |-- rawPrediction: vector (nullable = true)
 |-- probability: vector (nullable = true)
 |-- prediction: double (nullable = false)

您会看到它们包含probability列。

它存储为o.a.s.ml.linalg.Vector列:

result.select($"probability").show(3, false)
+---------------------------------------------------+
|probability                                        |
+---------------------------------------------------+
|[2.630203838780848E-29,1.7323171642231641E-19,1.0] |
|[1.0,1.448487547623119E-121,4.530084532282489E-44] |
|[1.0,5.157808976162274E-122,2.5702890543589884E-44]|
+---------------------------------------------------+
only showing top 3 rows

并且可以使用标准方法访问。

此功能从 Spark 2.3 开始可用(SPARK-12664 暴露概率,MultilayerPerceptronClassificationModel 中的 rawPrediction)。

于 2019-02-06T02:09:06.720 回答