摘 要 本文提出了一个新的知识发现系统。该系统以遗传编程算法为核心,解决发现一组属于面向对象数据库的对象所具有的共性问题。本文对系统作了扼要的说明,对gp算法进行了描述,并给出了一个实验例子。
关键词 进化计算 遗传编程 知识发掘 在数据库中发现有用的知识是数据挖掘(data mining, dm)的主要任务,在一定的情况下,所有的数据库查询可以认为是完成这项任务。我们现在有一套分析和探索数据的工具:sql查询、olap和数据挖掘技术。sql查询由关系代数所构成;olap提供了建立在多维数据模型基础上的高水平查询;而数据挖掘提供了最抽象的数据分析操作。我们可以认为不同的数据挖掘任务是在高水平上的复杂查询。数据挖掘是机器学习和数据库技术的交叉学科,dm系统的主要特点是:在数据库中发现能够用某些规则表述的、隐含的知识;与数据库是紧密集成的;高度自动化的;对知识发现的处理是有效率的(尤其对大型数据库)。
这里我们给出一种基于gp(genetic programming,遗传编程)算法的知识发现系统,和通常对数据库的查询不同的是,这个系统可对特定的对象集产生特定的查询集,系统自动根据查询集访问数据库,从而发掘出数据库中隐含的知识。本文将对上述知识发掘过程进行详细描述,并提出了一种用遗传编程(gp)来进行数据挖掘的方法,gp个体由数据库查询组成,而这些查询代表了高水平上的规则。 1 系统基本结构 我们在[1]文给出的知识发现系统结构基础上加以改进,给出如图1的基于gp算法的知识发现系统。
1.1 系统结构描述 整个系统由gp引擎、oodbms(object-oriented database management system,面向对象数据库管理系统)、知识库、db接口和用户接口组成。系统以一组对象、领域知识和模式信息作为输入。根据所给输入,gp引擎将产生许多随机的查询,系统将这些查询应用于oodbms,oodbms将返回其结果。系统用给定的输入对该返回结果进行评价,评价是计算个体查询的适应值的过程。那些能够匹配所给对象集的查询或查询集将被选中,在没有查询能够匹配所给对象集时,那么其最好的查询将被选中。最后,将能够最好地描述所给对象集特性的查询作为输出。
1.2 面向对象的数据库 这里,我们假定一个基于面向对象和函数的数据库模型(object-oriented and functional data model, oofdm),oofdm具有面向对象和函数数据模式的特性。这种模型要比传统的关系数据库模型在表达知识时更加逼近和容易。oofdm的基本概念是"将感知到的真实世界作为相互关系对象的变量,并从不同的更细的层次上观察这些对象。"[2]函数数据模型可以简单地借助函数的数学符号来表示数据间的关系。每个类(或实体集)有自己的属性和值,类与属性间的关系是将类中的对象集映射到属性域的一个函数。关系或逆关系组成了类间的连接。
1.3 查询算子 我们使用下列查询算子作为其面向对象数据库的查询语言。 ①sel c-1 [(谓词)] 该算子选择所有属于c-1且满足谓词的对象。c-1既可以是一个类名也可以是一个属于c-1的查询。谓词是一个可选项。如果在这个算子里没有谓词,它将选择该类中的所有对象。 ②res c-1 谓词 该算子根据所给谓词,限制给定集合的对象与另一个类的对象关联。c-1和谓词同sel算子,但对于res的谓词属性必须是关系型的属性,而对于sel算子谓词属性则必须是非关系型属性。 ③rel c-1 r-r class-2 该算子选择所有c-1中与c-2中对象有关联的对象。这是一个通过r-r 将一个类c-1与另一个类c-2关联起来的关系算子。r-r可以是一个通过c-1中定义的关系集中的关系属性之一。c-1既可以是一个类名也可以是一个属于c-1的查询。c-2必须是一个类名或是一个属于c-2的查询,并且通过r-r关联到另一个类c-1。 ④g-rel c-1 r-r c-2 该算子是rel的逆算子,它选择所有c-2中与c-1中对象有关联的对象。c-1、c-2以及r-r的意义同rel算子。
2 gp算法 遗传编程(gp)属于进化计算(evolutionary computation,ec)模型的一种。ec是一种借鉴自然界进化机制而产生的并行随机搜索算法。进化算法的基本原理是选择和改变,它区别于其他搜索方法有两个显著特征:首先这些算法都是基于种群(population)的;其次在种群中个体(indvidual)之间存在竞争。 为搜索特定的(感兴趣的)查询需要一种工具,这种工具可智能生成一组查询并以它们是否能导出与用户给定的同样的对象集来进行评价。gp算法对这一类问题是很实用的。
2.1 函数集与端点集 一般gp中可生成的程序集是使用者定义的函数集和端点集。表1给出了相应的函数集和端点集,其中函数集由1.3中定义的查询算子、逻辑运算算子以及比较算子所组成。
函数集 {sel,rel,g-rel,res},{uni,int,dif},{and,or,not}, {>,>=,=,<,<=} 端点集类集,属性集,值集表1 函数集和端点集 在我们的应用中还有一些具有不同句法的查询算子。每个算子具有不同的句法且假定的数据库是面向对象的。因此,它具有为创建个体而使用的特别的函数集(或算子集)和端点集。从而,构成种群的所有个体的创建必然受到每个算子的约束[3]。约束可以是算子的句法和查询的类型,或者是为创建查询选择适当属性值的领域知识。比较算子和逻辑算子只使用于查询的谓词。当比较符号操作数时,仅使用''=''。 端点集由class-set、slot-set和value-set组成。class-set由1.2中定义的类名组成,slot-set由每个类的所有属性构成,value-set由数值和符号值所构成(它们均为属性值)。数值由整型或实型数构成,其数值范围由所用数据库模式定义。符号值由字符串表示的符号属性值构成。
2.2 创建初始种群 为了创建一个个体(查询),首先必须确定特定查询所返回的对象类型。结果类型被选择后,从所选类型返回例子的算子集中随机地选择一个算子,这个过程对查询的每个参数递归地进行。最初,那些句法正确的预定义数量的查询被随机地产生,形成初始种群。
2.3 选择属性值 由于可选择范围大,要从某个查询的值集中选择一个属性值(数值或符号常数)是相当困难的。对于一个范围为[1,10000]的整数集,随机选到一个特定整数的概率仅为1/10000。而对于符号常数,则需要很强的背景知识。因此,我们仅就发生在数据库里的范围选择属性值。
2.4 繁殖新一代种群 每个个体用预定义的适应函数来进行评价。较适应的查询有较高的概率被选来繁殖新种群,这个过程用三个遗传算子:选择、杂交和变异来完成。为了产生下一代,选择算子根据个体的适应值来选择个体。我们用一个树来表示一个查询,杂交算子用交换两个父辈的子树来创建两个后代。变异算子用一个新的子树来代替一个父辈的子树,从而产生一个新的后代。选择-杂交-变异循环反复地进行直到终止标准被满足。
2.5 评价(适应函数测量) 我们使用如下的适应函数f来评价种群中的个体查询i : f ( ni , hi ) = t - ( hi * hi ) / ni , 其中:ni > 0 , t ≥ hi , 且 i = 1 ,2 ,… ,种群的大小(t是被确定的对象集的势,hi是一个个体查询i 被选中的次数,ni是查询 i 结果集的势)。 上述适应函数依赖于hi和ni ,如果一个查询没有被选中(hi=0),则函数的值为t,这是最差的一个适应值。另一方面,如果查询结果能够很好地匹配提交给系统的对象集,那么它的适应值为0(在这种情况下hi = ni = t )。如果种群中出现个体适应值远远超过种群平均适应值,该个体很快就会在群体中占有绝对的比例,从而出现过早收敛的现象。另一方面,在搜索过程的后期,群体的平均适应值可能会接近群体的最优适应值,从而导致搜索目标难以得到改善,出现停滞现象[4]。为了防止上述情况的发生,我们将对一个个体查询的例子个数 ni 作为分母。
3 一个例子 我们首先给出一个如表2所示的模拟"售后质量管理函数数据库",用它来代表一个基于oofdm的面向对象数据库,它包含了客户及其相关的信息。表3说明了类间的相互联系。
类属性值 客户代码、电话、名称、地址、类别、地区、委托、购买 代理商代码、名称、地址、电话、信誉等级 产品名称、编号、出厂日期、购买日期、检验员 维修记录问题、维修时间、维修次数、维修员 使用培训否、技术力量 质量问题外观、电器、机械、装配表2 售后质量管理数据库
类客户代理商产品维修记录使用质量问题 客户 + + + 代理商 + 产品 + + + 维修记录 + 使用 + + 质量问题 + +表3 类间的连接表
3.1 问题的提出 根据质量管理部门反映,有两个客户反馈的产品质量问题较为严重,我们希望通过对数据库的查询来找出这两个客户在购买的产品及使用上所具有的共性。
3.2 实验结果 在我们的数据库里包含如表2所示的模式组织起来的客户信息,我们通过用"选择反
代 fa fi hi ni 完全选中? 0 26.68 18.67 10 12 n 2 26.57 19.71 27 100 n 10 25.70 19.65 13 23 n 25 22.39 11.00 16 16 n 36 17.69 0.00 27 27 y 52 2.85 0.00 27 27 y 93 2.17 0.00 27 27 y 199 2.59 0.00 27 27 y( t = 27 , p = 100 , 代数 = 200 )
映质量问题达到或超过3次的客户"的查询,即: (g-rel(res 产品(≥送交维修 3))购买 by 客户) 得到27个例子的对象集{"客户c5","客户b2",… }。将这个对象集提交给系统,查询的发掘过程以100个随机产生的查询开始。表2显示了发掘出的每一代最好的查询摘要。fi,hi和ni分别是最佳查询i的适应值、被选中次数和结果集的势,fa为平均标准适应值(fa = (∑fi)/p,p是种群的大小,(∑fi)为种群适应值的和)。 在第52代时,我们已经得到了相当好的结果。此时,平均适应值已由第0代的26.68降到2.85。其最好的查询被完全选中,查询可叙述为"选择反映质量问题达到或超过3次的客户,并且购买的产品的出厂日期为97年11月以后到98年5月以前。"即: (g-rel (res 产品(≥送交维修 3)) 购买 by 客户 (sel 产品 (or(< 出厂日期 98年5月)(> 出厂日期 97年11月 ))) 如果不考虑所使用的是模拟数据的话,可以说我们已经发现了蕴藏在数据库中的知识了。
4 小结 本文在知识发掘系统的框架上引入了gp算法,并以一个实验例子为背景,说明使用gp算法产生最佳查询方法的有效性,展示了该系统的应用潜力。我们将进一步把该思想导入到关系型数据库,在实践中完善系统。