1.42k likes | 1.68k Views
知识发现(数据挖掘 ) 第六章. 史忠植 中国科学院计算技术研究所. 关联规则 Association Rules. 内容提要. 引言 Apriori 算法 Frequent-pattern tree 和 FP-growth 算法 多维关联规则挖掘 相关规则 关联规则改进 总结. 关联规则. 关联规则反映一个事物与其他事物之间的相互依存性和关联性。如果两个或者多个事物之间存在一定的关联关系,那么,其中一个事物就能够通过其他事物预测到。 关联规则表示了项之间的关系。 示例 : cereal, milk fruit
E N D
知识发现(数据挖掘)第六章 史忠植 中国科学院计算技术研究所 关联规则 Association Rules AA12 关联规则 史忠植
内容提要 • 引言 • Apriori 算法 • Frequent-pattern tree 和FP-growth 算法 • 多维关联规则挖掘 • 相关规则 • 关联规则改进 • 总结 AA12 关联规则 史忠植
关联规则 • 关联规则反映一个事物与其他事物之间的相互依存性和关联性。如果两个或者多个事物之间存在一定的关联关系,那么,其中一个事物就能够通过其他事物预测到。关联规则表示了项之间的关系。 • 示例: cereal, milk fruit “买谷类食品和牛奶的人也会买水果.” 商店可以把牛奶和谷类食品作特价品以使人们买更多的水果. AA12 关联规则 史忠植
市场购物篮分析 • 分析事务数据库表 • 我们是否可假定? • Chips => Salsa Lettuce => Spinach AA12 关联规则 史忠植
基本概念 • 通常, 数据包含: 项的子集 事务 ID AA12 关联规则 史忠植
关联规则挖掘 • 在事务数据库,关系数据库和其它信息库中的项或对象的集合之间,发现频繁模式,关联,相关,或因果关系的结构. • 频繁模式: 数据库中出现频繁的模式(项集,序列,等等) AA12 关联规则 史忠植
基本概念 • 项集 • 事务 • 关联规则 • - 事务数据集 (例如右图) • 事务标识 TID 每一个事务关联着一个标识,称作TID. AA12 关联规则 史忠植
关联规则的度量 • 支持度s • D中包含A和 B 的事务数与总的事务数的比值 规则 AB 在数据集D中的支持度为s, 其中s表示D中包含AB(即同时包含A和B)的事务的百分率. AA12 关联规则 史忠植
关联规则的度量 • 可信度 c • D中同时包含A和B的事务数与只包含A的事务数的比值 规则 AB 在数据集D中的可信度为c,其中c表示D中包含A的事务中也包含B的百分率.即可用条件概率P(B|A)表示. confidence(A B )=P(B|A) 条件概率 P(B|A) 表示A发生的条件下B也发生的概率. AA12 关联规则 史忠植
关联规则的度量 • 关联规则根据以下两个标准(包含或排除): • 最小支持度–表示规则中的所有项在事务中出现的频度 • 最小可信度- 表示规则中左边的项(集)的出现暗示着右边的项(集)出现的频度 AA12 关联规则 史忠植
市场购物篮分析 I是什么? 事务ID B的T是什么? s(Chips=>Salsa) 是什么? c(Chips=>Salsa)是什么? AA12 关联规则 史忠植
频繁项集 • 项集 –任意项的集合 • k-项集–包含k个项的项集 • 频繁 (或大)项集–满足最小支持度的项集 • 若I包含m个项,那么可以产生多少个项集? AA12 关联规则 史忠植
强关联规则 • 给定一个项集,容易生成关联规则. • 项集: {Chips, Salsa, Beer} • Beer, Chips => Salsa • Beer, Salsa => Chips • Chips, Salsa => Beer • 强规则是有趣的 • 强规则通常定义为那些满足最小支持度和最小可信度的规则. AA12 关联规则 史忠植
关联规则挖掘 • 两个基本步骤 • 找出所有的频繁项集 • 满足最小支持度 • 找出所有的强关联规则 • 由频繁项集生成关联规则 • 保留满足最小可信度的规则 AA12 关联规则 史忠植
内容提要 • 引言 • Apriori 算法 • Frequent-pattern tree 和FP-growth 算法 • 多维关联规则挖掘 • 相关规则 • 关联规则改进 • 总结 AA12 关联规则 史忠植
Apriori算法 • IBM公司Almaden研究中心的R.Agrawal 等人在1993年提出的AIS和SETM。 • 在1994年提出Apriori和AprioriTid。Apriori和AprioriTid算法利用前次过程中的数据项目集来生成新的候选数据项目集,减少了中间不必要的数据项目集的生成,提高了效率 AA12 关联规则 史忠植
生成频繁项集 • Naïve algorithm n <- |D| for each subset s of I do l <- 0 for each transaction T in D do if s is a subset of T then l <- l + 1 if minimum support <= l/n then add s to frequent subsets AA12 关联规则 史忠植
生成频繁项集 • naïve algorithm的分析 • I 的子集: O(2m) • 为每一个子集扫描n个事务 • 测试s为T的子集: O(2mn) • 随着项的个数呈指数级增长! • 我们能否做的更好? AA12 关联规则 史忠植
Apriori 性质 • 定理(Apriori 性质):若A是一个频繁项集,则A的每一个子集都是一个频繁项集. • 证明:设n为事务数.假设A是l个事务的子集,若 A’ A,则A’为l’ (l’ l )个事务的子集.因此, l/n ≥s(最小支持度), l’/n ≥s也成立. AA12 关联规则 史忠植
Apriori 算法 • Apriori算法是一种经典的生成布尔型关联规则的频繁项集挖掘算法.算法名字是缘于算法使用了频繁项集的性质这一先验知识. • 思想: Apriori 使用了一种称作level-wise搜索的迭代方法,其中k-项集被用作寻找(k+1)-项集. 首先,找出频繁1-项集,以L1表示.L1用来寻找L2,即频繁2-项集的集合.L2用来寻找L3,以此类推,直至没有新的频繁k-项集被发现.每个Lk都要求对数据库作一次完全扫描.. AA12 关联规则 史忠植
生成频繁项集 • 中心思想: 由频繁(k-1)-项集构建候选k-项集 • 方法 • 找到所有的频繁1-项集 • 扩展频繁(k-1)-项集得到候选k-项集 • 剪除不满足最小支持度的候选项集 AA12 关联规则 史忠植
Apriori: 一种候选项集生成-测试方法 • Apriori 剪枝原理: 若任一项集是不频繁的,则其超集不应该被生成/测试! • 方法: • 由频繁k-项集生成候选(k+1)-项集,并且 • 在DB中测试候选项集 • 性能研究显示了Apriori算法是有效的和可伸缩(scalablility)的. AA12 关联规则 史忠植
The Apriori 算法—一个示例 Database TDB L1 C1 1st scan C2 C2 L2 2nd scan L3 C3 3rd scan AA12 关联规则 史忠植
Apriori 算法 Algorithm: Apriori 输入: Database, D, of transactions; minimum support threshold,min_sup. 输出: L, freuqent itemsets in D. 过程: Ck: Candidate itemset of size k Lk : frequent itemset of size k L1 = find_frequent_1_itemsets(D); for (k = 2; Lk+1 !=; k++) do begin{ Ck = apriori_gen(Lk-1 ,min_sup); for each transaction t in database D do{//scan D for counts Ct =subset(Ck ,t);// get the subsets of t that are candidates For each candidate c Ct c.count++; } Lk = candidates in Ck with min_support }end return L=kLk; AA12 关联规则 史忠植
Apriori 算法 Procedure apriori_gen(Lk-1: frequent (k-1)-itemsets; min_sup:minimum support threshold ) for each itemset l1 Lk-1 for each itemset l2Lk-1 if(l1[1]=l2[1]) (l1[2]=l2[2]) …(l1[k-1]=l2[k-1]) Then{ c=join(l1,l2)//join step: generate candidates if has_infrequent_subset(c, Lk-1 ) then delete c;//prune step: remove unfruitful candidate else add c to Ck } returnCk AA12 关联规则 史忠植
Apriori 算法 Join is generate candidates set of itemsets Ck from 2 itemsets in Lk-1 Procedure join(p,q) insert into Ck select p.item1, p.item2,..., p.itemk-1, q.itemk-1 from Lk-1 p, Lk-1 q where p.item1=q.item1, ..., p.itemk-2=q.itemk-2, p.itemk-1 = q.itemk-1 AA12 关联规则 史忠植
Apriori 算法 Procedure has_infrequent_subset(c:candidate k-itemset;Lk-1: frequent (k-1)-itemsets;)//use prior knowledge for each (k-1)-subset s of c if sLk-1 then return TRUE; return FALSE. AA12 关联规则 史忠植
Apriori 算法 • 如何生成候选项集? • 步骤 1: 自连接 Lk • 步骤 2: 剪枝 • 如何计算候选项集的支持度? • 候选项庥生成的示例 • L3={ abc, abd, acd, ace, bcd } • 自连接: L3*L3 • 由abc和abd连接得到abcd • 由acd和ace连接得到acde • 剪枝: • 因为ade 不在L3中acde 被剪除 • C4={abcd} AA12 关联规则 史忠植
如何生成候选项集? • 假定Lk-1中的项以一定顺序排列 • 步骤 1: 自连接 Lk-1 insert intoCk select p.item1, p.item2, …, p.itemk-1, q.itemk-1 from Lk-1 p, Lk-1 q where p.item1=q.item1, …, p.itemk-2=q.itemk-2, p.itemk-1 < q.itemk-1 • 步骤 2: 剪枝 forall itemsets c in Ckdo forall (k-1)-subsets s of c do if (s is not in Lk-1) then delete c from Ck AA12 关联规则 史忠植
如何计算候选项集的支持度? • 为何候选项集的支持度的计算是一个问题? • 候选项集的总数可能是巨大的 • 一个事务可能包含多个候选项集 • 方法: • 候选项集被存储在一个哈希树 • 哈希树的叶子结点包含一个项集和计数的列表 • 内部结点 包含一个哈希表 • 子集函数:找出包含在一个事务中的所有候选项集 AA12 关联规则 史忠植
频繁模式挖掘的挑战 • 挑战 • 多次扫描事务数据库 • 巨大数量的候选项集 • 繁重的计算候选项集的支持度工作 • 改进 Apriori: 大体的思路 • 减少事务数据库的扫描次数 • 缩减候选项集的数量 • 使候选项集的支持度计算更加方便 AA12 关联规则 史忠植
AprioriTid算法 • AprioriTid算法由Apriori算法改进 • 优点:只和数据库做一次交互,无须频繁访问数据库 • 将Apirori中的Ck扩展,内容由{c}变为{TID,c},TID用于唯一标识事务 • 引入Bk ,使得Bk对于事务的项目组织集合,而不是被动的等待Ck来匹配 AA12 关联规则 史忠植
AprioriTid算法 • 举例:minsupp = 2 • 数据库: AA12 关联规则 史忠植
AprioriTid算法示例 AA12 关联规则 史忠植
ApioriTid算法示例 AA12 关联规则 史忠植
ApioriTid算法示例 AA12 关联规则 史忠植
ApioriTid算法 • 上面图中分别为Bk和Lk ,而Ck和Apriori算法产生的一样,因此没有写出来 • 可以看到Bk由Bk-1得到,无须由数据库取数据 • 缺点:内存要求很大,事务过多的时候资源难以满足 AA12 关联规则 史忠植
内容提要 • 引言 • Apriori 算法 • Frequent-pattern tree 和FP-growth 算法 • 多维关联规则挖掘 • 相关规则 • 关联规则改进 • 总结 AA12 关联规则 史忠植
频繁模式挖掘的瓶颈 • 多次扫描数据库是高代价的 • 长模式的挖掘需要多次扫描数据库以及生成许多的候选项集 • 找出频繁项集 i1i2…i100 • 扫描次数: 100 • 候选项集的数量: (1001) + (1002) + … + (110000) = 2100-1 = 1.27*1030 ! • 瓶颈:候选项集-生成-测试 • 我们能否避免生成候选项集? AA12 关联规则 史忠植
不生成候选项集的频繁模式挖掘 • 利用局部频繁的项由短模式增长为长模式 • “abc”是一个频繁模式 • 得到所有包含 “abc”的事务: DB|abc • “d”是 DB|abc 的一个局部频繁的项 abcd 是一个频繁模式 AA12 关联规则 史忠植
FP Growth算法 (Han, Pei, Yin 2000) • Apriori算法的一个有问题的方面是其候选项集的生成 • 指数级增长的来源 • 另一种方法是使用分而治之的策略(divide and conquer) • 思想:将数据库的信息压缩成一个描述频繁项相关信息的频繁模式树 AA12 关联规则 史忠植
利用FP-树进行频繁模式挖掘 • 思想: 频繁模式增长 • 递归地增长频繁模式借助模式和数据库划分 • 方法 • 对每个频繁项,构建它的条件模式基,然后构建它的条件FP-树. • 对每个新创建的条件FP-树重复上述过程 • 直至结果FP-树为空,或者它仅包含一个单一路径.该路径将生成其所有的子路径的组合,每个组合都是一个频繁模式. AA12 关联规则 史忠植
频繁 1-项集 事务数据库支持度计数频繁1-项集 • 最小支持度为20% (计数为 2) AA12 关联规则 史忠植
FP-树 构建 按支持度降序排列 AA12 关联规则 史忠植
创建根结点 null I2 1 I1 1 (I2,1) I3 0 I4 0 (I1,1) I5 1 • 维护索引表 (I5,1) FP-树 构建 • 扫描数据库 • 事务1: I1, I2, I5 • 排序: I2, I1, I5 • 处理事务 • 以项的顺序增加结点 • 标注项及其计数 AA12 关联规则 史忠植
I2 2 I1 0 I3 0 I4 1 (I1,1) I5 0 (I5,1) FP-树 构建 null (I2,2) (I4,1) AA12 关联规则 史忠植
I2 7 I1 6 I3 6 I4 2 (I1,4) I5 2 (I5,1) FP-树 构建 null (I1,2) (I2,7) (I3,2) (I3,2) (I4,1) (I4,1) (I3,2) (I5,1) AA12 关联规则 史忠植
FP-树 构建 • 扫描事务数据库D一次,得到频繁项的集合F及它们的支持度.将F按支持度降序排列成L,L是频繁项的列表. • 创建FP-树的根, 标注其为NULL.对D中的每个事务进行以下操作: • 根据 L中的次序对事务中的频繁项进行选择和排序. 设事务中的已排序的频繁项列表为[p|P],其中p表示第一个元素,P表示剩余的列表.调用insert_Tree([p|P],T). AA12 关联规则 史忠植
FP-树 构建 • Insert_Tree([p|P],T) If T has a child N such that N.item-name= p.item-name, then increment N’s count by 1; elsecreate a new node N, and let its count be 1, its parent link be linked to T, and its node- link to the nodes with the same item-name via the node-link structure. If P is nonempty, call insert_tree(P,N) recursively. AA12 关联规则 史忠植
挖掘 FP-tree • 从索引表中的最后一个项开始 • 找到所有包含该项的路径 • 沿着结点-链接(node-links) • 确定条件模式 • 路径中符合频度要求的模式 • 构建 FP-tree C • 添加项至C中所有路径,生成频繁模式 • 递归地挖掘C (添加项) • 从索引表和树中移除项 AA12 关联规则 史忠植