使用 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实现多个模型的融合,处理单模型分数缺失问题,并将最终分数转换为概率值,同时为输出结果重新命名,以便于调用和解析。这样不仅提升了模型融合的准确性,也增强了生产环境中模型管理的便利性。

参考资料

相关推荐
gis分享者8 天前
GPT-Image-2 图像生成模型新手实战指南
gpt·ai·image·模型·图像生成
魔士于安10 天前
Shader forge技术美术专用
游戏·unity·游戏引擎·贴图·技术美术·模型
学Linux的语莫11 天前
大模型量化知识总结
人工智能·模型·量化
魔士于安11 天前
unity 音乐会场景 unity2022
游戏·unity·游戏引擎·贴图·模型
青山科技分享12 天前
AI大模型正在如何悄悄改变你的生活?
模型··撰写
小北的AI科技分享13 天前
AI大模型搭建,从入门到实践
模型·推理·搭建
艺杯羹17 天前
Claude Code 实现 Computer Use:让 AI 操控你的 Windows 电脑(MCP 平替方案)
vscode·ai·ai编程·模型·claude code
小北的AI科技分享18 天前
AI大模型搭建,从零开始的实战指南
部署·模型·推理
青山科技分享18 天前
从小白到入门:AI大模型搭建到底难不难?
开源·参数·模型
网络研究院19 天前
AI安全格局:前沿模型、智能体AI和AI编码工具如何重塑网络安全与关键基础设施韧性
网络·人工智能·安全·模型·威胁