再访PMML

嗨伙计! 从今年年初开始,就有了重新设计Drools PMML模块的计划。

在这篇文章中,我将描述我们将如何处理它,目前的状态,未来发展的想法等,等等……敬请期待!

背景

PMML是一个标准,旨在“ 为分析应用提供一种描述和交换由数据挖掘和机器学习算法生成的预测模型的方法。 PMML标准定义了一系列受管理的模型,我们将它们称为“模型”。

换句话说,可能(不是那么明显)的结果是,PMML可能被认为是不同预测模型的协调器 ,每个预测模型都有不同的要求。 Drools有其自己的PMML实现。 它的原始设计是基于100%流口水引擎的,但是从长远来看,这对所有模型都不令人满意,因此决定采用不同的方法来实施新版本。 现在,这里的故事开始了……

要求

简而言之,PMML实现应允许:

  1. 加载PMML文件(xml格式)
  2. 提交输入数据
  3. 返回预测值

听起来很简单,不是吗?

方法

拟议的体系结构旨在遵循“清洁体系结构”原则,以模块化方式满足要求。

为了实现这一点,定义了清晰的边界和可见性的组件。 总体思路是,存在与核心功能严格相关的特定任务,而其他“外部”功能则应保持不可知。 任何想深入研究此问题的人都可以阅读RC Martin撰写的“ Clean Architecture”一书,但从本质上讲,将good-ol的设计原则应用于整个体系结构只是一个问题。 明确定义此目标后,实现该目标所需的步骤为:

  1. 识别核心逻辑和实施细节(特定于模型)
  2. 在“独立”模块中实现核心逻辑
  3. 为特定于模型的模块编写代码

我们选择实现插件模式以将核心逻辑绑定到特定于模型的实现,主要有两个原因:

  1. 增量开发和整体代码管理:核心模块本身不依赖于任何特定于模型的实现,因此可以增量地提供/更新/替换后者,而不会对核心产生任何影响
  2. 可以用自定义的实现替换提供的实现
  3. 我们还预见到了可能会根据原始PMML结构在运行时选择实现的可能性(例如,根据给定PMML的大小使用不同的实现可能是有意义的)

(我作弊:那是三个)

  1. 这是原始PMML模型的Kie表示形式的定义。
  2. 对于每个实际模型,都有特定的实现,并且可以是任何类型的对象(java映射,drools规则等)。

我们可以避免吗? 也许。 我们可以使用由规范的xsd直接生成的模型。 但这是为了描述所有预测模型而设计的,尽管它们中的任何一个都可能以不同的方式和不同的约定使用它。 因此,此内部视图将准确表示每个特定模型所需的内容。

组件

我们确定了以下主要功能组件:

  1. 编译器
  2. 组装工
  3. 执行者

编译器

该组件读取原始PMML文件并将其翻译为我们的内部格式。

它的核心方面只是将xml数据解组到Java对象中。 然后,它使用java SPI检索特定于给定PMML模型的模型编译器(如果找不到模型编译器,则将PMML忽略)。

最后,检索到的模型编译器会将原始PMML模型“转换”为我们特定于模型的表示形式( KiePMMLModels )。

该组件的核心部分不直接依赖于任何特定的Model Compiler实现 ,甚至不依赖于任何Drools / Kie –因此,它基本上是一个轻量级/独立的库。 如果该组件的执行不是很费时,则可以在运行时 (即,在客户项目的执行期间)或在kjar的编译期间(例如,对于流口水实现的模型)调用该组件。

组装工

编译器内KIE知识库创建该组件存储KiePMMLModels。 其他组件都不应该对此组件有任何依赖性/知识。

反过来,它必须对实际没有任何依赖关系/知识/引用 模型编译器实现。

该组件负责PMML模型的实际执行。 它接收PMML输入数据,检索特定于输入数据的KiePMMLModel并计算输出。

对于每个模型,都有一个特定的“执行器”,以根据模型类型允许不同类型的执行实现(drool,外部库等)。 它的核心端仅接收输入数据并检索特定于给定PMML模型的模型执行器(如果找不到,则将忽略PMML)。 最后,检索到的模型执行器将根据输入数据评估预测。 该组件的核心部分不直接依赖于任何特定的Model Executor实现,但是当然严格依赖于Drool运行时。

整体架构

模型实施

基于Drools的模型

一些模型将委托给drools引擎,以在重载下实现最佳性能。 以下是有关此类实现的一般方案的一些详细信息。

  1. 在kjar生成时(或在运行时热加载PMML文件时)调用编译器
  2. 编译器读取PMML文件并将其转换为“ descr”对象(请参见BaseDescr , DescrFactory , DescrBuilderTest )
  3. 不管如何调用模型编译 器,都必须在调用drools编译器后立即对其进行调用,以使基于descr对象生成Java类
  4. 汇编器将生成的类放在kie base中
  5. 执行程序加载生成的“ drools模型”,并使用输入参数调用它

