编程语言
首页 > 编程语言> > 有没有办法将pmml文件导入python?

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

作者:互联网

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

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

解决方法:

您无需测试sklearn2pmml生成的模型的正确性.它基于JPMML-SkLearn库,该库对集成测试进行了全面介绍-Scikit-Learn预测和PMML预测可证明是相同的.

真正的问题是您想在模型的预期“适用范围”之外应用模型.这是一个念头,因为在这种情况下未指定模型的行为-垃圾输入,垃圾预测.

但是,如果您坚持必须在生产环境中向模型提供垃圾信息,则只需禁用PMML值范围检查.有许多方法可以实现此目的:

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

我建议选择#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, ...)

标签:python,scikit-learn,sklearn-pandas,pmml
来源: https://codeday.me/bug/20191012/1901817.html