关联规则算法改进
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.关联规则概述
1.1关联规则
超市,商场的商品应该如何摆放最合适?啤酒和尿布这两类不同商品能否摆在一起?数据挖掘的经典案例——啤酒尿布告诉我们顾客的购买行为存在一定的关联,使我们不得不重视经典的购物车问题。
关联规则的挖掘就是通过一系列数据分析来挖掘某种特定的商品组合被顾客同时购买的可能。关联规则的分析有R.Agrawal于1993年最早提出,是KDD 研究的重要内容,侧重于确定数据中不同领域之间的联系,找出满足给定支持度和置信度的多个域之间的依赖关系。关联规则的挖掘是数据挖掘的一项重要任务,其目的就是从事物数据库、关系数据库中发现项目集或属性之间的相关性,关联关系,因果关系。
1.2关联规则的概念:
关联规则是描述数据库中数据项之间存在的潜在的关系规则。问题可以描述如下:
I ={i1,i2,i3….im}是所有项的集合,相当与商品的种类集合。D 是所有事务的子集,相当于数据库中的记录集合。每个事务T 由I中的若干项组成,是I的子集,用唯一的ID 标识,记为T = { t1,t2,. . . ,tn },相当于每次交易中的商品列表。假设X,Y 是数据项集,X 中含有的项的数目为k,称为k_数据项集,是I 的子集。关联规则表示为: ( T 中包含X) ( ( T中包含Y)。意义在于一次交易中(数据库中的一条记录)存在X 项目,意味着该交易中也存在Y 项目。通常简写为X ( Y,X 称为关联规则的前项,Y称为该关联规则的后项,称为关联操作。)关联规则主要解决的两个问题:找出所有频繁项集和分析频繁项集找出关联规则。
2.关联规则算法简介
2.1宽度优先算法:Apriori 算法
Apriori算法是一种最有影响的挖掘布尔关联规则频繁项集的算法。其核心是基于两阶段频集思想的递推算法。该关联规则在分类上属于单维、单层、布尔关联规则。在这里,所有支持度大于最小支持度的项集称为频繁项集,简称频集。该算法的基本思想是:首先找出所有的频集,这些项集出现的频繁性至少和预定义的最小支持度一样。然后由频集产生强关联规则,这些规则必须满足最小支持度和最小可信度。然后使用第1步找到的频集产生期望的规则,产生只包含集合的项的所有规则,其中每一条规则的右部只有一项,这里采用的是中规则的定义。一旦这些规则被生成,那么只有那些大于用户给定的最小可信度的规则才被留下来。为了生成所有频集,使用了递推的方法。
2.2深度优先算法:FP-Growth算法
针对Apriori算法的不足,通过减少项集的搜索空间和数据库的扫描次数,Han于2004年提出了一个无需产生候选集,只需扫描两次数据库的算FP-Growth。FP-Growth采取如下策略:首先将要挖掘的数据库压缩到一棵频繁模式树中,并在压缩的过程中保留项集的关联信息;然后,将压缩后的数据库划分成一组条件数据库(一种特殊类型的投影数据库,每个关联一个频繁项),然后分别挖掘每个条件数据库来产生频繁项集。与逐层进行的宽度优先搜索算法不同,基于深度优先搜索的FP_ Growth算法对整个搜索空间的分枝逐个进行搜索,所以,只有当某个节点上的项集属于频繁项集的时候,才会对其子节点作进一步的搜索。
FP-Growth频繁项集挖掘算法的主要步骤:
第一步,构造FP树:
(1)扫描事务数据库DB,找出1-频繁项集,并根据它们的支持度计数按降序排序,
结果一记为L。
(2)创建FP树的根节点,记为“null”,并置为当前树根。
(3)扫描DB中的一个事务T:根据L选出T中的频繁项,并按L中的顺序排列,
结果记为R。
(4)取出R中的第一个项I,检查当前树根,如果有一个子女N的项名与I相同,则N的计数加1,否则,创建一个新的节点N,将其计数记为1,并连接到当前树根(父节点),且根据项头表将其链接到具有相同项名的节点链的尾部。如果R非空,将N置为当前树根,继续本步骤。
(5)将即树根“null”置为当前树根,继续(3),直到DB扫描完毕。
第二步,FP树的挖掘通过函数FP-Growth(FP-Tree,α)来实现,第一次调用时“α=
null。该函数的描述如下:
FP-Growth(FP-Tree,a)
{
If FP-Tree只包含一个单独的路径P
Then
for:路径P中所有节点的每一个组合β
产生模式β⋃α,其支持度计数等于β中的节点的最小支持度计数;
else
for FP-Tree的项头表中的每个项ai
{
产生模式β=α⋃ai,其支持度计数等于ai的支持度计数;
构造β的条件模式基;
根据β的条件模式基构造β的条件β-FP-Tree;
If β-FP-Tree≠∅
then
调用PF-Growth(β-FP-Tree,β);
}
2.3 Apriori 算法的不足
Apriori 作为经典的频繁项目集生成算法,在数据挖掘中具有里程碑的作用。但是随着研究的深入,它的缺点也暴露出来。Apriori 算法有两个致命的性能瓶颈。
(1)由频繁k_项集进行自连接生成的候选频繁k_项集数量巨大。例如,如果有104个1_频繁项集,则算法需要产生大约107个2_候选项集。此外,为发现长度为100的频繁模式,如{xl,x2,…,x100},必须产生多达2100 =1030
个候选项集。如此庞大的候选项集,在时间和空间上都是难以接受的。(2)由于Apriori算法需要反复对数据库进行扫描,当存在长度较大的频繁集时会增加扫描数据库的次数,当数据库容量非常大的时候,又会增加每次扫描数据库的时间。每产生一次候选项集都要扫描一次数据库。为得到k_
频繁项集,就需要扫描k次数据库,从而造成非常庞大的IO开销。
2.4 FP-Growth算法的不足
FP-Growth方法将发现长频繁项集的问题转换成递归地搜索一些简短模式,然后链接较不频繁的后缀生成长频繁模式的问题,大大降低了搜索开销。但
FP-Growth算法还是存在缺陷:(1)若涉及庞大的事务数据库,需要很大的空间来存放FP树;(2)挖掘FP树来产生频繁项集,需要为FP树中每个节点生成条件模式库和相应的条件模式树,若节点数量多,也必须占用很大的空间。
3.关联规则算法优化与改进
3.1 Apriori算法的改进方向
(1)基于散列的优化方法
基于散列的优化方法可以用于压缩侯选k-项集Ck的(k≥2)集合的大小。基本思想是:当扫描事务数据库,由侯选k-项集的时候产生频繁k-项集,同时产生每个事务的(k+l)项子集,并把它们散列到散列表的不同桶中,增加桶的计数,在下次产生侯选(k+1)项集的时候,可以根据散列表和最小支持度排除一些无意义的侯选项集。这种技术当k=2时特别有效。它的关键是构造一个有效的散列函数。(2) 基于划分的优化方法
基于划分的优化方法采用对原事务数据库D 进行两遍扫描的技术。在第 1 遍,首先将事务数据库D 划分成n 个非重叠的部分,每个部分的最小支持度计数等于D 的最小支持该部分的事务数之积。对于每一部分,找出该部分的频繁项集,称作局部频繁项集。局部频繁项集可能不是整个事务数据库的频繁项集,