Spark ML API可将向量转换为多标签分类的概率

时间:2018-09-08 23:00:45

标签: scala apache-spark machine-learning apache-spark-ml

我对Spark ML API有点陌生。我正在尝试通过训练160个分类器(物流或随机森林等)对160个标签进行多标签分类。一旦对Dataset [LabeledPoint]进行了训练,我发现很难获得一个API,而我无法通过一个示例获得每个类的概率。我已经阅读了SO文章,您可以使用管道API并获得概率,但是对于我的用例而言,这将非常困难,因为我将不得不为评估功能确定160个RDD,为每个类获取概率,然后进行联接以根据其概率对课程进行排名。相反,我只想拥有一份评估功能,广播160个模型,然后在map函数中进行预测。我发现自己必须实现这一点,但是我想知道Spark中是否还有另一个便捷的API对不同的分类器(例如Logistic / RF)执行相同的操作,该分类器将表示特征的Vector转换为属于一个类的概率。请让我知道Spark中是否有更好的方法来处理多标签分类。

编辑:我试图创建一个函数来将向量转换为随机森林的标签,但是这很烦人,因为我现在必须在Spark中克隆大树遍历,几乎所有遇到死角的地方都因为某些函数或变量为私有或受保护。如果有错,请纠正我,但是如果还没有实现该用例,我认为它是合理的,因为Scikit-learn已经具备执行此操作的API。

谢谢

1 个答案:

答案 0 :(得分:0)

在Spark MLLib代码中找到罪魁祸首:https://github.com/apache/spark/blob/5ad644a4cefc20e4f198d614c59b8b0f75a228ba/mllib/src/main/scala/org/apache/spark/ml/Predictor.scala#L224

预测方法被标记为受保护的,但实际上对于支持这种用例,它应该是公开的。

此问题已在版本2.4中修复,如下所示: https://github.com/apache/spark/blob/branch-2.4/mllib/src/main/scala/org/apache/spark/ml/Predictor.scala

因此升级到版本2.4应该可以解决问题……尽管我认为2.4尚未发布,所以需要等待。

编辑:对于感兴趣的人,这显然不仅对多标签预测有利,而且据观察,针对单实例/小批量预测的常规分类/回归,延迟也提高了3-4倍(请参见https://issues.apache.org/jira/browse/SPARK-16198了解详情)。