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

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

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

【问题讨论】:

标签: python scikit-learn sklearn-pandas pmml


【解决方案1】:

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

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

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

  1. /PMML/DataDictionary/DataField 元素中删除ValueInterval 子元素。
  2. 修改ValueInterval 子元素,以便将那些以前看不见的值识别为有效值。例如,您可以定义 Input 元素的边距以包含所有值 [-Inf, +Inf]。请参阅 PMML 规范中对 ValueInterval 元素的说明以了解正确的语法。
  3. 将所有/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, ...)

【讨论】:

猜你喜欢
  • 2015-08-24
  • 2020-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-23
  • 2018-11-25
  • 2018-09-08
  • 1970-01-01
相关资源
最近更新 更多