如何在KNIME中导出包含全量转换步骤的PMML文件
KNIME多预处理节点串联导出全流程PMML操作方法
核心原因
导出的PMML缺失前置转换步骤,本质是没有串联KNIME节点自带的独立蓝色PMML链路。KNIME的节点默认有两套独立端口:
- 黑色端口:传输实际执行的数据流,只负责跑通工作流拿到训练数据
- 蓝色端口:传输PMML转换规则流,只有串过这条链路的转换逻辑才会被写入最终导出的PMML文件
仅连接黑色数据端口、不串联蓝色PMML端口的情况下,只能捕获到最后一个连到PMML Appender的节点的转换规则。
具体操作步骤
- 确认节点合规性
替换所有社区扩展的第三方预处理节点为KNIME核心插件自带的原生节点:One to Many(独热编码)、Column Filter(列删除)、Normalizer(归一化)、分类模型训练节点,这几类原生节点默认都带PMML端口,第三方节点大概率不支持PMML规则导出。 - 调出隐藏的PMML端口
如果节点上看不到蓝色端口,右键点击对应节点,选择Show/Hide Ports,勾选PMML输入、PMML输出端口选项即可,部分KNIME版本会默认隐藏非数据类端口。 - 双链路并行串联
按工作流的执行顺序,同时连好两条链路,不要混接不同颜色的端口:- 黑色数据链路:按原有逻辑,从数据源依次连One to Many → Column Filter → Normalizer → 模型训练节点
- 蓝色PMML链路:从One to Many的PMML输出端口出发,依次连Column Filter的PMML输入端口 → Column Filter的PMML输出端口连Normalizer的PMML输入端口 → Normalizer的PMML输出端口连模型训练节点的PMML输入端口
- 导出PMML
把模型训练节点的PMML输出端口直接连到PMML Writer节点导出文件即可,不需要额外再接PMML Appender,此时导出的PMML会严格按执行顺序内置独热编码、原始分类列删除、归一化的全部规则,跨平台运行不会再报衍生列不存在的错误。
注意事项
- 不要跳接PMML端口:比如跳过Column Filter直接把One to Many的PMML输出连到Normalizer,会导致PMML内记录的转换顺序和实际数据处理顺序不一致,上线运行仍会报列匹配错误。
- Column Filter节点的PMML端口会自动同步配置好的列删除规则,不需要在PMML链路里重复配置过滤条件。
- 如果用的是不支持PMML输入端口的第三方模型训练节点,就把最后一个预处理节点的PMML输出连到PMML Appender,再把模型输出的模型对象连到PMML Appender的对应端口,合并后再导出即可。
内容的提问来源于stack exchange,提问作者Aayush Shah
相关产品推荐
相关产品推荐

