- 6
- 0
- 约3.5千字
- 约 39页
- 2022-10-19 发布于广西
- 举报
. 关联规则挖掘 * * . 1、Apriori算法 Apriori算法命名源于算法使用了频繁项集性质的先验(Prior)知识。 Apriori算法将发现关联规则的过程分为两个步骤: 通过迭代,检索出事务数据库中的所有频繁项集,即支持度不低于用户设定的阈值的项集; 利用频繁项集构造出满足用户最小信任度的规则。 挖掘或识别出所有频繁项集是该算法的核心,占整个计算量的大部分。 * . Apriori的性质: 性质1:频繁项集的所有非空子集必为频繁项集。 性质2:非频繁项集的超集一定是非频繁的。 * . Apriori的步骤: 连接步:为找Lk ,通过将Lk-1与自身连接产生候选k项集的集合 剪枝步:Ck是Lk 的超集,也就是说,Ck的成员可以是也可以不是频繁的,但所有的频繁k项集都包含在Ck中。 任何非频繁的(k-1)项集都不是频繁k项集的子集。 * . Apriori算法 (1) L1={频繁1项集}; (2) for(k=2;Lk-1??;k++) do begin (3) Ck=apriori_gen(Lk-1); //新的候选频繁项集 (4) for all transactions t?D do begin //扫描计数 (5) Ct=subset(Ck,t); //得到t的子集,它们是候选 (6) for all candidates c?Ct do (7) c.count++; (8) end; (9) Lk={c?Ck|c.count?minsup} (10) end; (11) Answer= * . Apriori算法实例 现有A、B、C、D、E五种商品的交易记录表,试找 出三种商品关联销售情况(k=3),最小支持度=50%。 * . 实例解答 K=1 支持度50 K=2 支持度50 支持度50 * . 支持度50 支持度50 * . Apriori算法的不足 Ck中的项集是用来产生频集的候选集,最后的频集Lk必须是Ck的一个子集。Ck中的每个元素需在交易数据库中进行验证来决定其是否加入Lk,这里的验证过程是算法性能的一个瓶颈。这个方法要求多次扫描可能很大的交易数据库,即如果频集最多包含10个项,那么就需要扫描交易数据库10遍,这需要很大的I/O负载。 * . 提高Apriori算法的方法 Hash-based itemset counting(散列项集计数) Transaction reduction(事务压缩) Partitioning(划分) Sampling(采样) * . Hash-based itemset counting(散列项集计数) 将每个项集通过相应的hash函数映射到hash表 中的不同的桶中,这样可以通过将桶中的项集 计数跟最小支持计数相比较先淘汰一部分项集。 * . Transaction reduction(事务压缩) 减少用于未来扫描的事务集的大小。一个基本的原理就是当一个事务不包含长度为k的频集,则必然不包含长度为k+1的频集。从而我们就可以将这些事务加上标记或者删除,这样在下一遍的扫描中就可以减少进行扫描的事务集的个数。这个就是AprioriTid的基本思想。 * . Partitioning(划分) 挖掘频繁项集只需要两次数据库扫描 D中的任何频繁项集必须作为局部频繁项集至少出现在一个部分中 第一次扫描:将数据划分为多个部分并找到局部频繁项集 第二次扫描:评估每个候选项集的实际支持度,以确定全局频繁项集 * . Sampling(采样) 基本思想:选择原始数据的一个样本,在这个样本上用Apriori算法挖掘频繁模式 通过牺牲精确度来减少算法开销,为了提高效率,样本大小应该以可以放在内存中为宜,可以适当降低最小支持度来减少遗漏的频繁模式 可以通过一次全局扫描来验证从样本中发现的模式 可以通过第二此全局扫描来找到遗漏的模式 * . 2000年,Han等提出了一个称为FP-tree的算法。 FP-tree算法只进行2次数据库扫描。它不使用候选集,直接压缩数据库成一个频繁模式树,最后通过这棵树生成关联规则。 FP-tree算法由两个主要步骤完成:①利用事务数据库中的数据构造FP-tree;②从FP-tree中挖掘频繁模式。 2、FP-tree 算法(不用生成候选项集) * . 具体过程: 扫描数据库一次,得到频繁1-项集 把项按支持度递减排序 再一次扫描数据库,建立FP-tree 步骤1:构造 FP-tree树 * . 完备: 不会打破交易中的任何模式 包含了频繁模式挖掘所需的全部信息 紧密 去除不相关信
原创力文档

文档评论(0)