https://segmentfault.com/a/1190000039650763

1.简述

PMML全称预言模型标记模型(Predictive Model Markup Language),以XML 为载体呈现数据挖掘模型。PMML 允许您在不同的应用程序之间轻松共享预测分析模型。因此,您可以在一个系统中定型一个模型,在 PMML 中对其进行表达,然后将其移动到另一个系统中,而不需考虑分析和预测过程中的具体实现细节。使得模型的部署摆脱了模型开发和产品整合的束缚。
通俗的讲,我有一个决策树模型,使用效果不错,那么就可以把树的结构(节点间的父子关系,节点内的丰富信息等)序列化为PMML文件,共享给其他人使用。这样无论你的模型是sklearn还是SparkMLib生成的,我们都可以将其转换为标准的XML格式来存储。当我们需要将这个PMML的模型用于部署的时候,可以使用目标环境的解析PMML模型的库来将在模型并作预测。

当训练和预测使用同一种开发语言的时候,PMML 就没有必要使用了,因为任何中间格式都会牺牲掉独有的优化。本文介绍的内容是采用Python语言做模型训练,线上采用 Java 载入模型做预测。在模型训练端,分别介绍了 python sk-learn 和 xgboost 训练模型。

2. 主要结构

PMML文件的结构遵从了用于构建预测解决方案的常用步骤,包括:
数据词典 :
这是一种数据分析阶段的产品,可以识别和定义哪些输入数据字段对于解决眼前的问题是最有用的。这可以包括数值,顺序和分类字段。
挖掘架构 :
定义了处理缺少值和离群值的策略。这非常有用,因为通常情况,当将模型应用于实践时,所需的输入数据字段可能为空或者被误呈现。
数据转换
定义了将原始输入数据预处理至派生字段所需的计算。派生字段(有时也称为特征检测器)对输入字段进行合并或修改,以获取更多相关信息。例如,为了预测停车所需的制动压力,一个预测模型可能将室外温度和水的存在(是否在下雨?)作为原始数据。派生字段可能会将这两个字段结合起来,以探测路上是否结冰。然后结冰字段被作为模型的直接输入来预测停车所需的制动压力。
模型定义
定义了用于构建模型的结构和参数。PMML涵盖了多种统计技术。例如,为了呈现一个神经网络,它定义了所有的神经层和神经元之间的连接权重,对于一个决策树来说,它定义了所有树节点及简单和复合谓语。
输出
定义了预期模型输出。对于一个分类任务来说,输出可以包括预测类及与所有可能类相关的概率。
目标
定义了应用于模型输出的后处理步骤。对于一个回归任务来说,此步骤支持将输出转变为人们很容易就可以理解的分数(预测结果)。
模型解释
定义了将测试数据传递至模型时获得的性能度量标准(与训练数据相对)。这些度量标准包括字段相关性、混淆矩阵、增益图及接收者操作特征(ROC)曲线图。
模型验证
定义了一个包含输入数据记录和预期模型输出的示例集。这是非常重要的一个步骤,因为在应用程序之间移动模型时,该模型需要通过匹配测试。这样就可以确保,在呈现相同的输入时,新系统可以生成与旧系统同样的输出。 如果实际情况是这样的话,一个模型将被认为经过了验证,且随时可用于实践。

  1. <?xml version="1.0"?>
  2. <PMML version="4.3"
  3. xmlns="http://www.dmg.org/PMML-4_3"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  5. <Header copyright="Example.com"/>
  6. <DataDictionary> ... </DataDictionary>
  7. ... a model ...
  8. </PMML>