使用 PMML 实现模型融合及优化技巧
在机器学习的生产环境中,我们经常需要将多个模型的预测结果进行融合,以便提高预测的准确性。这个过程通常涉及到多个模型子分的简单逻辑回归融合。虽然离线训练时我们可以直接使用sklearn的逻辑回归进行训练和调参,但在生产环境中,模型的上线往往需要使用PMML(Predictive Model Markup Language)格式。PMML不仅能够在一个文件中完成多个模型的融合,还可以输出融合后的Sigmoid打分,极大地方便了生产环境中的模型管理和使用。
使用PMML的Segmentation功能进行模型融合
通过阅读PMML文档,我们发现可以利用其Segmentation功能来实现模型的融合。在PMML文件的最外层使用Segmentation并指定multipleModelMethod为"SelectAll",这样就可以在最终输出中包含所有内层Segment的输出。这一功能为模型融合提供了便利。
处理单模型分数缺失问题
在实际应用中,我们可能会遇到单个模型分数缺失或等于某个固定常数(例如-999,代表缺失)的情况。这时,我们希望将其视为融合失败,即不进行融合处理,直接返回一个特定的融合失败值(如-999)。为了实现这一逻辑,我们可以使用Segmentation来包裹整个回归过程,设置multipleModelMethod为selectFirst。这样,当内部的第一个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文件,我们需要在文件的最后为输出统一命名。通过指定OutputField的name和对应的segmentId,我们可以清晰地标识每个输出值的来源,使得输出结果更加直观易懂。
<Output>
<OutputField name="NewScore1" feature="predictedValue" segmentId="model1Segment"/>
<OutputField name="NewScore2" feature="predictedValue" segmentId="model2Segment"/>
</Output>
通过以上步骤和优化技巧,我们可以高效地使用PMML实现多个模型的融合,处理单模型分数缺失问题,并将最终分数转换为概率值,同时为输出结果重新命名,以便于调用和解析。这样不仅提升了模型融合的准确性,也增强了生产环境中模型管理的便利性。
参考资料
使用 PMML 实现模型融合及优化技巧的更多相关文章
- 【机器学习入门与实践】数据挖掘-二手车价格交易预测(含EDA探索、特征工程、特征优化、模型融合等)
[机器学习入门与实践]数据挖掘-二手车价格交易预测(含EDA探索.特征工程.特征优化.模型融合等) note:项目链接以及码源见文末 1.赛题简介 了解赛题 赛题概况 数据概况 预测指标 分析赛题 数 ...
- JavaScript 性能优化技巧分享
JavaScript 作为当前最为常见的直译式脚本语言,已经广泛应用于 Web 应用开发中.为了提高Web应用的性能,从 JavaScript 的性能优化方向入手,会是一个很好的选择. 本文从加载.上 ...
- 第十一节,全连接网络中的优化技巧-过拟合、正则化,dropout、退化学习率等
随着科研人员在使用神经网络训练时不断的尝试,为我们留下了很多有用的技巧,合理的运用这些技巧可以使自己的模型得到更好的拟合效果. 一 利用异或数据集演示过拟合 全连接网络虽然在拟合问题上比较强大,但太强 ...
- JavaScript 如何工作:渲染引擎和性能优化技巧
翻译自:How JavaScript works: the rendering engine and tips to optimize its performance 这是探索 JavaScript ...
- PHP程序Laravel框架的优化技巧
Laravel是一套简洁.优雅的php Web开发框架(PHP Web Framework).它可以让你从杂乱的代码中解脱出来,可以帮你构建一个完美的网络app,而且每行代码都简洁.富于表达力.而性能 ...
- 【优化技巧】指数移动平均EMA的原理
前言 在深度学习中,经常会使用EMA(exponential moving average)方法对模型的参数做平滑或者平均,以求提高测试指标,增加模型鲁棒性. 参考 1. [优化技巧]指数移动平均(E ...
- Unity3D渲染优化技巧
优化图形性能 良好的性能对大部分游戏的成功具有决定作用.下面是一些简单的指导,用来最大限度地提高游戏的图形渲染. 图形需要哪些开销 游戏的图形部分主要开销来自电脑的两个系统: GPU 或 CPU.优化 ...
- CUDA上的量化深度学习模型的自动化优化
CUDA上的量化深度学习模型的自动化优化 深度学习已成功应用于各种任务.在诸如自动驾驶汽车推理之类的实时场景中,模型的推理速度至关重要.网络量化是加速深度学习模型的有效方法.在量化模型中,数据和模型参 ...
- SQL Server 聚合函数算法优化技巧
Sql server聚合函数在实际工作中应对各种需求使用的还是很广泛的,对于聚合函数的优化自然也就成为了一个重点,一个程序优化的好不好直接决定了这个程序的声明周期.Sql server聚合函数对一组值 ...
- SQL优化技巧
我们开发的大部分软件,其基本业务流程都是:采集数据→将数据存储到数据库中→根据业务需求查询相应数据→对数据进行处理→传给前台展示.对整个流程进行分析,可以发现软件大部分的操作时间消耗都花在了数据库相关 ...
随机推荐
- 【Spring】Bean装配类注解
默认注入类型 多个同类型Bean 注入失败 依赖 使用目标(@Target) @AutoWired 通过type 默认首先安装属性名称进行注入 结合@Qualifier注解(value属性)设置注入的 ...
- CE修改器入门:未知数值扫描
经过第二关的练习,你已经理解了如何利用"精确数值"扫描查找数值了,让我们进行下一步,本关主要用来搜索进度条,人物血条等,因为这些数据通常是一个进度条,我们无法直接看到的数据,此时可 ...
- powerDesigner 逆向工程 mysql 生成 PDM
1. 信息补充说明 powerDesigner 16.5 mysql 5.6 主要内容:使用powerDesigner的逆向工程,将mysql中的数据库转换成PDM文件 所需资源: powerDe ...
- WebAssembly核心编程[2]:类型系统
对于绝大多数编程语言来说,类型都是编程的基础,WebAssembly自然也不例外.总的来说,WebAssembly涉及的类型不多,很好掌握,接下来我们就来介绍一下WebAssembly编程涉及到的几种 ...
- Git企业开发控制理论和实操-从入门到深入(一)|为什么需要Git|Git的安装
前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助. 高质量博客汇总https://blog.cs ...
- 每日一道Java面试题:说一说Java中的异常
写在开头 任何一个程序都无法保证100%的正常运行,程序发生故障的场景,我们称之为:异常,在Java中对于异常的处理有一套完善的体系,今天我们就来一起学习一下. 老样子,用一段简单的代码开始今天的学习 ...
- Program文件的作用
Program.cs文件分析 Program.cs文件是至关重要的一个文件,它包含应用程序启动的代码,还可以配置所需要的服务和应用管道的中间件. 需要掌握: 6.0版本前后生成的Program.cs文 ...
- 零基础入门Vue之梦开始的地方——插值语法
一.Vue 我!作为初学者,既然要将Vue,那我一定要介绍一下他是什么?我们可以应用一下官方的话 vue的介绍 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与 ...
- 《ASP.ENT Core 与 RESTful API 开发实战》(第3章)-- 读书笔记(上)
第 3 章 ASP.NET Core 核心特性 3.1 启动与宿主 ASP.NET Core 应用程序启动时,它首先会配置并运行其宿主,宿主主要用来启动.初始化应用程序,并管理其生命周期 ASP.NE ...
- NC16416 [NOIP2017]逛公园
题目链接 题目 题目描述 策策同学特别喜欢逛公园. 公园可以看成一张 N 个点 M 条边构成的有向图,且没有自环和重边.其中 1 号点是公园的入口, N 号点是公园的出口,每条边有一个非负权值,代表策 ...