【摘要】
计算机技术和通信技术的迅猛发展将人类社会带入到了信息时代。在最近十几年里,数据库中存储的数据急剧增大。例如,NASA轨道卫星上的地球观测系统EOS每小时会向地面发回50GB的图像数据;世界上最大的数据仓库之一,美国零售商系统Wal-Mart每天会产生2亿左右的交易数据;人类基因组数据库项目已经搜集了数以GB计的人类基因编码数据;大型天文望远镜每年会产生不少于10TB的数据,等等。大量的信息在给人们提供方便的同时也带来了一系列问题,由于信息量过大,超出人们掌握、理解信息的能力,因而给正确运用信息带来了困难。
数据挖掘和知识发现是一个涉及多学科的研究领域。数据库技术、人工智能、机器学习、统计学、粗糙集、模糊集、神经网络、模式识别、知识库系统、高性能计算、数据可视化等均与数据挖掘相关。
近年来,KDD(即与数据库的知识发现)研究领域已经成为热点,其中关联规则数据挖掘算法尤为引人注目。关联规则反映一个事物与其他事物之间的相互依存性和关联性。
IBM公司Almaden研究中心的R.Agrawal首先提出关联规则模型,并给出求解算法AIS。随后又出现了SETM和Apriori等算法。Apriori是关联规则模型中的经典算法。
关键词:数据挖掘 知识发现 Apriori算法 FP算法
一、问题重述
1.1相关信息
Apriori算法在发现关联规则领域具有很大影响力。算法命名源于算法使用了频繁项集性质的先验(prior)知识。在具体实验时,Apriori算法将发现关联规则的过程分为两个步骤:第一步通过迭代,检索出事务数据库中的所有频繁项集,即支持度不低于用户设定的阈值的项集;第二步利用频繁项集构造出满足用户最小信任度的规则。其中,挖掘或识别出所有频繁项集是该算法的核心,占整个计算量的大部分。
在对深度优先数据挖掘算法的研究工作中,Han等人没有采用潜在频繁项集的方法求解频繁项集,而是提出了称为频率模式增长(FP_growth)的算法。该算法通过扫描数据库创建FP_tree的根节点并标示为null,对数据库D中的每一个事务Tran,按L中的次序对Tran中的频繁项排序,设Tran中排序后的频繁项列表[p|P],这里p是第一个元素,P是保留列表。接着调用函数insert_tree([p|P],T),如果树T有一个子节点N且N.item_name=p.item_name,就将N节点计数加1;否则就创建一个新节点N,设计数为1,它的父节点连接到T,节点连接到同名的节点连接结构上。如果P是非空的,就递归调用insert_tree(P,N)。由于压缩了数据库内容,并且在将频繁项写入FP_tree结构时,保留了项集间的相连信息。求解频繁项集的问题,就转化为递归地找出最短频繁模式并连接其后缀构成长频繁模式的问题。[1]
1.2问题重述
近年来,KDD(即与数据库的知识发现)研究领域已经成为热点,其中关联规则数据挖掘算法尤为引人注目。关联规则反映一个事物与其他事物之间的相互依存性和关联性。
IBM公司Almaden研究中心的R.Agrawal首先提出关联规则模型,并给出求解算法AIS。随后又出现了SETM和Apriori等算法。Apriori是关联规则模型中的经典算法。[1]
1、分析Apriori算法与FP算法的优缺点
2、分别使用两种算法找出频繁项集
3、挖掘出所有的强关联规则
4、实验数据如下表:
二、模型求解
2—频繁项集的强关联
Confidence(A=>B)=P(B|A)=P(AB)/P(A)=3/4=0.75
Confidence(B=>A)=P(A|B)=P(AB)/P(B)=3/3=1
Confidence(A=>C)=P(C|A)=P(AC)/P(A)=4/4=1
Confidence(C=>A)=P(C|A)=P(AC)/P(C)=4/4=1
Confidencd(B=>C)=P(C|B)=P(BC)/P(B)=3/3=1
Confidence(C=>B)=P(B|C)=P(BC)/P(C)=3/4=0.75
在满足minconf = 80%的前提下,结果为:B=>A;A=>C;C=>A;B=>C
3—频繁项集的强关联
Confidencd(AB=>C)=P(ABC)/P(AB)=3/3=1
Confidencd(AC=>B)=P(ABC)/P(AC)=3/4=0.75
Confidence(BC=>A)=P(ABC)/P(BC)=3/3=1
在满足minconf = 80%的前提下,结果为:AB=>C;BC=>A
利用FP一树算法求频繁项集
Procedure FP_growth(Tree,a)
(1) ifTree包含一个单一路径P then
(2) for each 路径P中节点组合(记为β)
(3) 生成模式β∪α,拥有支持度为β节点中的最小支持度
(4) Else for each树的头列表节点αi{
(5) 生成模式β=αi∪β且support=ai.support
(6) 构成β的条件模式基和β的条件FP_Treeβ
(7) IfTreeβ≠фthen
(8) Call FP_growth(Treeβ,β);}[1]
FP-Tree算法使用频繁模式增长方法,第一次扫描与Apriori相同,它导出频繁项(1-项集)的集合,并得到它们的支持度计数(频繁性)。设最小支持度计数为2.频繁项的集合按支持度计数的递减序排序。结果集或表记作L,这样,我们有L={A:4,C:4,B:3}。
图为存放压缩的频繁模式信息的FP_tree:
三、模型评价
Apriori算法时间消耗的主要症结反映在两个方面,一是由于对海量数据库的多趟扫描,另一个是用JOIN产生潜在频繁项集。
FP-Tree结构在完备性方面,它不会打破交易中的任何模式,而且包含了挖掘序列模式所需的全部信息;在紧密性方面,它不剔除不相关信息,不包含非频繁项,按支持度降序排列,支持度高的项在FP-Tree中共享的机会也高。
性能研究显示FP-growth比Apriori快一个数量级,这是由于FP-growth不生成候选集,不用候选集测试,而且使用紧缩的数据结构,避免重复数据库扫描。[1]
四、参考文献
[1] 李雄飞 李军,《数据挖掘与知识发现》,北京:高等教育出版社,2003。