我使用 sklearn 训练了一个模型,并使用 sklearn2pmml 将其导出为 pmml 格式。有没有办法将该 pmml 文件转换回可以在 python 中导入和运行的文件?
我之所以这样做,是因为我注意到 pmml 模型与 sklearn 模型的行为方式略有不同。具体来说,pmml 文件设置了变量的硬上限和下限(使用训练集中变量的最大值和最小值),而 sklearn 则没有。当 pmml 模型遇到超出这些范围的数据时,我会遇到问题。这只是 pmml 模型和 sklearn 模型之间的一个区别,我希望能够将 pmml 文件重新导入到 python 中来运行它,看看是否还有其他的。
您不需要测试 sklearn2pmml 生成的模型的正确性。它基于JPMML-SkLearn库,它完全覆盖了集成测试 - Scikit-Learn 预测和 PMML 预测被证明是相同的。
您真正的问题是您想要在其预期的“适用范围”之外应用模型。这是一个珠子的想法,因为在这种情况下没有指定模型的行为 - 垃圾输入,垃圾预测。
但是,如果您坚持必须能够在生产环境中向模型提供垃圾,那么只需禁用 PMML 值边界检查即可。有很多方法可以实现这一点:
- Remove
Value
and Interval
子元素来自/PMML/DataDictionary/DataField
元素。
- Modify
Value
and Interval
子元素,以便那些以前未见过的值将被识别为有效值。例如,您可以定义页边距Input
元素包含所有值 [-Inf, +Inf]。参见解释Value and IntervalPMML 规范中的元素以确保语法正确。
- 改变
invalidValueTreatment
全部属性值/PMML/<Model>/MiningSchema/MiningField
元素从“returnInvalid”到“asIs”。如果缺少此属性,则默认为“returnInvalid”。所以你需要插入invalidValueTreatment=asIs
there.
我会推荐选项#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, ...)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)