Spark MultilayerPerceptronClassifier类概率

时间:2019-02-06 01:57:39

标签: scala apache-spark probability mlp

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

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

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

我找到的最接近的解决方案是在这篇文章中:How to get classification probabilities from MultilayerPerceptronClassifier? 但是,由于缺少关键代码,或者我对Scala(可能是后者)太陌生,无法进行所需的调整,因此我无法在帖子中找到解决方案。

有人解决了这个问题吗?

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

感谢您的帮助

RKB

1 个答案:

答案 0 :(得分:0)

如果您仔细查看MultilayerPerceptronClassificationModel.transform(定义为in the example pipeline in the official documentationmodeltest的结果

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

,可以使用standard methods进行访问。

此功能自Spark 2.3(SPARK-12664 Expose probability, rawPrediction in MultilayerPerceptronClassificationModel)起可用。