我使用sklearn训练了一个模型,并使用sklearn2pmml将其导出为pmml格式。有没有一种方法可以将pmml文件转换回可以导入并在python中运行的东西?
我之所以要这样做,是因为我注意到pmml模型与sklearn模型的行为方式略有不同。具体来说,pmml文件为变量设置硬上、下界(在训练集中使用变量的最大值和最小值),而sklearn则不设置。当pmml模型遇到超出这些界限的数据时,我会遇到问题。这只是pmml模型和sklearn模型之间的一个不同之处,我希望能够将pmml文件重新导入python以运行它,并查看是否还有其他的。
发布于 2017-03-10 21:43:09
您不需要测试sklearn2pmml生成的模型的正确性。它基于JPMML-SkLearn库,它对集成测试进行了全面报道--Scikit学习预测和PMML预测是完全相同的。
您真正的问题是,您希望在其预期的“适用性域”之外应用模型。这是一个微乎其微的想法,因为在这种情况下,模型的行为没有被指定--垃圾输入,垃圾预测。
但是,如果您坚持必须能够在生产环境中向您的模型提供垃圾,那么只需禁用PMML值边界检查即可。如何做到这一点有许多方法:
Value元素中删除Interval和Interval子元素。Value和Interval子元素,以便将以前未见的值识别为有效值。例如,可以定义Input元素的边距,以包括所有值-Inf,+Inf。请参阅PMML规范中对Value和Interval元素的解释,以获得正确的语法。invalidValueTreatment元素的/PMML/<Model>/MiningSchema/MiningField属性值从"returnInvalid“更改为”returnInvalid“。如果缺少此属性,则默认为"returnInvalid“。所以您需要在那里插入invalidValueTreatment=asIs。我推荐选项3。您可以使用JPMML-模型库实现流程自动化:
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, ...)https://stackoverflow.com/questions/42722322
复制相似问题