DRL详细信息

  • 对于DataDictionary中的每个字段,必须定义一个特定的DataType
  • 对于树的每个分支/叶子,必须生成全路径规则(即具有到达路径的规则-例如“ sunny”,“ sunny_temperature”,“ sunny_temperature_humidity”)
  • 创建了一个“状态持有者”对象,该对象包含已触发规则的值–更改该值将触发与之匹配的子分支/叶规则(例如,规则“ sunny”将触发“ sunny_temperature”,而后者又将触发) “ sunny_temperature_humidity”)
  • 此类“状态持有人” 可能包含评估的信息/部分结果,最终将在需要结果组合的地方使用
  • 价值缺失策略可以在身份持有者内部实施, 可以作为分解规则实施

测试中

对于每个模型,将有一组标准的单元测试,主要用于验证各个代码单元。 除此之外,在特定于模型的模块(是的,它绕口令)中,将有一个集成测试子模块。 后者将验证不同或多或少复杂的PMML文件的整体正确执行,以尽可能模拟实际情况。

回归

回归模型是第一个实现的模型。 由于其固有的简单性,我们选择为其提供纯基于Java的实现。 目前,它仍处于PR之下,并且正在添加新的完整测试。

在评估了所有优点/缺点之后,我们认为该模型可以作为采用基于流口水的方法来实施的很好的候选者。 作为一个易于遵循的简单模型,我们选择将其用作流口水方法的第一个测试。

待办事项

这是缺少的功能列表,这些功能尚未实现,并且与特定模型没有严格关联。 在开发过程中将对其进行更新:

  • 设置基准框架项目(请参阅Drools基准 )
  • 管理扩展标签(请参阅xsdElement_Extension )
  • 管理SimpleSetPredicate标记(请参阅SimpleSetPredicate )
  • 细分中实现VariableWeight (动态替代静态“权重”值)

不用说,任何评论(特别是好评论)和建议都会受到赞赏。

接下来的几天再回来看看下一步!

再见!

翻译自: https://www.javacodegeeks.com/2020/02/pmml-revisited.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339878.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用计算机怎么弹离人愁数字,拇指琴新手入门曲谱——离人愁

喜欢古风的朋友赶快凑过来啦,最近抖音上超火的离人愁拇指琴教学,喜欢离人愁的小姐姐小哥哥赶快学起来啦!以下琴谱适用于Hugh Tracey G调17键。南非琴出厂调音是G调排列,习惯了C调音阶排列的朋友可能对G调排列不是很适应。因为两者…

支持nvme的linux_Linux nvme驱动初探

本篇研究的nvme驱动基于Linux 3.10.73 ,为什么选择这个版本呢,因为这个版本之后Linux 块层马上就换成支持多队列(可以参考Linux块层多队列之引入内核),小编的SUSE 11.3也正好能编译这个相对比较低的版本。(随后再看最新版本内核上nvme驱动的实现)通过nvm…

jvm7 jvm8_JVM PermGen –您在哪里?

jvm7 jvm8这篇文章介绍了JVM内存结构的一些基础知识,并快速窥视了PermGen,以了解自Java SE 8出现以来它已消失的地方。 裸基础 JVM只是系统上运行的另一个进程,魔术始于java命令。 像任何OS进程一样,它需要内存才能运行。 请记住…

2019网络教育计算机统考模拟试题,最新2019年网络远程教育《计算机应用基础》统考模拟题库500题(含答案)...

2019年网络远程教育统考《计算机应用基础》考试题库500题[含答案]一、选择题1.启动ExCEl2003应用程序后自动建立的工作簿文件的文件名为_______。A.工作簿B.工作簿文件C.BookFilE1D.Book12.OutlookExprEss的主要功能是__________。A.创建电子邮件账户B.搜…

C++类与对象(中)第二篇

前言: C语言中使用运算符是对内置类型的数据进行操作,但是在C中有了对象,导致对象无法通过运算符进行运算,故引入了运算符重载即需要重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特…

松下壁挂式新风系统推荐_松下壁挂式新风怎么样 松下壁挂式新风系统优势介绍【详解】...

现在很多的家庭都是会安装 新风系统 的,这样也是可以保证室内的空气质量的。其实市场上的新风系统品牌是比较多的,比如松下等,其质量是比较不错的,那么松下壁挂式新风系统的优势有哪些?我们来看看小编的相关介绍吧。松下壁挂式新…

ETL万岁

提取转换负载是用于从一个数据系统中提取数据并加载到另一个数据系统中的过程。 涉及的数据系统称为源系统和目标系统。 来自源系统的数据形状与目标系统不匹配,因此需要进行一些转换以使其兼容,该过程称为Transformation 。 转换是由map / filter / re…

云计算机内存不足怎么办,网易云音乐提示内存不足,电脑提示内存不足-

