当测试以前从Pickle文件转换出来的PMML对象(从sklearn对象中转储)时,我无法再现与泡菜模型相同的结果。在学习过程中,我们看到,对于X中的输入,我获得了0 1 0作为类,但是在PMML中,我会将概率逼近到11 1。我做错了什么吗?这种模型行为不是我在转换泡菜文件时所期望的。
发布于 2022-08-11 12:50:21
PMML模型根据名称而不是位置标识输入列。因此,不应该使用“匿名”数据存储(如numpy.ndarray
),因为根据定义,无法正确标识输入列。
在这里,输入列的顺序是有问题的,因为RF模型是使用一组随机生成的数据(3x4 numpy.array
)来训练的。RF模型可能只使用一两个输入列,而忽略其余的输入列(例如,"x1“和"x3”非常重要,而"x2“和"x4”则不重要)。在转换过程中,SkLearn2PMML包删除了所有冗余特性。在当前的示例中,RF模型需要一个两列输入数据存储,其中第一列对应于"x1“,第二列对应于"x3";您将传递一个四列输入数据存储,其中第二列被"x2”占用。
TLDR:在使用PMML模型时,执行以下操作:
pandas.DataFrame
(而不是numpy.ndarray
)训练您的模型,并使用相同的数据存储类进行预测。这样,即使SkLearn2PMML包决定消除一些冗余列,列映射也总是正确的。predict(X: numpy.ndarray)
方法!https://stackoverflow.com/questions/73324406
复制相似问题