使用 PMML 实现模型融合及优化技巧

在机器学习的生产环境中,我们经常需要将多个模型的预测结果进行融合,以便提高预测的准确性。这个过程通常涉及到多个模型子分的简单逻辑回归融合。虽然离线训练时我们可以直接使用sklearn的逻辑回归进行训练和调参,但在生产环境中,模型的上线往往需要使用PMML(Predictive Model Markup Language)格式。PMML不仅能够在一个文件中完成多个模型的融合,还可以输出融合后的Sigmoid打分,极大地方便了生产环境中的模型管理和使用。

使用PMML的Segmentation功能进行模型融合

通过阅读PMML文档,我们发现可以利用其Segmentation功能来实现模型的融合。在PMML文件的最外层使用Segmentation并指定multipleModelMethod为"SelectAll",这样就可以在最终输出中包含所有内层Segment的输出。这一功能为模型融合提供了便利。

处理单模型分数缺失问题

在实际应用中,我们可能会遇到单个模型分数缺失或等于某个固定常数(例如-999,代表缺失)的情况。这时,我们希望将其视为融合失败,即不进行融合处理,直接返回一个特定的融合失败值(如-999)。为了实现这一逻辑,我们可以使用Segmentation来包裹整个回归过程,设置multipleModelMethodselectFirst。这样,当内部的第一个Segment检测到某个模型子分等于-999时,就会选择这条路径,并最终输出-999作为融合失败的标志。

xml 复制代码
<Segmentation multipleModelMethod="selectFirst">
  <Segment id="model1SegmentInvalidInput">
    <CompoundPredicate booleanOperator="or">
      <SimplePredicate field="field1" operator="equal" value="-999"/>
      <SimplePredicate field="field2" operator="equal" value="-999"/>
    </CompoundPredicate>
    <RegressionModel modelName="InvalidInputModelmodel1" functionName="regression" targetFieldName="result">
      <MiningSchema>
        <MiningField name="field1" usageType="active"/>
        <MiningField name="field2" usageType="active"/>
        <MiningField name="result" usageType="predicted"/>
      </MiningSchema>
      <RegressionTable intercept="-999"/>
    </RegressionModel>
  </Segment>
  ...
</Segmentation>

将最终分数转换为概率值

为了将回归后的预测值通过Sigmoid函数转换为概率值,从而和线上使用的分数保持一致的量纲,我们可以在有效的回归Segment中使用normalizationMethod='logit'。这样,输出的分数就会经过Sigmoid转换,转化为概率值。

xml 复制代码
<RegressionModel functionName="regression" modelName="ValidInputModelmodel2" algorithmName="regression" normalizationMethod="logit" targetFieldName="result">
  ...
</RegressionModel>

为最终输出重新命名

为了方便调用和解析PMML文件,我们需要在文件的最后为输出统一命名。通过指定OutputFieldname和对应的segmentId,我们可以清晰地标识每个输出值的来源,使得输出结果更加直观易懂。

xml 复制代码
<Output>
  <OutputField name="NewScore1" feature="predictedValue" segmentId="model1Segment"/>
  <OutputField name="NewScore2" feature="predictedValue" segmentId="model2Segment"/>
</Output>

通过以上步骤和优化技巧,我们可以高效地使用PMML实现多个模型的融合,处理单模型分数缺失问题,并将最终分数转换为概率值,同时为输出结果重新命名,以便于调用和解析。这样不仅提升了模型融合的准确性,也增强了生产环境中模型管理的便利性。

参考资料

相关推荐
伊织code18 天前
SAM 2 (Segment Anything ):图像与视频通用分割模型
sam·图像·视频·模型·segment·anything·分隔
伊织code2 个月前
MCP 开放协议
github·协议·模型·mcp
放羊郎2 个月前
宇树人形机器人开源模型
模型·gazebo·人形机器人·宇树·go2·b2·h1
dundunmm2 个月前
【数据挖掘】知识蒸馏(Knowledge Distillation, KD)
人工智能·深度学习·数据挖掘·模型·知识蒸馏·蒸馏
小田_2 个月前
Deepseek 模型蒸馏
模型·蒸馏
zkFun3 个月前
让大模型帮我设计crnn网络及可运行demo,gpt4o&豆包&qwen&deepseek-r1
网络·模型
AIGC安琪3 个月前
开启AI绘画的魔法大门!探索Stable Diffusion的无限魅力~
大数据·网络·人工智能·tcp/ip·ai作画·stable diffusion·模型
伊织code3 个月前
LM2 - Large Memory Models 大型内存模型
内存·memory·模型·lm2·large
AlfredZhao3 个月前
手把手教你喂养 DeepSeek 本地模型
ai·模型·anythingllm·ollama·deepseek
youcans_4 个月前
2025年数学建模美赛:A题分析(1)Testing Time: The Constant Wear On Stairs
python·数学建模·模型·频率·可靠性