我是一位经验丰富的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
答案 0 :(得分:0)
如果您仔细查看MultilayerPerceptronClassificationModel.transform
(定义为in the example pipeline in the official documentation的model
和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
,可以使用standard methods进行访问。
此功能自Spark 2.3(SPARK-12664 Expose probability, rawPrediction in MultilayerPerceptronClassificationModel)起可用。