pmml4s model.predict() 返回数组而不是单个值

Posted

技术标签:

【中文标题】pmml4s model.predict() 返回数组而不是单个值【英文标题】:pmml4s model.predict() returns array instead of single value 【发布时间】:2020-08-22 10:31:25 【问题描述】:

我使用 sklearn2pmml 将我的决策树分类器序列化为 pmml 文件。 我在java中使用了pmml4s来反序列化模型并用它来预测。

使用下面的代码对单个传入值进行预测。这应该返回 0/1/2/3/4/5/6。

Object[] result = model.predict(new String[]"220");

预测后的结果数组如下所示:

有人知道为什么会这样吗?是我输入预测值的方式不对还是序列化/反序列化有问题?

【问题讨论】:

除了预测之外,结果还可能包含其他内容,例如各个类别的概率,详见github.com/autodeployai/pmml4s的“了解结果值”一节 【参考方案1】:

每个类别的模型都是确定性的。在您的情况下,这意味着它是 4,概率为 94.5% 或 5,概率为 5.5% 在简单的情况下,如果你想接收价值,你应该选择最大值的索引。

但是,您可以将此概率用于其他控制逻辑,例如在决策不明确时设置阈值(概率约为 0.4 的两个值等)

【讨论】:

看起来很奇怪,因为当我在 python 中创建混淆矩阵时,每个类的确定性都非常不同。同样对于特定的库,我相信 .predict() 方法应该返回一个预测值,但我最终得到了这个数组...... 混淆矩阵和单预测是两个不同的东西。在您的情况下,0.945 是单个令牌(“220”)的模型确定性。另一方面,混淆矩阵是所有给定示例的对 [label, predict_label] 之间匹配的数量(而不是概率)。

以上是关于pmml4s model.predict() 返回数组而不是单个值的主要内容,如果未能解决你的问题,请参考以下文章

Keras model.predict() 为测试输入中的所有值返回相同的预测输出

model.evaluate() 和 model.predict() 的 F1 不同

.predict 返回二进制结果而不是百分比

从 Keras model.predict_generator 计算准确率

Keras 的 predict_generator 未返回正确数量的样本

keras 中 model.predict() 和 model.predict_generator() 之间的预测差异