在有些时候我们的手机百度云提示内存不足了,这该怎么办呢?那么下面就由学习啦小编来给你们说说手机百度云提示内存不足的解决方法吧,希望可以帮到你们哦!手机百度云提示内存不足的解决方法一:手机用久了,需要安装杀毒软件&#x…

黑盒攻击的分类_「图像分类」图像分类中的对抗攻击是怎么回事?

欢迎大家来到图像分类专栏,深度学习分类模型虽然性能强大,但是也常常会因为受到小的干扰而性能崩溃,对抗攻击就是专门研究如何提高网络模型鲁棒性的方法,本文简要介绍相关内容。作者 | 郭冰洋编辑 | 言有三1 简介对于人类而言&…

getter/setter_Getters / Setters。 邪恶。 期。

getter/setter从2003年开始,艾伦霍鲁布(Allen Holub)讨论了为什么吸气和塞特方法是邪恶的著名文章,关于吸气/塞特方法是否是反模式,应该避免使用,还是我们在面向对象中不可避免地需要它,这是一个…

flowable画图教程_JeeGit企业级快速开发平台-JeeSite4 Flowable入门教程

注: 998元以下课程无咨询服务该课程包含服务内容:299元含发票在线课程观看权购课后,教学资源联系长春叭姐QQ:3211247533 索要教学内容3.1 第一章 业务流程 BPM、工作流引擎、Flowable、Activiti23.1.1 JeeSite4 Flowable 课程简介…

Java / Spring:如何快速生成整个Swagger记录的CRUD REST API

作为开发人员,我们在日常生活中经常面临的最繁琐的任务之一就是编写良好且易于理解的文档。 无论我们的文档只有几行来解释功能的核心功能,还是表明系统的来龙去脉的成熟文章都没关系。 重要的是,我们试图通过文档传达的信息是准确且可理解的…

计算机中的英语六级作文万能模板,大学英语六级作文万能模板7篇

很多人都觉得六级很难,其实主要是作文不会写,今天我们为大家整理了一些六级作文万能模板,大家可以借鉴一下,相信会对大家的提高有所帮助。大学英语六级作文万能模板1∶ 阐述主题型要求从一句话或一个主题出发,按照提纲…

中的实践 中兴_中兴通讯5G智慧治水业务在千岛湖畔下姜村成功实践

近日,中兴通讯智慧治水业务在千岛湖畔下姜村成功实践。这一业务为实现千岛湖下姜村水域的智能化管理、立体化监控提供了可靠保障,也将浙江电信5G网络、中兴通讯5G端到端解决方案在试商用实践中再推进一步。下姜村曾先后获得“全国创先争优先进基层党组织…

consul宕机配置丢失_简单的配置死机

consul宕机配置丢失编写整个框架的目的是为了处理应用程序的配置。 我更喜欢一种简单的方法。 如果通过配置来表示“ 部署之间可能有所不同的所有内容 ”,那么我们应该尝试使配置保持简单。 在Java中,最简单的选项是不起眼的属性文件。 属性文件的缺点是…

html post前md5加密,post提交及MD5加密

C# POST提交/// /// post 网址提交////// 提交网站/// 参数/// 编码方式///public static string PostWebRequest(string postUrl, string paramData, Encoding dataEncode){string ret string.Empty;try{byte[] byteArray dataEncode.GetBytes(paramData); //转化HttpWebReq…

一加7充电_一加真无线耳机曝光,65W快速充电器获认证

一加8系列发布后,曾有消息显示,一加旗下还有一款被称为一加Z的手机将于今年7月登陆市场。现在,距离传言中提到的发布时间越来越近,也再次有消息提到了这一时间点。不过,这次爆料中的新品并不是手机产品。来自爆料人士 …

从工作中清除代码–使用JUnit 5,Mockito和AssertJ编写可执行规范

可执行规范是可以用作设计规范的测试。 通过启用公共语言(在DDD世界中,这也称为无处不在的语言 ),它们使技术和业务团队能够进入同一页面。 它们充当代码的未来维护者的文档。 在本文中,我们将看到一种编写自动测试的…

怎么使用starwind部署iscsi_2019 年总结 - 多环境多版本的部署

自己几乎经历了部署演进的所有阶段,手动部署、自动部署,部署到服务器、部署到容器。我们也在不断演进并追赶行业前沿的技术/理念。保守估计今年可以基本追赶到行业前沿的最低水平。工作中经历了部署语言的多样化,部署目标的演化/进化&#xf…

家用计算机注意哪些参数,电脑小白买内存条要注意哪些?主要看哪些参数?这些知识要掌握...

内存条是电脑的核心硬件之一,它的作用主要是为CPU服务的,电脑运行的时候,CPU从硬盘里调用数据通过总线寻址放在内存里,内存相当于缓冲处理区,处理好信息后再回馈给CPU,然后电脑再根据指令运行。内存没有记忆…