0%
1.9k 字 9 分钟

PMML文档翻译 数据字典(DataDictionary)

说明

  • 基于PMML Version4.3
  • 基本可以视为官方文档的一个翻译
  • 如有疏漏,请联系yao544303963@gmail.com

数据字典

数据字典包含了数据挖掘模型中使用的字段定义。指定了字段类型和字段值的取值范围。
这些定义是独立的,无关于使用了何种数据集训练了何种模型。
一个数据字典,可以被多个模型、统计值以及其他相关的操作共享。

Schema

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<xs:element name="DataDictionary">
<xs:complexType>
<xs:sequence>
<xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="DataField" maxOccurs="unbounded"/>
<xs:element ref="Taxonomy" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="numberOfFields" type="xs:nonNegativeInteger"/>
</xs:complexType>
</xs:element>

<xs:element name="DataField">
<xs:complexType>
<xs:sequence>
<xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/>
<xs:sequence>
<xs:element ref="Interval" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="Value" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:sequence>
<xs:attribute name="name" type="FIELD-NAME" use="required"/>
<xs:attribute name="displayName" type="xs:string"/>
<xs:attribute name="optype" type="OPTYPE" use="required"/>
<xs:attribute name="dataType" type="DATATYPE" use="required"/>
<xs:attribute name="taxonomy" type="xs:string"/>
<xs:attribute name="isCyclic" default="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="0"/>
<xs:enumeration value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>

<xs:simpleType name="OPTYPE">
<xs:restriction base="xs:string">
<xs:enumeration value="categorical"/>
<xs:enumeration value="ordinal"/>
<xs:enumeration value="continuous"/>
</xs:restriction>
</xs:simpleType>

<xs:simpleType name="DATATYPE">
<xs:restriction base="xs:string">
<xs:enumeration value="string"/>
<xs:enumeration value="integer"/>
<xs:enumeration value="float"/>
<xs:enumeration value="double"/>
<xs:enumeration value="boolean"/>
<xs:enumeration value="date"/>
<xs:enumeration value="time"/>
<xs:enumeration value="dateTime"/>
<xs:enumeration value="dateDaysSince[0]"/>
<xs:enumeration value="dateDaysSince[1960]"/>
<xs:enumeration value="dateDaysSince[1970]"/>
<xs:enumeration value="dateDaysSince[1980]"/>
<xs:enumeration value="timeSeconds"/>
<xs:enumeration value="dateTimeSecondsSince[0]"/>
<xs:enumeration value="dateTimeSecondsSince[1960]"/>
<xs:enumeration value="dateTimeSecondsSince[1970]"/>
<xs:enumeration value="dateTimeSecondsSince[1980]"/>
</xs:restriction>
</xs:simpleType>

说明

DataDictionary

该元素定义了数据字典的顶层。可以包含三种类型的子元素: Extension、DataField、Taxonomy

包含属性:

numberOfFields
该属性值是数据字典中定义的字段的数量,可以用来进行前后一致性的校验(字段数量的校验)

DataField

该元素定义了字段。
在整个数据字典中,字段名称必须唯一。也有一些特殊情况,在整个PMML文档中,名称以必须唯一。

包含属性:
displayName
应用程序使用该名称来关联该字段。在XML文档内部,只有name的值是必须的,如果没有给出displayName,那其默认值就是name的值。
举个例子:
某个字段的name=”SCTAGE” displayName=”Customer age”。应用程序在调用PMML 消费者时,会在接口处使用Customer age来请求输入数据。一旦消费者接受了参数,并且和miningFields匹配上了,那么displayName就没有什么实际意义了,在内部处理中,都是使用name

optype
字段的类型,即定义在这些字段值上的操作类型,主要有三类。

  • categorical 类别型 只能进行相等或不相等的运算。(即,是这个分类,或者不是这个分类)
  • ordinal 定序型 有内在排序,可以比较,但是不适合加减运算。如年级编号。
  • continuous 连续型 数值

dataType
字段值的类型(这个更类似于Java 或 C中的数据类型),比如类别型,就是所有的string
可选值如下:

  • string
  • integer
  • float
  • double
  • boolean
  • date
  • time
  • dateTime
  • dateDaysSince[0]
  • dateDaysSince[1960]
  • dateDaysSince[1970]
  • dateDaysSince[1980]
  • timeSeconds
  • dateTimeSecondsSince[0]
  • dateTimeSecondsSince[1960]
  • dateTimeSecondsSince[1970]
  • dateTimeSecondsSince[1980]

类型的定义,详见XML Schema Part 2: Datatypes
其中有三个类型是PMML 相较于 XML Schema 新增的,分别是timeSeconds,dateDaysSince[a Year],dateTimesSecondsSince[a Year],其中a Year 可以是0、1960、1970、1980中的一个值。注意到,a Year不是一个任意值,必须在允许的值中进行选取。如果可变的a Year 是必须的,那就需要考虑使用內建函数
PMML支持这些额外的类型,原因在于在数据挖掘中,经常需要将时间转化为可以比较和计算的数值。例如 2003-04-01 就可以通过 dateDaysSince[1960] 转为15796。

taxonomy
可选属性 taxonomy 关联了一个taxonomy 值。用来描述一个分层的值的情况。
Tips
这个值体现了一个继承性和分层性。

isCyclic:
表示定序型的值是否可循环,如周日至周六

有效性

DataFiled 定义了一组规则来验证值的有效性。
数据挖掘模型区分了如下三种值的情况:

  • Missing Data: 缺失值。
  • Invalid Value: 无效值,即输入不为空,但是取值范围超出了给该值的取值区间。
  • Valid Value: 有效值,即不为以上两种情况的值。

值和区间

Value 和 Interval 元素用来描述数据字典中值的情况和取值区间。

Value Schema

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<xs:element name="Value">
<xs:complexType>
<xs:sequence>
<xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="value" type="xs:string" use="required"/>
<xs:attribute name="displayValue" type="xs:string"/>
<xs:attribute name="property" default="valid">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="valid"/>
<xs:enumeration value="invalid"/>
<xs:enumeration value="missing"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>

Interval Schema

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<xs:element name="Interval">
<xs:complexType>
<xs:sequence>
<xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="closure" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="openClosed"/>
<xs:enumeration value="openOpen"/>
<xs:enumeration value="closedOpen"/>
<xs:enumeration value="closedClosed"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="leftMargin" type="NUMBER"/>
<xs:attribute name="rightMargin" type="NUMBER"/>
</xs:complexType>
</xs:element>

连续型demo

1
2
3
4
<DataField name="SomeVariable" dataType="double" optype="continuous">
<Interval closure="closedClosed" leftMargin="0" rightMargin="100"/>
<Value property="missing" value="-999"/>
</DataField>

表示取值区间[0, 100],若为空,则取-999
Interval 只支持连续型(continuous)

类别型demo

1
2
3
4
<DataField name="_target" optype="categorical" dataType="string">
<Value value="0"/>
<Value value="1"/>
</DataField>

不存在二分类的数据类型,所以二分类的定义如上。

定序型demo

1
2
3
4
5
<DataField name="Volume" optype="ordinal" dataType="string">
<Value value="loud"/>
<Value value="louder"/>
<Value value="insane"/>
</DataField>

如上,定序为出现顺序的逆序,及loud < louder < insane
加上 cyclic 参数,即可形成循环,如周日至周六

REF

PMML 4.3 - Data Dictionary