如何在PMML文件中添加非模型相关附加信息?
PMML自定义附加信息嵌入方案
PMML原生支持在单文件内嵌入模型流水线之外的自定义关联信息,无需拆分独立配套文件,常规PMML解析引擎不会因为这类自定义内容出现模型加载错误。
核心实现依据
PMML规范全局预留了通用扩展能力,你提到的列平均值、特征P值、特征与目标变量相关系数这类内容都可以通过规范支持的方式写入:
- 通用扩展标签
<Extension>是PMML标准定义的合法元素,可以嵌入到PMML文档几乎所有层级的节点下,解析引擎遇到不识别的扩展内容会默认跳过,完全不影响原有模型的正常加载、推理逻辑。 - PMML自带的
<ModelStats>节点原生用于存放模型相关的统计指标,结构化程度更高,适合直接存放P值、相关系数这类统计类信息,读取解析比完全自定义内容更方便。
各类信息的存放建议
- 数据集各列平均值:可以直接绑定到对应字段的
<DataField>节点下的<Extension>中,和字段定义强关联,读取时按字段名匹配取值即可;全局统计类指标也可以统一放在根<PMML>节点下的扩展区块集中管理。 - 特征P值、特征与目标变量相关系数:可以绑定到对应特征的
<MiningField>节点下的扩展区,也可以写入<ModelStats>节点作为自定义统计项存储。
示例代码片段
<PMML version="4.4" xmlns="http://www.dmg.org/PMML-4_4"> <Header copyright="custom_model"/> <DataDictionary numberOfFields="3"> <DataField name="feature1" optype="continuous" dataType="double"> <!-- 存储字段平均值 --> <Extension name="column_average" value="26.72"/> </DataField> <DataField name="feature2" optype="continuous" dataType="double"/> <DataField name="target" optype="continuous" dataType="double"/> </DataDictionary> <RegressionModel modelName="demo_reg" functionName="regression"> <MiningSchema> <MiningField name="feature1"> <!-- 存储特征P值、与目标变量的相关系数 --> <Extension name="p_value" value="0.013"/> <Extension name="pearson_corr_with_target" value="0.69"/> </MiningField> <MiningField name="feature2"/> <MiningField name="target" usageType="predicted"/> </MiningSchema> <!-- 原有模型流水线的其他节点正常编写即可 --> </RegressionModel> </PMML>
写入扩展内容时建议统一
name属性的命名规则,避免重名冲突。如果需要存储更复杂的结构化内容,也可以在<Extension>标签下嵌套自定义XML子节点,不受PMML基础语法限制。
内容的提问来源于stack exchange,提问作者Aayush Shah
相关产品推荐
相关产品推荐

