一种快速的频繁项集挖掘算法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
行效率。因为根据 R. Agraw al 性质: 频繁项集的所有非空子集都必须也是频繁的, 所有非频繁 1- 项集都对 后面频繁项集的产生都是无用的。然后, 频繁 1- 项集按照递增支持度计数排序, 每个项目用一个序列数字 来标号以此作为项目的标识符( ID) 。在频繁 2- 项集产生后, 生成频繁项集的位表。在位表中的每个元素 代表一个频繁项集。按照 A priori 的算法性质: 候选集 CK+ 1用 LK 自连接得到的, CK+ 1 会有 K - 1 个项集。 在频繁项集位表 BLK 中, 对 E1 中的任何元素, 用 0 代替 E1 中 1 的最后位, 产生一个中间变量( M ID) , 如果 M ID& E2= M ID, 则可将增加 E1 E2 到候选集位表 BCK+ 1中。
Item2
0
1
&
1
1
7
Item3
1
1
&
1
0
14
I tem5
sup port
0
0
1
&
1
1
1
1
0
7
0
图 3 候选集支持计数的例子 2. 4 算法描述
位表的伪代码如下: 首先位表产生频繁 1- 项集, 初始化数据库位表, 然后使用上述描述快速候选集产 生和快速候选集支持计数方法产生所有的频繁项集直到在 L K 没有项目集为此。
算法进改进以提高算法的效率。该文提出了一种基于位表的频繁项集挖掘算法, 用一种特别
的数据结构 位表来压缩数据库以便快速产生候选集和支持计数, 实验结果表明; 此算法大
大减少了遍历的时间, 是性能比较好的算法。
关键词: 数据挖掘; 频繁项集; 位表
中图分类号: T P311. 13
文献标识码: A
0引言
则在统计意义上所需覆盖事件样本数量的下限; 最小置信度则表征了规则用于推理的强度。关联规则的挖 掘就是在事务数据库 T 中找出具有用户给定的最小支持度 minsup 和最小置信度 minconf 的关联规则。
关联规则挖掘问题可分解为以下两个子问题: ( 1) 找出事务数据库 T 中所有大于等于用户指定最小支持度的项目集; ( 2) 利用频繁项集生成所需要的关联规则, 对每一个频繁项目 A, 找到 A 所有非 空子集 B, 若 support ( A) / support( B) minconf , 就生成关联规则 B ( A- B) 。 实际上, 挖掘关联规则的整个过程中的第一个子问题是核心问题也是难点问题, 以下算法的介绍也集 中在第一个子问题上。如图 1 所示, 用 Apriori 算法找出频繁项集一个例子, 在这个例子中的数据库 D 将用 于后面的例子中。
Database D
T ID
I tem
1
1, 2, 3
scan
2
2, 3, 4
3
1, 2, 3, 5
4
2, 5
It ems et { 1} { 2} { 3} { 5}
L1 S up port 2 2 2 2
C2 It em set { 1 2} { 1 3} { 1 5} { 2 3} { 2 5} { 3 5}
目, 都直接对应数据库位表的元素, 因为它们都与频繁 1- 项集有相同的顺序。在每个候选集中运行相应的 项目元素, 结果位是 1 的计数就是候选集的支持计数。如果支持计数大于 minsup, 那么候选集就成为一个 频繁项集。例如: 假设数据库是 D, L 1= { 1 2 3 5} , 对于项目 1, 它对应的数据库值为{ 1010} , 因此它的数据 库位表值是 10, 在数据库位初始化后, 整个数据库位表被压缩为{ 10 7 14 7} , 当要计算 C3= { 7} 即{ 2 3 4} , 用 7& 14& 7= 6, 对应的二进代码是{ 0110} , 因此候选集{ 2 3 4} 的支持计数是 2, 这意味着{ 2 3 5} 是频繁项集, 见图 3.
V ol. 35 N o. 6 December. 2006
一种快速的频繁项集挖掘算法
王朝辉, 王婷婷
( 武汉科技大学计算机科学与技术学院, 湖北 武汉 430081)
摘 要: 挖掘频繁项集是许多数据挖掘任务中的关键问题, 也是关联规则挖掘算法, 所以提高
频繁项集的生成效率一直是近几年数据挖掘领域研究的热点之一, 研究人员从不同的角度对
gen- ht( L 2[ i] ) 8 8 8 4 8 8
M ID& L 2[ j] 0 0 0 4 0 0
BitT ableBC3 7{ 2 3 4}
图 2 候选集快速产生的例子 2. 3 快速计算候选集的支持计数
候选集的快速支持计数法直接在位表数据库中计数候选集中的支持数。对于每个候选集中的每个项
例如: 假设数据库是基于图 1 中的 D, 最小支持率 minsup= 2. 在第一次扫描整个数据库后, 可以确定频 繁 1- 项集 L1= { 1 2 3 5} , 项目 4 不在频繁 1- 项集中, 因此频繁 1- 项集重新排列, 并且在整个数据挖掘过 程中用项集{ 1 2 3 4} 替代 L 1= { 1 2 3 5} , 目的是减少位表的大小。从 L 1 和 C1, 产生 L2= { { 1 3} { 2 3} { 2 4} { 3 4} } . 在频繁 1- 项集中共有 4 个项目, 因此整个频繁项集位表中元素的二进制代码的长度为 4. 频繁项集 位表的的二进制代码为{ { 1010} { 0110} { 0101} { 0011} } , 因此对应的位表 BL2 是{ 10 6 5 3} 。通过将{ 1010} 中 1 的最后个用 0 替代, 项集{ 1 3} 的中间变量 M ID 是 8, 二进代码是{ 1000} 。用 MID 分别与{ 6 5 3} 相与, 结 果都为 0, 因此{ 1 3} { 2 3} , { 1 3} { 2 4} , { 1 3} { 3 4} 不能被连接产生候选集。项集{ 2 3} 的 M ID 是 4, M ID& 5 = M ID, 因此{ 2 3} { 2 4} 能被连接, 产生 7 即( { 2 3 4} ) 将被增加候选集中。过程见图 2.
第 35 卷 第 6 期 2006 年 12 月
贵州工业大学学报( 自然科学版) JOU R NAL OF GU IZHO U U N IV ERSI T Y OF T ECHNOL OGY
( Natur al Science Edition)
文章编号: 1009- 0193( 2006) 06- 0060- 04y
Apriori 算法的瓶颈是候选集的产生及需多次扫描数据库, 在实际应用中存在令人不满意的地方, 人们 又提出了一些优化的方法, 如基于划分的方法、基于 HASH 的方法、基于采样的方法等, 但是这些频集挖掘 方法都是基于 Apriori 的, 仍然无法克服 Apriori 方法的固有缺陷。本文提出了一种基于位表的频繁项集挖 掘算法, 它将数据库压缩到位表中, 通过特别的数据结构, 快速产生候选集和支持率。
伪代码: 位表 Bit T ableF1 ( Database D, int M inSup)
{ L 1= { frequent 1- itemset s} ;
第6期
王朝辉, 等: 一种快速的频繁项集挖掘算法
63
Bit T able[ ] db= database- bit table- init( D, L1) ; L2= get 12f rom l1( L1) ; Int k= 2; While( L kNotEmpt y( ) )
表 1 压缩数据库成位表的例子
T ID 1 2 3 4
位表
Item1 1 0 1 0 10
Item2 0 1 1 1 7
I tem3 1 1 1 0 14
I tem4 1 0 0 0 8
Item5 0 1 1 1 7
62
贵 州 工 业 大 学 学 报 ( 自然科学版)
2006 年
2. 2 候选集的快速产生 该算法首先产生频繁 1- 项集, 所有的非频繁 1- 项集将被删除以便减少位表的开销提高整个过程的运
的压缩, 如果候选集 C 包含项目 I, 那么位表中元素位 i 被置为Leabharlann Baidu1, 否则被置为 0。对数据库的压缩, 位表可以 直接使用。如果交易集 T 中出现项目 i, 位表中的 T 元素位 i 被置为 1, 否则被置为零。
例如: 考虑如图 1 中的数据库 D 和其中的一个候选集 c= { 2 3 5} , 将 c 压缩成二进制代表为 01101 的数 13, 图 1 中数据库 D 压缩成{ 10 7 14 8 7} , 分别代表{ { 1010} { 0111} { 1110} { 1000} { 0111} } , 如图表 1:
数据挖掘是指从大量数据库中提取出可信、新颖、有效并能被人理解的模式的高级处理过程。在数据 挖掘研究中, 关联规则挖掘是一个非常重要的研究领域。关联规则挖掘问题由 R. Agraw al 在 1993 年首次 提出, 关联规则挖掘的一个典型例子是购物篮分析。
目前绝大多数研究都是采用类似 Apriori 算法的思想, 即首先扫描数据库, 统计数据库中事务的数量和 各个不同的项( 1- 项集) 所出现的次数, 进而根据最小支持度 m insup 获得所有的频繁 1- 项集 L 1, 然后利用 L1 查出找频繁 2- 项集, 如此循环直到不再有新的频繁项集被找到为止. 然而, 这样产生候选集的开销极 大, 特别是存在有长频繁项集或最小支持度非常小时。例如: 当有 104 个频繁 1- 项集时, Apriori 算法就会 产生多于 107 个候选 2- 项集。此外, 若发现长度为 100 的频繁项集, 则将会产生 1030 个候选集。而且它还 需反复地扫描数据库, 若频繁项集的最大长度为 100, 就需扫描数据库 100 次。
L2
Itemset support
{ 1 3}
2
{ 2 3}
2
{ 2 5}
3
{ 3 5}
2
L2( i) , L ( j) { 1 3} { 2 3} { 1 3} { 2 4} { 1 3} { 3 4} { 2 3} { 2 4} { 2 3} { 3 4} { 2 4} { 3 4}
BitT ableBL 2 10, 6 10, 5 10, 3 6, 5 6, 3 5, 3
y 收稿日期: 2006- 06- 25 作者简介: 王朝辉( 1967- ) , 男, 博士, 副教授, 从事计算机应用教学研究.
第6期
王朝辉, 等: 一种快速的频繁项集挖掘算法
61
与 D 中事务总数的乘积。如果项集满足最小支持度, 则称它为频繁项集( f requent it emset) 。 为了挖掘有意义的关联规则, 一般是给定两个阀值: 最小支持度和最小置信度。最小支持度定义了规
L2
It ems et
S up port
scan
{ 1 3}
2
{ 2 3}
2
{ 2 5}
3
{ 3 5}
2
C3 It em set { 2 3 5}
L3
scan
It ems et
S up port
{2 3 5}
2
图 1 找出频繁项集的例子
2 基于位表的频繁项集挖掘算法
2. 1 位表的定义 位表就是一个整数集, 它的每一位代表一个项目( Item) , 位表是用来压缩候选集和数据库的。对候选集
1 关联规则的基本概念
关联规则的挖掘问题可形式化描述如下: 设 I = { i 1, i 2, i m } 是 M 个不同的项目的集合, 给定一个 事务数据库 D , 其中的每一个事务 T 是 I 中一组项目的集合, 即 T I , T 有唯一的标识符 T ID .
关联规则是形如 X Y 的蕴含式, 其中 X I , Y I , X Y = 关联规则成立的条件是: ( 1) 它具有支持度 S , 其中 D 中至少有 S % 的事务包含 X Y , 即 Support( X Y ) = P ( X Y ) ; ( 2) 它具有置信度 C, 也就是在 D 所包含X 的事务中, 至少有 C% 的事务包含 Y , 即 Conf idence( X Y ) = P ( Y | X ) . 包含 K 个项的项集称为 K- 项集。项集的出现频率是包含项集的事务数, 简称为项集的事务数, 简称 为项集的频率、支持计数或计数。项集满足最小支持度 minsup, 如果项集中的出现频率大于或等于 minsup
Item2
0
1
&
1
1
7
Item3
1
1
&
1
0
14
I tem5
sup port
0
0
1
&
1
1
1
1
0
7
0
图 3 候选集支持计数的例子 2. 4 算法描述
位表的伪代码如下: 首先位表产生频繁 1- 项集, 初始化数据库位表, 然后使用上述描述快速候选集产 生和快速候选集支持计数方法产生所有的频繁项集直到在 L K 没有项目集为此。
算法进改进以提高算法的效率。该文提出了一种基于位表的频繁项集挖掘算法, 用一种特别
的数据结构 位表来压缩数据库以便快速产生候选集和支持计数, 实验结果表明; 此算法大
大减少了遍历的时间, 是性能比较好的算法。
关键词: 数据挖掘; 频繁项集; 位表
中图分类号: T P311. 13
文献标识码: A
0引言
则在统计意义上所需覆盖事件样本数量的下限; 最小置信度则表征了规则用于推理的强度。关联规则的挖 掘就是在事务数据库 T 中找出具有用户给定的最小支持度 minsup 和最小置信度 minconf 的关联规则。
关联规则挖掘问题可分解为以下两个子问题: ( 1) 找出事务数据库 T 中所有大于等于用户指定最小支持度的项目集; ( 2) 利用频繁项集生成所需要的关联规则, 对每一个频繁项目 A, 找到 A 所有非 空子集 B, 若 support ( A) / support( B) minconf , 就生成关联规则 B ( A- B) 。 实际上, 挖掘关联规则的整个过程中的第一个子问题是核心问题也是难点问题, 以下算法的介绍也集 中在第一个子问题上。如图 1 所示, 用 Apriori 算法找出频繁项集一个例子, 在这个例子中的数据库 D 将用 于后面的例子中。
Database D
T ID
I tem
1
1, 2, 3
scan
2
2, 3, 4
3
1, 2, 3, 5
4
2, 5
It ems et { 1} { 2} { 3} { 5}
L1 S up port 2 2 2 2
C2 It em set { 1 2} { 1 3} { 1 5} { 2 3} { 2 5} { 3 5}
目, 都直接对应数据库位表的元素, 因为它们都与频繁 1- 项集有相同的顺序。在每个候选集中运行相应的 项目元素, 结果位是 1 的计数就是候选集的支持计数。如果支持计数大于 minsup, 那么候选集就成为一个 频繁项集。例如: 假设数据库是 D, L 1= { 1 2 3 5} , 对于项目 1, 它对应的数据库值为{ 1010} , 因此它的数据 库位表值是 10, 在数据库位初始化后, 整个数据库位表被压缩为{ 10 7 14 7} , 当要计算 C3= { 7} 即{ 2 3 4} , 用 7& 14& 7= 6, 对应的二进代码是{ 0110} , 因此候选集{ 2 3 4} 的支持计数是 2, 这意味着{ 2 3 5} 是频繁项集, 见图 3.
V ol. 35 N o. 6 December. 2006
一种快速的频繁项集挖掘算法
王朝辉, 王婷婷
( 武汉科技大学计算机科学与技术学院, 湖北 武汉 430081)
摘 要: 挖掘频繁项集是许多数据挖掘任务中的关键问题, 也是关联规则挖掘算法, 所以提高
频繁项集的生成效率一直是近几年数据挖掘领域研究的热点之一, 研究人员从不同的角度对
gen- ht( L 2[ i] ) 8 8 8 4 8 8
M ID& L 2[ j] 0 0 0 4 0 0
BitT ableBC3 7{ 2 3 4}
图 2 候选集快速产生的例子 2. 3 快速计算候选集的支持计数
候选集的快速支持计数法直接在位表数据库中计数候选集中的支持数。对于每个候选集中的每个项
例如: 假设数据库是基于图 1 中的 D, 最小支持率 minsup= 2. 在第一次扫描整个数据库后, 可以确定频 繁 1- 项集 L1= { 1 2 3 5} , 项目 4 不在频繁 1- 项集中, 因此频繁 1- 项集重新排列, 并且在整个数据挖掘过 程中用项集{ 1 2 3 4} 替代 L 1= { 1 2 3 5} , 目的是减少位表的大小。从 L 1 和 C1, 产生 L2= { { 1 3} { 2 3} { 2 4} { 3 4} } . 在频繁 1- 项集中共有 4 个项目, 因此整个频繁项集位表中元素的二进制代码的长度为 4. 频繁项集 位表的的二进制代码为{ { 1010} { 0110} { 0101} { 0011} } , 因此对应的位表 BL2 是{ 10 6 5 3} 。通过将{ 1010} 中 1 的最后个用 0 替代, 项集{ 1 3} 的中间变量 M ID 是 8, 二进代码是{ 1000} 。用 MID 分别与{ 6 5 3} 相与, 结 果都为 0, 因此{ 1 3} { 2 3} , { 1 3} { 2 4} , { 1 3} { 3 4} 不能被连接产生候选集。项集{ 2 3} 的 M ID 是 4, M ID& 5 = M ID, 因此{ 2 3} { 2 4} 能被连接, 产生 7 即( { 2 3 4} ) 将被增加候选集中。过程见图 2.
第 35 卷 第 6 期 2006 年 12 月
贵州工业大学学报( 自然科学版) JOU R NAL OF GU IZHO U U N IV ERSI T Y OF T ECHNOL OGY
( Natur al Science Edition)
文章编号: 1009- 0193( 2006) 06- 0060- 04y
Apriori 算法的瓶颈是候选集的产生及需多次扫描数据库, 在实际应用中存在令人不满意的地方, 人们 又提出了一些优化的方法, 如基于划分的方法、基于 HASH 的方法、基于采样的方法等, 但是这些频集挖掘 方法都是基于 Apriori 的, 仍然无法克服 Apriori 方法的固有缺陷。本文提出了一种基于位表的频繁项集挖 掘算法, 它将数据库压缩到位表中, 通过特别的数据结构, 快速产生候选集和支持率。
伪代码: 位表 Bit T ableF1 ( Database D, int M inSup)
{ L 1= { frequent 1- itemset s} ;
第6期
王朝辉, 等: 一种快速的频繁项集挖掘算法
63
Bit T able[ ] db= database- bit table- init( D, L1) ; L2= get 12f rom l1( L1) ; Int k= 2; While( L kNotEmpt y( ) )
表 1 压缩数据库成位表的例子
T ID 1 2 3 4
位表
Item1 1 0 1 0 10
Item2 0 1 1 1 7
I tem3 1 1 1 0 14
I tem4 1 0 0 0 8
Item5 0 1 1 1 7
62
贵 州 工 业 大 学 学 报 ( 自然科学版)
2006 年
2. 2 候选集的快速产生 该算法首先产生频繁 1- 项集, 所有的非频繁 1- 项集将被删除以便减少位表的开销提高整个过程的运
的压缩, 如果候选集 C 包含项目 I, 那么位表中元素位 i 被置为Leabharlann Baidu1, 否则被置为 0。对数据库的压缩, 位表可以 直接使用。如果交易集 T 中出现项目 i, 位表中的 T 元素位 i 被置为 1, 否则被置为零。
例如: 考虑如图 1 中的数据库 D 和其中的一个候选集 c= { 2 3 5} , 将 c 压缩成二进制代表为 01101 的数 13, 图 1 中数据库 D 压缩成{ 10 7 14 8 7} , 分别代表{ { 1010} { 0111} { 1110} { 1000} { 0111} } , 如图表 1:
数据挖掘是指从大量数据库中提取出可信、新颖、有效并能被人理解的模式的高级处理过程。在数据 挖掘研究中, 关联规则挖掘是一个非常重要的研究领域。关联规则挖掘问题由 R. Agraw al 在 1993 年首次 提出, 关联规则挖掘的一个典型例子是购物篮分析。
目前绝大多数研究都是采用类似 Apriori 算法的思想, 即首先扫描数据库, 统计数据库中事务的数量和 各个不同的项( 1- 项集) 所出现的次数, 进而根据最小支持度 m insup 获得所有的频繁 1- 项集 L 1, 然后利用 L1 查出找频繁 2- 项集, 如此循环直到不再有新的频繁项集被找到为止. 然而, 这样产生候选集的开销极 大, 特别是存在有长频繁项集或最小支持度非常小时。例如: 当有 104 个频繁 1- 项集时, Apriori 算法就会 产生多于 107 个候选 2- 项集。此外, 若发现长度为 100 的频繁项集, 则将会产生 1030 个候选集。而且它还 需反复地扫描数据库, 若频繁项集的最大长度为 100, 就需扫描数据库 100 次。
L2
Itemset support
{ 1 3}
2
{ 2 3}
2
{ 2 5}
3
{ 3 5}
2
L2( i) , L ( j) { 1 3} { 2 3} { 1 3} { 2 4} { 1 3} { 3 4} { 2 3} { 2 4} { 2 3} { 3 4} { 2 4} { 3 4}
BitT ableBL 2 10, 6 10, 5 10, 3 6, 5 6, 3 5, 3
y 收稿日期: 2006- 06- 25 作者简介: 王朝辉( 1967- ) , 男, 博士, 副教授, 从事计算机应用教学研究.
第6期
王朝辉, 等: 一种快速的频繁项集挖掘算法
61
与 D 中事务总数的乘积。如果项集满足最小支持度, 则称它为频繁项集( f requent it emset) 。 为了挖掘有意义的关联规则, 一般是给定两个阀值: 最小支持度和最小置信度。最小支持度定义了规
L2
It ems et
S up port
scan
{ 1 3}
2
{ 2 3}
2
{ 2 5}
3
{ 3 5}
2
C3 It em set { 2 3 5}
L3
scan
It ems et
S up port
{2 3 5}
2
图 1 找出频繁项集的例子
2 基于位表的频繁项集挖掘算法
2. 1 位表的定义 位表就是一个整数集, 它的每一位代表一个项目( Item) , 位表是用来压缩候选集和数据库的。对候选集
1 关联规则的基本概念
关联规则的挖掘问题可形式化描述如下: 设 I = { i 1, i 2, i m } 是 M 个不同的项目的集合, 给定一个 事务数据库 D , 其中的每一个事务 T 是 I 中一组项目的集合, 即 T I , T 有唯一的标识符 T ID .
关联规则是形如 X Y 的蕴含式, 其中 X I , Y I , X Y = 关联规则成立的条件是: ( 1) 它具有支持度 S , 其中 D 中至少有 S % 的事务包含 X Y , 即 Support( X Y ) = P ( X Y ) ; ( 2) 它具有置信度 C, 也就是在 D 所包含X 的事务中, 至少有 C% 的事务包含 Y , 即 Conf idence( X Y ) = P ( Y | X ) . 包含 K 个项的项集称为 K- 项集。项集的出现频率是包含项集的事务数, 简称为项集的事务数, 简称 为项集的频率、支持计数或计数。项集满足最小支持度 minsup, 如果项集中的出现频率大于或等于 minsup