Apriori算法实验报告

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(1) insert (2) select (3) from (4) where
into
Ck
p[1],p[2],……,p[k-1],q[k-1] Lk-1p,Lk-1q p[1] = q[1],……,p[k-2] = q[k-2],p[k-1] < q[k-1]
接着,在 Prune(修剪)步骤,我们将删除所有的项目集 c∈Ck,如果 c 的一些 k-1 子集不在 Lk-1 中, 为了说明这个产生过程为什么能保持完全性, 要注意对于 Lk 中的任何有最小支持度的项目集, 任何大小为 k-1 的子集也必须有最小支持度。 因此, 如果我们用所有可能的项目扩充 Lk-1 中的每个 项目集,然后删除所有 k-1 子集不在 Lk-1 中的项目集,那么我们就能得到 Lk 中项目集的一个超集。 上面的合并运算相当于用数据库中所有项目来扩展 Lk-1; 如果删除扩展项目集的第 k-1 个项目 后得到的 k-1 项目集不在 Lk-1 中,则删除该扩展项目集。条件 p[k-1] < q[k-1]保证不会出现相同的 扩展项。因此,经过合并运算,Ck>Lk。类似原因在删除运算中,删除 Ck 中其 k-1 子项目集不在 Lk-1 中的项目集,同样没有删除包含在 Lk 中的项目集。 (1) for (2) (3) (4) 所有项目集 c ∈Ck do for 所有 c 的 (k-1) 子集 s if (s¢Lk-1) then do
从 Ck 中删除 c
例如:L3 为{{1 2 3},{1 2 4},{1 3 4},{1 3 5},{2 3 4}}。Jion 步骤之后,C4 为{{1 2 3 4}, {1 3 4 5}}。Prune 步骤将删除项集{1 3 4 5},因为项集{1 4 5}不在 L3 中。 Subset 函数: 候选项目集 Ck 存储在一棵 Hash 树中。 Hash 树的一个节点包含了项集的一个链表(一个叶节点) 或包含了一个 Hash 表(一个内节点)。在内节点中,Hash 表的每个 Bucket 都指向另一个节点。Hash 树的根的深度定义为 1。在深度 d 的一个内节点指向深度 d+1 的节点。项目集存储在叶子中。要 加载一个项目集 c 时,从根开始向下直到一个叶子。在深度为 d 的一个内节点上,要决定选取哪 个分枝,可以对此项目集的第 d 个项目使用一个 Hash 函数,然后跟随相应 Bucket 中的指针。所 有的节点最初都创建成叶节点。当一个叶节点中项集数量超过某个指定的阈值时,此叶节点就转 为一个内节点。 从根节点开始, Subset 函数寻找所有包含在某个事务 t 中的候选, 方法如下: 若处于一个叶子, 就寻找此叶子中的哪些项目集是包括在 t 中的, 并对它们附加引用指向答案集合。 若处于一个内节 点,而且是通过 Hash 项目 i 从而到达此节点的,那么就对 t 中 i 之后的每个项目进行 Hash,并对 相应 Bucket 中的节点递归地应用这个过程。对于根节点,就对 t 中的每个项目进行 Hash。 尽管 Apriori 算法已经可以压缩候选数据项集 Ck, 但是对于频繁项集尤其是 2 维的候选数据项 集产生仍然需要大量的存储空间。也就是说对于 2 维的候选数据项集,Apriori 算法的剪枝操作几 乎不起任何作用。例如:1 维高频数据项集 L1 的规模是 O(n),则 2 维候选数据项集的规模将达到 O(n2)。如果我们考虑一般情况,即在没有支持度的情况下 1 维高频数据项集 L1 的规模是 103,则 2 维候选数据项集的规模 C2 将达到 C1000≈5×105.这种空间复杂度以指数形式的增长,使得这个经
下图为对表 1、表 2 中数据的绘制:
100 90 80 70 60 50 40 30 20 10 0 200 Baidu Nhomakorabea00 1000 2000 record 4000 8000
sup=0.7 sup=0.9
从上图可以看出当增大数据库或者减少最小支持度时,都会增加计算的时间而且是成指数增 加。因为算法在每次循环时都要重新扫描数据库来计算支持度,而增大数据库和减少最小支持度 都会增大计算量。
表 1 :最小支持度=0.7 记录数 200 500 1000 2000 4000 8000 time(s) 1 4 5 14 49 90
表 2 :最小支持度=0.9 记录数 200 500 1000 2000 4000 8000 time(s) 1 2 4 9 27 59
表 3: 频繁项目集 记录数 200 500 1000 2000 4000 8000 Min_sup 0.7 0.9 0.7 0.9 0.7 0.9 0.7 0.9 0.7 0.9 0.7 0.9 L1 9 9 9 9 9 7 8 7 8 8 9 8 L2 19 10 20 10 15 1 20 10 22 5 18 3 L3 30 10 30 9 10 0 27 9 26 2 20 1 L4 25 5 25 3 2 0 18 3 13 0 9 0 L5 11 1 11 0 0 0 6 0 2 0 1 0 L6 2 0 2 0 0 0 1 0 0 0 0 0
典的算法的执行效率很难让人满意.Apriori 算法的两大缺点就是产生大量的候选集,以及需重复 扫描数据库。
3 实验结果与分析
实验测试用机为 P4 1.49GHZ,内存 256M。 实验采用蘑菇数据库,项目数=15,共进行了 6 组实验,实验数据如下: 表 1、表 2 为时间性能表; 表 3 为对于不同的记录数和最小支持度所测试到的频繁项目集的个数。
2 算法描述
Apriori 算法是一种找频繁项目集的基本算法。其基本原理是逐层搜索的迭代:频繁 K 项 Lk 集用于搜索频繁(K+1)项集 Lk+1,如此下去,直到不能找到维度更高的频繁项集为止。这种方法依 赖连接和剪枝这两步来实现。 算法的第一次遍历仅仅计算每个项目的具体值的数量,以确定大型 l 项集。随后的遍历,第 k 次遍历,包括两个阶段。首先,使用在第(k-1)次遍历中找到的大项集 Lk-1 和用 Aprioir-gen 函数产 生候选项集 Ck。接着扫描数据库,计算 Ck 中候选的支持度。用 Hash 树可以有效地确定 Ck 中包含 在一个给定的事务 t 中的候选。算法如下: (1) L1 = {大项目集 1 项目集}; (2) for (3) (4) (5) (6) (7) (8) (9) (10) end (11) key = ∪Lk; Apriori-gen 函数: Apriori 候选产生函数 Apriori-gen 的参数 Lk-1,即所有大型(k-1)项目集的集合。它返回所有大 型 k 项目集的集合的一个超集(Superset)。首先,在 Jion(连接)步骤,我们把 Lk-1 和 Lk-1 相连接以获 得候选的最终集合的一个超集 Ck: end Lk = {c ∈Ck | c.count ≥ minsupp} (k = 2; Lk-1 != 空; k++) Ck = apriori-gen(Lk-1); for 所有事务 t ∈D Ct = subset ( C k,t); for 所有候选 c ∈Ct c.count++; do do begin //新的候选集 begin //t 中所包含的候选 do
4.实验评价
针对要重复扫描数据库的问题,人们提出了一个改进的 Apriori 算法的改进算法 AprioriTid 算 法。其也使用了 Apriori-gen 算法函数以便在遍历之前确定候选项目集。这个算法的新特点是在第 一次遍历之后就不使用数据库 D 来计算支持度,而是用集合 Ck 来完成。
time
Apriori 算法实验报告
1 背景
关联规则挖掘的研究工作主要包括:Apriori 算法的扩展、数量关联规则挖掘、关联规则增量 式更新、无须生成候选项目集的关联规则挖掘、最大频繁项目集挖掘、约束性关联规则挖掘以及 并行及分布关联规则挖掘算法等,其中快速挖掘与更新频繁项目集是关联规则挖掘研究的重点, 也是多种数据挖掘应用中的技术关键,已用于分类规则挖掘和网络入侵检测等方面的研究。研究 者还对数据挖掘的理论进行了有益的探索,将概念格和粗糙集应用于关联规则挖掘中,获得了显 著的效果。到目前为止,关联规则的挖掘已经取得了令人瞩目的成绩,包括:单机环境下的关联 规则挖掘算法;多值属性关联规则挖掘;关联规则更新算法;基于约束条件的关联规则挖掘;关 联规则并行及分布挖掘算法等。
相关文档
最新文档