350 likes | 464 Views
关 联 规 则 挖 掘. 黎都 2004-12-21. 基本概念(1). 数据,数据集 项目,项目集 事务 t 包含项目集 X 支持数,频繁项目集(频集) Support(X) = a(x) / |D| 置信度. 基本概念(2). 关联规则: 若项目集 X 与 Y 交集为空,则 X=>Y 为关联规则,其中: Support(X=>Y) = Support(X 并 Y) Confidence( X=>Y) = Suppose(X 并 Y)/ Suppose(X). 关联规则的目的. 对于指定的 minsupport 和 minconfidence
E N D
关 联 规 则 挖 掘 黎都 2004-12-21
基本概念(1) • 数据,数据集 • 项目,项目集 • 事务 t 包含项目集 X • 支持数,频繁项目集(频集) • Support(X) = a(x) / |D| • 置信度
基本概念(2) • 关联规则: • 若项目集 X与Y交集为空,则X=>Y为关联规则,其中: • Support(X=>Y) = Support(X并Y) • Confidence( X=>Y) • = Suppose(X并Y)/ Suppose(X)
关联规则的目的 • 对于指定的minsupport和minconfidence • 使得support(X) >= minsupport • Confidence(X)>= minconfidence • 则称关联规则X=>Y为强规则 • 关联规则挖掘的就是挖掘出事务集D中的强规则
关联规则挖掘 • 关联规则挖掘分为两个子问题: • 1,根据最小支持度找出数据集D中的所有频集; • 2,根据频集和最小置信度产生关联规则;
关联规则的发现算法 • 发现算法解决的是关联规则挖掘的第一个问题 • 关联规则分为布尔关联规则和多值规则 • 多值关联规则都转化为布尔关联规则来解决,因此先介绍布尔关联规则算法 • Apriori,AprioriTid,AprioriHybrid
Apriori算法 • Agrawal等人在1993年提出的AIS和SETM的基础上在1994年提出Apriori和AprioriTi • Apriori和AprioriTid算法利用前次过程中的数据项目集来生成新的候选数据项目集,减少了中间不必要的数据项目集的生成,提高了效率
Apriori算法 • L1 = {大项目集1项目集} • For(k=2; Lk-1非空;k++) do begin • Ck = apriori-gen(Lk-1 ); • for 所有事务 t do begin • Ct = subset(Ck , t) • for 所有候选 c(属于Ct)do • c.count++;
Apriori算法 • End • Lk = { c属于Ck | c.count >= minsupp} • End • Apriori算法得到的频集为Lk的并集
Apriori算法分析 • 分为第一次遍历和第k次遍历 • 第一次遍历计算每个项目的具体值,确定大项目集1项目集L1 • 第k次遍历利用前一次找到的大项集Lk-1和Apriori-gen函数产生候选集Ck ,然后扫描数据库,得到Ck中候选的支持度,剔除了不合格的候选后Ck作为Lk
Apriori算法分析:Apriori-gen • 本质是合并项目集成为候选项目集 • 算法: • Insert into Ck • Select p[1], p[2],……,p[k-1],q[k-1] • From Lk-1 p, Lk-1 q • Where p[1] = q[1],……,p[k-2] = q[k-2] • p[k-1] < q[k-1]
Apriori算法分析:Apriori-gen • 然后,对于Ck中某集合c的任意子集,如果不存在于Lk-1 ,则删除c; • 例子: • L3为 {1 2 3} {1 2 4} {1 3 5} {2 3 4}在合并后为C3 : { { 1 2 3 4} { 1 3 4 5}}; • 因为{1 3 4 5} 中的{1 4 5}不存在,所以C3中{1 3 4 5}应该删除,故L4 : {1 2 3 4}
Apirori算法分析:Subset • 候选项目集Ck是存储在一个Hash树中的,并且要求项目集中的项目有序 • Subset函数寻找所有包含在某个事务中的候选,使用Hash查找 • 实质:得到候选集Ck中候选项c的支持度
AprioriTid算法 • AprioriTid算法由Apriori算法改进 • 优点:只和数据库做一次交互,无须频繁访问数据库 • 将Apirori中的Ck扩展,内容由{c}变为{TID,c},TID用于唯一标识事务 • 引入Bk ,使得Bk对于事务的项目组织集合,而不是被动的等待Ck来匹配
ApioriTid算法 • 举例:minsupp = 2 • 数据库:
ApioriTid算法 • 上面图中分别为Bk和Lk ,而Ck和Apriori算法产生的一样,因此没有写出来 • 可以看到Bk由Bk-1得到,无须由数据库取数据 • 缺点:内存要求很大,事务过多的时候资源难以满足
ApioriHybrid算法 • 这种算法将Apriori算法和AprioriTid算法混合,利用各自优点弥补不足; • 利用的原理:随着候选集的元素扩充,所能匹配的事务将可能减少 • 算法:先使用Apriori算法,当能匹配的事务减少到内存可以容纳的程度,使用ApiroriTid算法
ApioriHybrid算法性能 • AprioriHybrid算法性能比Apriori和AprioriTid算法都要好 • 经过算法统计平均,AprioriHybrid比Apriori效率高30%,比AprioriTid高60% • 但是应用上比两者都复杂,相对而言用Apriori可以得到更简单的应用
多值属性关联 • 刚才介绍的都是布尔属性关联,实际中多值属性应用也很多 • 解决多值关联的办法在于把QARP转为BARP来解决 • 解决要点:划分值域区间 • 太宽,置信度将降低 • 太窄,支持度将降低
多值属性关联 • 定义:挖掘多值关联规则问题就是在给定的交易集合D中产生所有满足最小支持度和最小置信度的多值关联规则的过程 • MAQA算法
MAQA算法 • MAQA算法将QARP问题转为BARP问题。 • Step1:对于多值属性A,若取值范围为[L,R],划分为若干区间。 • 若为数量属性,应用聚类算法确定值的划分,若为类别属性,采用归纳进行划分。
MAQA算法 • Step 2:将划分后的属性区间映射为序对<A,k>,A属于布尔集 • Step 3:从项目集中找出有价值的项,构成频集 • Step 4:在频集中迭代的找到支持度合格的两个项,并加入频集项目集中 • Step 5:应用频集产生关联规则 • Step 6:确定有价值的关联规则作为输出
MAQA算法 • 第一步划分为关键,支持度和置信度证明对立矛盾的关系,合适划分是个重要的步骤。 • 第二步和第五步都很直接,第五步计算最小置信度 • 如:ABCD和AB都为频集,通过 • Conf = supp(ABCD)/ supp(AB)判断是否超过最小置信度
MAQA算法 • 第三步为Apriori算法或者其改进算法 • 第六步采用interest度量方法 • 下面重点介绍第一步和第四步 • 多值划分的聚类算法CP
聚类算法CP • For 每个属性值大于N的属性 do • 计算每个属性对应的事务数目 • 寻找局部最大点和最小点确定区间 • 计算minL和maxL之间的事务数sumi • 如果满足合并条件则合并相邻区间得到k个区间 • S = sumi的和-max(sumi) – min(sumi)
聚类算法CP • S平均 = S/(K-2) • 寻找所有大于c*S平均 的sumi,并把结果存于P • For P中每个区间j do • If sumi /(min Ri – MinLi) > S/(minR-minL) • then 保存区间 j作为输出
聚类算法CP • 这里将minsupp设为c*S平均 • 小于支持度的信息可能丢失,所以考虑和相邻区间合并。 • 如果每个区间事务数都差不多,那么sumi和S平均都相似,很难判断哪个区间更有价值 • If语句解决了这个问题 • 它综合了区间宽度的因素
聚类算法CP • 我已经尝试以我的理解来解释CP算法,希望能对大家有所帮助 • 后续: • 多层属性关联规则挖掘 • 约束性关联规则发现方法