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

Posted

技术标签:

【中文标题】Apache Spark MLlib:如何从 PMML 导入模型【英文标题】:Apache Spark MLlib: How to import model from PMML 【发布时间】:2017-06-14 17:00:16 【问题描述】:

我有一个 PMML 文件,该文件对未从 MLlib 导出的逻辑回归模型进行编码。

如何使用 Java 中的 MLlib 从 PMML 导入模型以进行评估/预测?

(我知道MLlib can export to PMML,但我需要从PMML导入)

【问题讨论】:

【参考方案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)

【讨论】:

【参考方案2】:

要导入,需要逆序执行PMML导出操作:

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

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

【讨论】:

也许问你这个问题的 OP 已经删除了它,因此你的答案也被删除了。当答案未被接受时,往往会发生这种情况 @user1808924 操作在这里。您没有发布答案,仅发表评论。我删除了你的评论,因为它不具建设性而且非常模糊。感谢您的回答,但这并不是我要问的。我需要一种将 PMML 直接导入 MLlib 的方法,而无需自己解析特征然后实例化模型。 @Qululu 没有更多的“直接”方式。 Apache Spark 和 PMML 使用不同的概念/数据结构来表示逻辑回归模型。您必须在两者之间进行手动翻译,没有神奇的“演员”。或者,您为什么不在 Apache Spark 上对 PMML 模型进行评分,因为它们已经准备好使用 Java 库了。 @user1808924 您好,在 java 中从 PMML 中提取截距和特征系数的最佳方法是什么? @userit1985 最好的方法是以相反的顺序执行 PMML 导出操作 - 字面意思。打开 Apache Spark 的逻辑回归类,滚动到 PMMLExportable 实现,获取代码块并反转其行。无需引入 3rd 方依赖项或发明新的应用程序逻辑,一切就绪。【参考方案3】:

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

【讨论】:

以上是关于Apache Spark MLlib:如何从 PMML 导入模型的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spark MLlib KMeans 从数据中预测集群

Apache Spark MLLib - 使用 IDF-TF 向量运行 KMeans - Java 堆空间

Apache Mahout 和 Apache Spark 的 MLlib 有啥区别?

Apache Spark - MLlib - K-Means 输入格式

使用 Apache Spark MLlib 的朴素贝叶斯

3 分钟学会调用 Apache Spark MLlib KMeans