有没有办法将 pmml 文件导入 python?

Posted

技术标签:

【中文标题】有没有办法将 pmml 文件导入 python?【英文标题】:Is there a way to import a pmml file into python? 【发布时间】:2017-08-01 00:44:10 【问题描述】:

我使用 sklearn 训练了一个模型,并使用 sklearn2pmml 将其导出为 pmml 格式。有没有办法将该 pmml 文件转换回可以在 python 中导入和运行的东西?

我之所以这样做,是因为我注意到 pmml 模型与 sklearn 模型的行为方式略有不同。具体来说,pmml 文件为变量设置了严格的上限和下限(使用训练集中变量的最大值和最小值),而 sklearn 没有。当 pmml 模型遇到超出这些界限的数据时,我会遇到问题。这只是 pmml 模型和 sklearn 模型之间的区别之一,我希望能够将 pmml 文件重新导入 python 来运行它,看看是否还有其他的。

【问题讨论】:

经典问题:如果您使用 Python 训练模型并希望使用 Python 部署它们,为什么需要这个 PMML 中间步骤?为什么不泡菜? 我使用 python 来构建模型,但我要部署它的团队使用 java,因此转换为 pmml 根据型号的不同,复制***.com/questions/41630562/chaid-pmml-parsing-in、***.com/questions/41466964/…、***.com/questions/40048987/…、***.com/questions/41383735/…和/或***.com/questions/40532336/… ... 【参考方案1】:

您无需测试 sklearn2pmml 生成模型的正确性。它基于 JPMML-SkLearn 库,该库全面覆盖集成测试 - Scikit-Learn 预测和 PMML 预测可证明是相同的。

您真正的问题是您想在其预期的“适用范围”之外应用模型。这是一个很好的主意,因为在这种情况下没有指定模型的行为 - 垃圾输入、垃圾预测。

但是,如果您坚持必须能够在生产环境中向模型提供垃圾,那么只需禁用 PMML 值边界检查即可。有很多方法可以做到这一点:

    /PMML/DataDictionary/DataField 元素中删除ValueInterval 子元素。 修改ValueInterval 子元素,以便将那些以前看不见的值识别为有效值。例如,您可以定义 Input 元素的边距以包含所有值 [-Inf, +Inf]。请参阅 PMML 规范中对 ValueInterval 元素的说明以了解正确的语法。 将所有/PMML/<Model>/MiningSchema/MiningField 元素的invalidValueTreatment 属性值从“returnInvalid”更改为“asIs”。如果缺少此属性,则默认为“returnInvalid”。所以你需要在那里插入invalidValueTreatment=asIs

我会推荐选项 #3。您可以使用 JPMML-Model 库自动执行该过程:

org.dmg.pmml.PMML pmml = loadFromFile(..)
org.dmg.pmml.Visitor mfUpdater = new org.jpmml.model.visitors.AbstractVisitor()
  @Override
  public VisitorAction visit(MiningField miningField)
    miningField.setInvalidValueTreatment(InvalidValueTreatmentMethod.AS_IS);
    return VisitorAction.CONTINUE;
  

mfUpdater.applyTo(pmml);
saveToFile(pmml, ...)

【讨论】:

此外,sklearn2pmml 允许您在模型生成期间指定asIs 无效值处理。只需在 Python 脚本中将 CountinuousDomain() 替换为 ContinuousDomain(invalid_value_treatment = "as_is"):github.com/jpmml/sklearn2pmml/blob/master/sklearn2pmml/…

以上是关于有没有办法将 pmml 文件导入 python?的主要内容,如果未能解决你的问题,请参考以下文章

如何将逻辑回归和kmeans pmml文件导入r

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

将 python scikit 学习模型导出到 pmml

可以在 R 中读取 PMML 模型吗?

如何使用 Python 计算目录中的文件数

C 中的嵌入式 python:有没有办法从压缩的 python 存档中正确导入 numpy?