pmml
如今,传感器已无处不在,从家庭中的智能仪表到对深水石油钻机等设备和结构的监视。 为了理解从这些传感器收集的所有数据,预测分析需要开放标准,该标准允许系统进行通信,而不会妨碍专有代码和不兼容性。 PMML是用于表示预测分析或数据挖掘模型的标准。 借助PMML,可以在一个系统中构建预测性解决方案,并在另一个系统中部署该解决方案,然后立即将其投入工作。
对于石油和化学工业,预测性维护是一种应用,其中可以对从传感器捕获的原始数据进行预处理,并用于构建预测性解决方案,从而可以在机械故障发生之前对其进行检测。 在墨西哥湾发生悲剧之后,预测分析和开放标准可以为确保安全性和过程可靠性提供另一种工具。
作为表示预测解决方案的事实上的标准,PMML允许以简单的方式将模型和数据转换一起表示。 当用来表示构成预测解决方案的所有计算时,PMML不仅成为数据分析,模型构建和部署系统之间的桥梁,而且还成为公司内部参与分析过程的所有人员和团队之间的桥梁。 这是非常重要的,因为它可用于传播知识和最佳实践以及确保透明度。
本节重点介绍特定PMML元素涵盖的所有预测建模技术。 尽管每年都会提出无数种不同的技术,但是在成为标准的一部分之前,它们需要得到大量数据挖掘从业人员的证明和采用。 从2009年发布的4.0版开始,PMML为以下建模或统计技术提供了特定元素:
AssociationModel
元素 ClusteringModel
元素 TreeModel
元素 NaïveBayesModel
元素 NeuralNetwork
元素 RegressionModel
和GeneralRegressionModel
元素 RuleSetModel
元素 SequenceModel
元素 SupportVectorMachineModel
元素 TextModel
元素 TimeSeriesModel
元素 这些技术使您可以从人眼看不到的历史数据中提取模式。 例如, 关联规则经常用于在大规模交易数据中查找产品之间的规则或关系。 当从超市获得销售数据时,关联规则将用于发现购买商品A和B的客户也购买了商品C。关联规则传达的信息可用于推动营销活动以及产品在内部的放置一家商店。
另一方面,顾名思义, 群集模型用于基于预定的相似性度量将数据群集到特定的存储桶中。 聚类模型可以是基于中心的,其中聚类中心是由数据矢量定义的,也可以是基于分布的,其中聚类中心是由统计数据定义的。 当投入使用时,集群模型会将传入的数据分配给中心最近的集群。
另一种称为决策树的常用建模技术实现了一种树状结构,其中数据由一系列决策节点进行分区。 在分类树的情况下,叶节点定义特定的类。 对于需要解释预测性决策依据的应用,决策树是他们的最爱。 developerWorks文章“什么是PMML?”着重讨论了另一种技术,即神经网络 ,该技术提供了一种非线性方法来提取数据字段之间的关系(请参阅参考资料中的链接)。 但是,与所使用的建模技术无关,目标很明确:能够找到数据中的模式或对输入数据与它们试图预测的输出之间的复杂关系进行建模。
预测分析的最新趋势是使用几种统计技术(也称为模型集合)的组合来解决单个问题。 在这种情况下,每个模型都会产生一个预测,然后将其组合为总体结果。 就像过去认为两个脑袋比一个脑袋更好的信念一样,考虑到不同的技术会从不同的数学角度看待数据,因此将它们组合在一起可以提高预测性能。 为了解决使用多种技术或模型来解决单个问题的问题,PMML定义了一个称为MiningModel
的多模型元素。 它提供了一系列方法,可让您组合不同模型的输出。 例如多数票和加权平均数。
上面讨论的模型元素充当锚,其中特定的建模技术以PMML表示。 实际上,每个模型元素都封装了详细表示每种建模技术所需的所有属性和子元素,其参数和结构。 但是,就象预测解决方案的大脑一样,它的模型也是如此,它的眼睛是为模型提供原始和派生输入字段的数据。 由于PMML不仅可以代表大脑,还可以代表眼睛,因此它能够传递定义整个预测解决方案所需的能力。
为了实现这一壮举,PMML定义了许多元素和属性,以及管理它们使用的特定顺序。 PMML文件始终以用于数据设置的元素开头。 数据设置完成后,PMML允许定义数据预处理步骤,然后定义模型本身。 让我们看看从数据设置开始的所有这三个步骤。
PMML指定了一系列元素,这些元素用于定义感兴趣的数据字段。 DataDictionary
元素用于指定模型正在使用的所有原始输入数据字段。 清单1显示了如何在DataDictionary
元素中表示一个名为pressure
的数字字段。 注意,除了类型信息之外,它还允许指定有效值的间隔。 在此示例中,任何小于0或大于100的值都被视为无效。
DataDictionary
元素 <DataDictionary>
<DataField name="pressure" dataType="double" optype="continuous" >
<Interval closure="closedClosed"
leftMargin="0" rightMargin="100" />
</DataField>
<!-- Other DataFields -->
</MiningSchema>
用于表示输入数据的另一个PMML元素是MiningSchema
。 每当部署模型并使其工作时,此元素都非常重要,因为它定义了DataDictionary
元素中定义的任何原始输入字段丢失或包含无效值时的处理方法。 该元素还允许处理离群值-与给定输入字段关联的极值。
在远离模型构建系统的现实世界中,传感器可能会发生故障,从而提供失真的信息或完全不提供信息。 对于这些情况, MiningSchema
元素提供了要遵循的确切过程,从而大大提高了整体解决方案的稳定性。 清单2显示了场pressure
的MiningSchema
表示形式。
<MiningSchema>
<MiningField name="pressure" usageType="active"
missingValueReplacement="35.32"
missingValueTreatment="asMean"
invalidValueTreatment="asMissing"
outliers="asExtremeValues"
lowValue="10"
highValue="70"/>
<!-- Other MiningFields -->
</MiningSchema>
根据此示例,如果缺少输入值,则将其替换为值35.32,该值表示从历史数据计算得出的该字段的平均值。 还要注意,任何无效值(小于0或大于100 -如清单1的DataDictionary
中所定义)都被视为缺失值。 但是,如果遇到小于10或大于70的有效值,则将它们视为异常值并分别自动替换为值10或70。
数据设置完成后,PMML可以定义大量的数据预处理步骤。 为此,它提供了一组用于常见数据转换的元素,以及用于定义算术和逻辑运算的内置函数列表。 数据预处理计算可用于提高原始输入数据的预测能力,或仅用于准备要呈现给模型本身的数据。 例如,许多建模技术仅将数值字段作为输入。 在这种情况下,任何分类输入都需要在使用之前转换为数字输入。
PMML为预处理和数据转换提供了以下元素:
Normalization
:将连续值和离散值映射为数字。 Discretization
:将连续值映射为离散值。 Value mapping
:将离散值Value mapping
为离散值。 Functions
:通过将函数应用于一个或多个参数来得出值。 清单3显示了PMML规范化元素NormContinous
。
在此示例中,PMML用于将输入场pressure
的值转换为介于0和1之间的值。请注意,新的规范化值还分配给了一个新字段,即名为normalized_pressure
的派生字段。
<DerivedField name="normalized_pressure"
dataType="double" optype="continuous">
<NormContinuous field="pressure">
<LinearNorm norm="0" orig="10"/>
<LinearNorm norm="1" orig="70"/>
</NormContinuous>
</DerivedField>
在此示例中,PMML用于将输入场pressure
的值转换为介于0和1之间的值。请注意,新的规范化值还分配给了一个新字段,即名为normalized_pressure
的派生字段。
诸如此类的标准化通常应用于用作神经网络模型输入的数据字段。 使用IBM®SPSS®Statistics构建预测分析模型时,可以自动选择将其导出为PMML文件。 如果构建神经网络模型,则将对网络使用的所有输入字段进行标准化,并且生成的PMML文件将为所有连续输入字段合并元素NormContinuous
。
清单4显示了PMML离散化元素Discretize
。
<DerivedField name="categorical_pressure"
dataType="string" optype="categorical">
<Discretize field="pressure">
<DiscretizeBin binValue="low">
<Interval closure="openClosed" rightMargin="25" />
</DiscretizeBin>
<DiscretizeBin binValue="normal">
<Interval closure="openClosed"
leftMargin="25" rightMargin="50" />
</DiscretizeBin>
<DiscretizeBin binValue="high">
<Interval closure="openOpen" leftMargin="50" />
</DiscretizeBin>
</Discretize>
</DerivedField>
在此示例中,数字输入场pressure
分为三类( low
, normal
和high
),它们被分配给名为categorical_pressure
的新派生场。 第一个bin将值最多映射为25到low
。 第二个将大于25且小于或等于50的值映射到normal
。 第三个和最后一个bin将大于50的值映射到high
。
注意, Discretize
元素定义了一组DiscretizeBin
子元素,这些子元素使用Interval
元素的方式与清单1中的DataDictionary
元素相同。 在专用元素内重用通用元素是PMML中的常见主题。 这使该语言更具可读性,并且对于分析工具而言,更易于导出和导入。
清单5显示了PMML映射元素MapValues
。 在此示例中,上面创建的派生字段categorical_pressure
用作映射转换的输入字段,该映射转换创建了名为grouped_pressure
的字段。 这是PMML的重要功能,因为它允许从其他派生字段创建派生字段。
<DerivedField name="grouped_pressure"
dataType="integer" optype="categorical">
<MapValues outputColumn="group">
<FieldColumnPair column="C1" field="categorical_pressure" />
<InlineTable>
<row>
<C1>low</C1>
<group>1</group>
</row>
<row>
<C1>normal</C1>
<group>1</group>
</row>
<row>
<C1>high</C1>
<group>2</group>
</row>
</InlineTable>
</MapValues>
</DerivedField>
请注意,在这种情况下, MapValues
元素对输入类别进行分组。 它使用元素InlineTable
将low
类别和normal
类别分配给组1,将high
类别分配给组2。
PMML还定义了许多用于算术和逻辑运算的内置函数,以及通用的IF-THEN-ELSE
函数。 当与其他功能结合使用时,它为几乎所有类型的预处理任务提供了强大的表示媒介(请参见清单6 )。
IF-THEN-ELSE
函数 IF categorical_pressure = "high"
THEN system_pressure = 0.3 * pressure
ELSE system_pressure = 2 ^ (1 + log (0.34* pressure + 1)
<DerivedField name="system_pressure"
dataType="string" optype="categorical">
<Apply function="if">
<Apply function="equal">
<FieldRef field="categorical_pressure" />
<Constant>high</Constant>
</Apply>
<!-- THEN -->
<Apply function="*">
<Constant>0.3</Constant>
<FieldRef field="pressure" />
</Apply>
<!-- ELSE -->
<Apply function="pow">
<Constant>2</Constant>
<Apply function="+">
<Constant>1</Constant>
<Apply function="log">
<Apply function="*">
<Constant>0.34</Constant>
<Apply function="+">
<FieldRef field="pressure" />
<Constant>1</Constant>
</Apply>
</Apply>
</Apply>
</Apply>
</Apply>
</Apply>
</DerivedField>
一旦完全定义了数据转换,就可以代表预测解决方案的大脑,模型本身。 每种建模技术的PMML表示高度依赖于其自身的结构和参数集。 如前所述,PMML提供了广泛的元素列表,以代表预测分析中使用最广泛的技术。
清单7中描述的示例显示了PMML中神经网络元素的设置。 未显示神经层,神经元和连接权重。 (有关如何表示PMML中的神经层和神经元,请参见文章“什么是PMML?”)。
<NeuralNetwork
modelName="ElementAnalyzer"
functionName="classification"
activationFunction="tanh"
numberOfLayers="2">
NeuralNetwork
元素由四个属性组成。 第一个是modelName
,用于指定模型名称(足够简单,对吧?)。 第二个是functionName
,用于标识模型的用途,在这种情况下,该用途是分类,而不是回归。 第三个是activationFunction
,它指定处理输入数据时网络神经元要使用的激活函数是tanh
(神经网络中常用的S型函数)。 最后,第四个属性numberOfLayers
指定网络由两层定义,这意味着存在一个隐藏层以及一个输出层。 请注意,不计算输入层。
可以看出,PMML不是火箭科学。 通过仅检查此特定元素,您可以对模型的结构及其含义有一个很好的了解:用于对不同元素进行分类的神经网络。 清单8显示了针对同一问题的决策树的定义。
<TreeModel modelName="ElementAnalyzer" algorithmName="CART"
functionName="classification">
请注意,从属性algorithmName
可以了解到,这棵特定的树是使用CART(分类和回归树)训练的。 例如,内置于IBM SPSS Statistics中的树可以从CART中受益,以生成可以轻松导出为PMML文件的决策树。
信息时代给我们带来了福气:从交易和传感器捕获的大量数据的可用性。 这允许构建解决方案,该解决方案能够在恶意活动,故障和事故发生或造成危害之前对其进行预测。 但是,如果您要从这些解决方案中充分受益,则必须将它们与开放标准(例如PMML)配对。 随着应用程序和系统的增长,您必须确保它们说的是相同的语言。 由于PMML用于表示数据转换和模型,因此它成为共享从原始数据到预测的完整预测解决方案的渠道。
翻译自: https://www.ibm.com/developerworks/xml/library/ba-ind-PMML2/index.html
pmml