Apache Spark MLlib:如何从PMML导入模型

8
我有一个PMML文件,其中编码了一个逻辑回归模型,该模型并未从MLlib导出。
如何使用Java中的MLlib从PMML导入模型进行评估/预测?
(我知道MLlib可以导出到PMML,但我需要从PMML导入)
3个回答

1
你可以使用PMML4S-Spark将PMML导入为SparkML转换器,然后在Scala中进行预测/评估,例如:
import org.pmml4s.spark.ScoreModel

val model = ScoreModel.fromFile("the/pmml/model/path")
val scoreDf = model.transform(df)

如果你使用PySpark,例如,你可以使用PyPMML-Spark
from pypmml_spark import ScoreModel

model = ScoreModel.fromFile('the/pmml/model/path')
score_df = model.transform(df)

0

您是否考虑过使用 PMML 加载器,例如 jpmml-spark?根据您构建模型的位置和使用的 pmml 导出器,可能会存在互操作性问题。我相信 sklearn2pmml 基于 jpmml 库,因此如果您将它们结合使用,应该会有很好的互操作性。


0

要导入,您需要按相反的顺序执行PMML导出操作:

  1. 从PMML的RegressionModel/RegressionTable元素中提取截距和特征系数。
  2. 使用这些值实例化Spark ML的LogisticRegressionModel对象。

这是我第二次发布这个答案。我想知道为什么第一个答案被删除了(没有任何讨论/解释)?


也许提问者已经删除了问题,因此您的答案也随之被删除。当答案未被采纳时,这种情况往往会发生。 - eliasah
@user1808924 在此。您没有发布答案,只是一条评论。我删除了您的评论,因为它既不具有建设性,也非常模糊。 感谢您的回答,但这并不完全是我所问的。我需要一种直接将PMML导入MLlib的方法,而无需自己解析特征,然后实例化模型。 - Qululu
@Qululu,没有更“直接”的方法了。Apache Spark和PMML使用不同的概念/数据结构来表示逻辑回归模型。你必须在两者之间进行手动翻译,没有神奇的“转换运算符”。或者,为什么不直接在Apache Spark上评分PMML模型-有现成的Java库可供使用呢? - user1808924
@user1808924 你好,用Java从PMML中提取截距和特征系数的最佳方法是什么? - userit1985
1
@userit1985 最好的方法就是按照相反的顺序进行PMML导出操作。打开Apache Spark的逻辑回归类,滚动到PMMLExportable实现,在其中获取代码块,并将其行颠倒。无需引入第三方依赖或发明新的应用逻辑,所有的都在其中。 - user1808924

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接