能否在单个PMML文件中运行回归器与分类器两种不同模型?
如何将独立的回归器与分类器打包到单个PMML文件中
完全可行,PMML规范原生支持将多个独立模型(无论模型类型、输入输出是否一致)打包到单个文件中,还能通过这种方式减少加载时的IO开销,契合你降低加载时间的需求。
具体实现方案
基于PMMLPipeline的扩展实现(推荐)
常规PMMLPipeline是单输入单输出结构,但可以通过自定义子管道结合PMML的Segmentation特性实现多模型打包:- 为回归器和分类器分别创建独立的子管道,各自处理对应的X矩阵;
- 将两个子管道整合到一个父管道中,通过设置
segmentationType="independent"标记两个模型彼此独立; - 利用
sklearn2pmml这类工具库,可以直接将复合管道导出为PMML文件,每个模型会自动生成对应的输入输出字段定义。
示例代码思路:
from sklearn2pmml import PMMLPipeline from sklearn.linear_model import LinearRegression from sklearn.ensemble import RandomForestClassifier # 回归器子管道 reg_pipeline = PMMLPipeline([ ("regressor", LinearRegression()) ]) reg_pipeline.fit(X_reg, y_reg) # 分类器子管道 clf_pipeline = PMMLPipeline([ ("classifier", RandomForestClassifier()) ]) clf_pipeline.fit(X_clf, y_clf) # 构建复合PMML结构(需借助sklearn2pmml的扩展API或手动拼接) # 最终导出为单个PMML文件手动构建PMML XML结构(无需PMMLPipeline)
如果不依赖工具库,可以直接编写PMML XML:- 在PMML的
Model节点下添加Segmentation节点,设置segmentationType="independent"; - 每个
Segment节点中分别嵌入RegressionModel和ClassificationModel,各自定义专属的MiningSchema(输入字段)和Output(输出字段); - 确保所有输入字段都在
DataDictionary中声明,输出字段使用唯一名称区分(比如regression_pred和classification_pred)。
- 在PMML的
加载性能优化要点
- 单个PMML文件只需一次IO读取和XML解析,相比加载两个独立文件,能直接减少IO和解析的双重开销;
- 可对PMML文件进行gzip压缩,进一步缩小文件体积,加快传输和加载速度;
- 选择支持批量解析模型段的PMML解析器,避免逐个模型解析的额外耗时。
关键注意事项
- 两个模型的输入字段需在
DataDictionary中完整定义,避免字段缺失导致解析失败; - 输出字段必须设置唯一标识,防止模型输出混淆;
- 导出后使用PMML规范验证工具检查文件合法性,确保符合PMML标准(比如PMML 4.4及以上版本)。
内容的提问来源于stack exchange,提问作者Daria
相关产品推荐
相关产品推荐

