You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将DataFrame Mapper转换为PMML?转换配置丢失问题求助

解决方案

问题1:单独DataFrameMapper生成的PMML缺失缩尾配置

这是因为sklearn2pmml对仅包含预处理步骤的Pipeline,默认不会完整序列化预处理逻辑,需添加一个占位的“模型”步骤来触发完整导出:

修改代码,在Pipeline中加入IdentityTransformer作为占位:

from sklearn.base import IdentityTransformer

# 原有计算train_stats、continous_domains、data_mapper的代码保持不变

pmml_pipeline = PMMLPipeline(steps = [
    ('DataframeMapper', data_mapper),
    ('Identity', IdentityTransformer())  # 添加占位步骤
])
path_name = f"Trafo_{str(datetime.now().strftime('%Y_%m_%d_%H-%M'))}.pmml"
sklearn2pmml(pmml_pipeline, path_name, debug=True)

重新生成的PMML会完整包含ContinuousDomain的缺失值处理、缩尾高低值等配置。

问题2:添加LogisticRegression后无法获取转换后的所有值

PMML默认仅输出模型预测结果,若要同时保留预处理后的特征,可按两种方式处理:

方案A:分离数据转换与模型(推荐)

完全符合你“分离处理逻辑”的需求:

  1. 按问题1的方法生成仅包含预处理逻辑的PMML,用于单独做数据缩尾转换;
  2. 用预处理后的数据集训练LogisticRegression,生成仅包含模型的PMML,用于后续预测。

方案B:同一PMML输出特征+预测结果

通过配置Pipeline,让PMML同时输出预处理特征和模型预测:

from sklearn.linear_model import LogisticRegression
from sklearn2pmml.preprocessing import SelectAllTransformer

# 原有data_mapper代码保持不变

pmml_pipeline = PMMLPipeline(steps = [
    ('DataframeMapper', data_mapper),
    ('SelectAll', SelectAllTransformer()),  # 保留所有预处理特征
    ('Classifier', LogisticRegression())
])

# 配置PMML输出规则
pmml_pipeline.configure({
    "pmml.features_output": True,
    "pmml.predicted_fields": ["predicted_class", "probability(0)", "probability(1)"]
})

path_name = f"Model_with_Trafo_{str(datetime.now().strftime('%Y_%m_%d_%H-%M'))}.pmml"
sklearn2pmml(pmml_pipeline, path_name, debug=True)

生成的PMML会同时输出预处理后的所有特征列,以及模型的预测类别和概率值。

额外提示

  • 确保sklearn-pandas和sklearn2pmml使用兼容的最新稳定版本;
  • 可通过PMML验证工具检查生成文件的结构,确认缩尾配置是否生效。

内容的提问来源于stack exchange,提问作者Habenzu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 00:53:11