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 不同
从 Keras model.predict_generator 计算准确率