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

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

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

处理单模型分数缺失问题

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

<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转换,转化为概率值。

<RegressionModel functionName="regression" modelName="ValidInputModelmodel2" algorithmName="regression" normalizationMethod="logit" targetFieldName="result">
...
</RegressionModel>

为最终输出重新命名

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

<Output>
<OutputField name="NewScore1" feature="predictedValue" segmentId="model1Segment"/>
<OutputField name="NewScore2" feature="predictedValue" segmentId="model2Segment"/>
</Output>

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

参考资料

使用 PMML 实现模型融合及优化技巧的更多相关文章

  1. 【机器学习入门与实践】数据挖掘-二手车价格交易预测(含EDA探索、特征工程、特征优化、模型融合等)

    [机器学习入门与实践]数据挖掘-二手车价格交易预测(含EDA探索.特征工程.特征优化.模型融合等) note:项目链接以及码源见文末 1.赛题简介 了解赛题 赛题概况 数据概况 预测指标 分析赛题 数 ...

  2. JavaScript 性能优化技巧分享

    JavaScript 作为当前最为常见的直译式脚本语言,已经广泛应用于 Web 应用开发中.为了提高Web应用的性能,从 JavaScript 的性能优化方向入手,会是一个很好的选择. 本文从加载.上 ...

  3. 第十一节,全连接网络中的优化技巧-过拟合、正则化,dropout、退化学习率等

    随着科研人员在使用神经网络训练时不断的尝试,为我们留下了很多有用的技巧,合理的运用这些技巧可以使自己的模型得到更好的拟合效果. 一 利用异或数据集演示过拟合 全连接网络虽然在拟合问题上比较强大,但太强 ...

  4. JavaScript 如何工作:渲染引擎和性能优化技巧

    翻译自:How JavaScript works: the rendering engine and tips to optimize its performance 这是探索 JavaScript ...

  5. PHP程序Laravel框架的优化技巧

    Laravel是一套简洁.优雅的php Web开发框架(PHP Web Framework).它可以让你从杂乱的代码中解脱出来,可以帮你构建一个完美的网络app,而且每行代码都简洁.富于表达力.而性能 ...

  6. 【优化技巧】指数移动平均EMA的原理

    前言 在深度学习中,经常会使用EMA(exponential moving average)方法对模型的参数做平滑或者平均,以求提高测试指标,增加模型鲁棒性. 参考 1. [优化技巧]指数移动平均(E ...

  7. Unity3D渲染优化技巧

    优化图形性能 良好的性能对大部分游戏的成功具有决定作用.下面是一些简单的指导,用来最大限度地提高游戏的图形渲染. 图形需要哪些开销 游戏的图形部分主要开销来自电脑的两个系统: GPU 或 CPU.优化 ...

  8. CUDA上的量化深度学习模型的自动化优化

    CUDA上的量化深度学习模型的自动化优化 深度学习已成功应用于各种任务.在诸如自动驾驶汽车推理之类的实时场景中,模型的推理速度至关重要.网络量化是加速深度学习模型的有效方法.在量化模型中,数据和模型参 ...

  9. SQL Server 聚合函数算法优化技巧

    Sql server聚合函数在实际工作中应对各种需求使用的还是很广泛的,对于聚合函数的优化自然也就成为了一个重点,一个程序优化的好不好直接决定了这个程序的声明周期.Sql server聚合函数对一组值 ...

  10. SQL优化技巧

    我们开发的大部分软件,其基本业务流程都是:采集数据→将数据存储到数据库中→根据业务需求查询相应数据→对数据进行处理→传给前台展示.对整个流程进行分析,可以发现软件大部分的操作时间消耗都花在了数据库相关 ...

随机推荐

  1. Midjourney|文心一格 Prompt:完整参数列表、风格汇总、文生图词典合集

    Midjourney|文心一格 Prompt:完整参数列表.风格汇总.文生图词典合集 1.Midjourney 完整参数列表 参数名称 调用方法 使用案例 注意事项 V5 V4 V3 niji 版本 ...

  2. 2、Web前端学习规划:HTML - 学习规划系列文章

    今天先写Web前端最基本的语言:HTML.目前已经到了HTML5版本,作为Web基本语言,笔者认为这个是最先需要学习的语言. 1.  简介: HTML(HyperText Markup Languag ...

  3. 小知识:Exadata平台去掉密码输错延迟10分钟登录

    生产环境不评价,若是测试环境实在受不了偶尔一次因为密码输错就要等待10分钟才能登陆的限制. 那测试环境下,如何关闭这个限制呢?很简单: # vi /etc/pam.d/sshd --找到并注释掉下面这 ...

  4. Java并发编程-CompletableFuture(上)

    大家好,我是小高先生,这篇文章我将和大家一起学习Java并发编程中很重要的一个类-CompletableFuture. 在Java的并发编程领域,Future接口一直扮演着关键的角色,它定义了一组与异 ...

  5. Codeforces Global Round 22 A-E

    比赛链接 A 题解 知识点:贪心. 显然交错释放最好. 若两类数量不一样,那么较少的一组的一定都可以双倍,剩下的另一组就放进一个优先队列,从大到小和少的一组匹配可以双倍,剩下的直接加. 如果两类数量一 ...

  6. Python OS.mkdirs与OS.makedirs的区别

    os.mkdir只创建最外层目录,如果创建多级目录,报错"FileNotFoundError: [WinError 3] 系统找不到指定的路径".目录存在报错. os.makedi ...

  7. Oracle代码封装工具和DBMS_DDL包的使用

    The WRAP Utility and the DBMS_DDL Package On occasion it is necessary to hide (obfuscate) your PL/SQ ...

  8. powerdesigner导出模型为RTF

    在设计模型的时候需要将设计好的模型进行尺寸调整并复制到word中.这时候就需要利用导出报告功能,导出为word格式. 再做进一步处理. 1.选择[报告]-[Generate Report] 2.自动打 ...

  9. spring boot实现邮箱验证码注册

    最近在设计自己的博客系统,涉及到用户注册与登录验证. 注册这地方我先采用最传统的邮箱验证码方式.具体的实现方式如下: 1.有关如何配置spring boot发送邮件,请参考我的另一篇文章: https ...

  10. 图片Base64编码解码的优缺点及应用场景分析

    随着互联网的迅猛发展,图片在网页和移动应用中的使用越来越广泛.而图片的传输和加载往往是网页性能的瓶颈之一.为了解决这一问题,图片Base64编码与解码技术应运而生.本文将介绍图片Base64相互转换的 ...