Issuu on Google+

Transactions on Computer Science and Technology June 2013, Volume 2, Issue 2, PP.24-30

FP-Growth Algorithm for Application in Research of the Basket Analysis Qing Tian 1, Yongmei Liu 2# 1. School of Computer Science, Zhao Qing University, Zhaoqing Guangdong 526061, China 2. College of Information Engineering, Capital Normal University, Beijing 100048, China #

Email: snowflash@163.com

Abstract During the process of mining frequent item sets, when minimum support is little, the production of candidate sets is a kind of time-consuming and frequent operation in the mining algorithm. The FP growth algorithm does not need to produce the candidate sets, the database which provides the frequent item set is compressed to a frequent pattern tree (or FP tree), the frequent item set is mining by using of FP tree. For the sake of researching the Basket Analysis, the Frequent-Pattern is introduced, Visual C++ is applied to design the program to mine the frequent item sets. In view of the frequent K-item set, the various results are contrasted, the goods which is sell possibly at the same time in the supermarket is arranged in the same place. Keywords: Candidate Sets; Frequent Item Sets; the Basket Analysis; FP-Growth; FP-Tree

FP-Growth 算法在购物篮分析研究中的应用* 田庆 1,刘永梅 2 1.肇庆学院 计算机学院,广东 肇庆 526061 2.首都师范大学 信息工程学院,北京 100048 要:频繁项集的挖掘过程中,在最小支持度较小的情况下,候选集的产生是算法的主要耗时操作。FP-Growth 算法不

用产生候选集,将提供频繁项集的数据库压缩到一棵频繁模式树(或 FP-Tree),利用 FP-Tree 挖掘出频繁项集。为了进 行购物篮分析,根据 FP-Growth 算法的理论,运用 VC++程序开发工具,对数据进行频繁项集挖掘,针对挖掘得到的频繁 K 项集,对比实验数据指导超级市场将可能同时卖出的商品摆放在一起。 关键词:候选集;频繁项集;购物篮分析;FP-Growth;FP-Tree

引言 在过去的数十年中,经济发展迅猛,信息化水平不断提高,组织机构普遍收集了大量的商业数据。然 而拥有大量的数据并不意味着拥有了丰富的商业信息。商业机构迫切需要从海量的数据中发现有价值的信 息、知识。频繁项集挖掘的一个典型例子是购物篮分析[1],通过频繁项集挖掘方法来发现顾客放入“购物篮” 中的不同商品之间的关联,分析顾客的购买习惯。这种关联的发现可以帮助零售商了解哪些商品频繁的被顾 客同时购买,从而帮助他们开发更好的营销策略。例如,如果顾客在超级市场购物时购买了牛奶,他们有多 大可能也同时购买面包(以及何种面包)?这种信息可以帮助零售商做选择性销售和安排货价空间,导致增 加销售量。购物篮分析的目标是在顾客的购买交易中分析出同时购买一类产品或一组产品的可能性(相互关 联),从购物篮分析中获得的知识是很有价值的。另外购物篮分析中,通过对大量的销售数据进行频繁项集 的挖掘,在最小支持度较小的情况下,此挖掘过程的主要耗时操作其一是候选集的产生,其二是多次重复扫 描数据库。针对上述两个问题,Han 等人提出了一种基于 FP-Tree 的关联规则挖掘算法 FP-Growth,一种不需 *

基金资助:受肇庆市科技创新项目(基金号:2012G26)和肇庆学院自然科学项目(基金号:201212)支持资助。 - 24 http://www.ivypub.org/cst


产生频繁候选集的方法来解决这个问题[2]。FP-Growth 算法主要通过 FP-Tree 来构造频繁集。FP-Tree 是一个 数据库里跟产生频繁项集有关的信息的压缩表示。在具体的实现中,我们通过了一系列的从低到高的数据 结构来实现它,并进而实现整个算法。

1 关联规则挖掘基本概念 关联规则在数据挖掘是一个重要的研究内容。而产生频繁集则是产生关联规则的第一步。在大多数以前 的实现中,人们普遍采用了类似于 Apriori[3,4]的算法。这种算法有一个很大的缺点,就是使用了不断产生候选 集并加以测试的方式来得到频繁集。但是,产生候选集的代价是很大的。FP-Growth 算法的优点是节省时间 和空间,对大规模数据采用分治的办法以避免规模巨大难以接受。FP-Growth 算法主要通过 FP-Tree 来构造 频繁集。这里仅介绍与 FP 增长算法有关的基本概念。 设 I = { i1 , i 2 ,..., i m }是项的集合。设任务相关的数据 D 是数据库事务的集合,其中每个事务 T 是项的 集合,使得 TI。每一个事务有一个标识符,称作 TID。设 A 是一个项集,事务 T 包含 A 当且仅当 AT。 关联规则是形如 A⇒B 的蕴涵式,其中 AI,BI,并且 AB=∅。规则 A⇒B 在事务集 D 中成立,具有支持 度 s,其中 s 是 D 中事务包含 AB(即,A 和 B 二者)的百分比。它是概率 P(AB)。规则 A⇒B 在事务集 D 中具有置信度 c,如果 D 中包含 A 的事务同时也包含 B 的百分比是 c。这是条件概率 P(B|A)。即 support(A⇒B)=P(AB)

(1)

confidence(A⇒B)=P(B|A)

(2)

同时满足最小支持度阈值(min_sup)和最小置信度阈值(min_conf)的规则称作强规则。项的集合称为项集。 包含 k 个项的项集称为 k-项集。集合{computer, financial_management_software}是一个 2-项集。项集的出现频 率是包含项集的事务数,简称为项集的频率、支持计数或计数。项集满足最小支持度 min_sup,如果项集的 出现频率大于或等于 min_sup 与 D 中事务总数的乘积。如果项集满足最小支持度,则称它为频繁项集。频繁 k-项集的集合通常记作 L k。 “如何由大型数据库挖掘关联规则?”关联规则的挖掘是一个两步的过程: (1)找出所有频繁项集:根据定义,这些项集出现的频繁性至少和预定义的最小支持计数一样。 (2)由频繁项集产生强关联规则:根据定义,这些规则必须满足最小支持度和最小置信度。 这两步中,第二步最容易。挖掘关联规则的总体性能由第一步决定。

2 FP 增长算法应用 2000 年 Han 等提出了一个称为 FP-Growth (Frequent pattern Growth)的算法。它是一种不产生候选的挖掘 频繁项集方法。它构造一个高度压缩的数据结构(FP-tree),压缩原来的事务数据库。FP-Growth 的算法共扫描 两次数据库[5]:第 1 次扫描数据库,得到频繁 1-项集;第 2 次扫描数据库,利用频繁 1-项集过滤数据库中的 非频繁项,同时生成 FP-Tree。最后通过这棵树生成关联规则。

2.1 建立原始样本数据库 设事务数据库中有 5 个事务,见下表 1 所示。 表 1 样本数据库 TID

Items bought

100

{f, a, c, d, g, i, m, p}

200

{a, b, c, f, l, m, o}

300

{b, f, h, j, o}

400

{b, c, k, s, p}

500

{a, f, c, e, l, p, m, n} - 25 http://www.ivypub.org/cst


2.2 建立频繁项集头表 假定最小事务支持计数为 3(即 min_sup=3/5=60%)。扫描数据库一次,得到频繁 1-项集,把项集按支 持度递减排序,确定频繁项集头表 Head。它由具有最小支持度的候选 1-项集组成,见表 2 所示。 表 2 频繁项集头表 head Item c f a b m p

frequency 4 4 3 3 3 3

2.3 建立 FP-Tree 首先,创建树的根结点,用"NULL"标记。二次扫描数据库 D。每个事务中的项按 Head 中的次序处理(即 根据递减支持度计数排序)并对每个事务创建一个分枝。例如,第一个事务"T100: f, a, c, d, g, i, m, p"按 Head 的次序包含五个项{c, f, a, m, p},导致构造树的第一个分 枝<(c:1), (f:1), (a:1), (m:1), (p:1)>。该分枝具有五个结点,其中,c 作为根的子女链接,f 链接到 c,a 链 接到 f,m 链接到 a,p 链接到 m。第二个事务 T200 按 Head 的次序包含项{c, f, a, b, m},它导致一个分枝, 然而,该分枝应当与 T100 已存在的路径共享前缀<(c:1), (f:1), (a:1)>。这样,我们将结点(c:1), (f:1), (a:1)的计 数增加 1,并创建一个新分支(b:1)和(m:1),其中 m 链接到 b。该分支作为(a:2)的子女链接。一般地,当为一 个事务考虑增加分枝时,沿共同前缀上的每个结点的计数增加 1,为随在前缀之后的项创建结点并链接。以 此类推下去,得到的新数据库以及 FP-Tree 如表 3 及图 1 所示。 表 3 新数据库 TID

Items bought

(ordered) frequent items

100

{f, a, c, d, g, i, m, p}

{c, f, a, m, p}

200

{a, b, c, f, l, m, o}

{c, f, a, b, m}

300

{b, f, h, j, o}

{f, b}

400

{b, c, k, s, p}

{c, b, p}

500

{a, f, c, e, l, p, m, n}

{c, f, a, m, p}

图 1 FP-Tree - 26 http://www.ivypub.org/cst


2.4 从 FP-Tree 到条件模式库 从 FP-Tree 的头表开始,按照每个频繁项的连接遍历 FP-Tree,列出能够到达此项的所有前缀路径,得到 条件模式库,如表 4 所示。 表 4 条件模式库 Head item

condition pattern base

f

c:4

a

cf:3

b

cfa:1, cf:1, c:1

m

cfa:2, cfab:1

p

cfam:2, cb:1

2.5 从条件模式库得到频繁项集 从条件模式库的 p 项开始,遍历其条件模式库中的每一项,列出公共部分,包括单项及多项之间的组合, 并进行相应的计数,得到条件 FP-Tree,再将条件 FP-Tree 与相应的头表项进行连接,最终生成频繁项集。如 表 5 所示。 表 5 生成频繁项集 Head Item

condition pattern base

condition FP-Tree

Frequency Item

p

cfam:2, cb:1

< c:3 >

cp:3

m

cfa:2, cfab:1

<c:3,f:3,a:3,cf:3,ca:3,fa:3, fa:3>

cm:3,fm:3,am:3,cfm:3,cam:3,fam:3,cfam:3

b

cfa:1, cf:1, c:1

< c:3 >

cb:3

a

cf:3

< cf:3 >

ca:3,fa:3,cfa:3

f

c:4

< c:4 >

cf:4

c

Φ

Φ

Φ

3 FP 增长算法应用实例和程序实现 3.1 应用实例 我们随机的从实验样本中抽取了一部分数据(如表 6 所示)模拟 FP 增长算法的过程。表格中的数据表 示不同的顾客购买不同的商品种类,表格开头一列是顾客的编号,每一行表示的是顾客购物篮中的商品名称 编号,对这个原始购物篮数据可以挖掘出商品间的关联关系。 表 6 原始购物篮数据 顾客编号

商品 1

商品 2

商品 3

商品 22

1

10

11

21

127

2

10

20

21

126

3

10

19

21

126

8124

10

14

22

126

图 2 中的结果是由 FP 增长算法计算所得,图中的数据表示频繁 1-项集、频繁 2-项集、频繁 3-项集、频 繁 4-项集以及频繁 5-项集的挖掘结果。 - 27 http://www.ivypub.org/cst


图 2 频繁项集挖掘结果

3.2 程序模块设计和代码实现 3.2.1 程序模块设计 在进行程序设计时,我们采用三层处理模块(如图 3 所示)。底层为数据处理模块,采用 UltraEdit 等工 具来提供原始数据并进行数据处理;中间层为业务逻辑处理模块,按照论文所用到的 FP 增长算法计算顾客 购物篮中商品的关联关系,具体过程在 Visual C++开发工具环境中实现的;上层为输出模块,用户可以观看 到频繁项集挖掘结果。

图 3 程序流程

3.2.2 部分代码实现 建立 FP-Tree 的代码实现: void buildTree() { int *freqItemP; int *indexList; int count; FILE *fp; int transSize; int item; - 28 http://www.ivypub.org/cst


int path; ifstream in(dataFile); char str[255]; char cID[6]; int i,j,m,readcnt,temp; headerTableLink=(FPTreeNode*)malloc (sizeof(FPTreeNode) * numLarge[0]); if (headerTableLink == NULL) { printf("out of memory\n"); exit(1); } for (i=0; i < numLarge[0]; i++) headerTableLink[i] = NULL; root = (FPTreeNode) malloc (sizeof(FPNode)); if (root == NULL) { printf("out of memory\n"); exit(1); } root->numPath = 1; root->parent = NULL; root->children = NULL; root->hlink = NULL; freqItemP = (int *) malloc (sizeof(int) * numItem); if (freqItemP == NULL) { printf("out of memory\n"); exit(1); } indexList = (int *) malloc (sizeof(int) * numItem); if (indexList == NULL) { printf("out of memory\n"); exit(1); }

4 结论 本文将数据挖掘与计算机程序设计相结合,挑选了一些实验数据进行实验,仅对购物篮分析给出了说明。 但是当数据库为特大型数据库,以至于将其分解成频繁 1-项集的项的数据库子集后,依然无法在内存中构造 FP-Tree 时,挖掘就难以顺利进行。改进的思路之一就是将频繁 1-项集的项的数据库子集再分解为频繁 2-项 集的项的数据库子集。如果分解后依然无法在内存中构造 FP-Tree 时,就再继续分解直到可以在内存中构造 子集的 FP-Tree 为止。但是这样递归分解数据库,时间开销必然很大,所以如何改进该算法使其在上述特殊 情况下既能顺利进行挖掘,时间开销又不大,将是今后的工作重点之一。

REFERENCES [1] Chao Wenhan, Zhang Xiaoming, Wang Fang(Translation), “Technology of Data Mining:”, Tsinghua University Press, Feb. 2013: - 29 http://www.ivypub.org/cst


146-159 [2] Li Liang, Mi Zhiwei,Xiang Xin, “Research on Association Analysis Algorithm of Strategic Performance Based on FP-Growth”, Microcomputer Applications, 2012(02): 175-177 [3] Deng Yangu,She Ying,Jia Weiqiang.Research on the improvement of FP-growth based on hash. 2010 2nd International Conference on Information Science and Engineering (ICISE). 2010: 155-156 [4] Tiwari Vivek,Tiwari Vipin,Gupta Shailendra,Tiwari Renu.Association rule mining: A graph based approach for mining frequent itemsets. 2010 International Conference on Networking and Information Technology (ICNIT). 2010: 201-203 [5] Zhou Qinliang, Li Yuchen, Gong Aiguo, “New algorithms for effectively creating conditional pattern bases of FP-Tree”, Journal of Computer Applications, 2006, 26(6): 1418-1421 [6] Hu Demin Zhao Ruike, “An improved algorithm for mining maximum frequent item sets”, Computer Applications and Software, 2012,12(5): 378-384 [7] Qin Liangxi, Shi Zhongzhi, “SFP-Max--A Sorted FP-Tree Based Algorithm for Maximal Frequent Patterns Mining”, Journal of Computer Research and Development. 2005, 42(2): 217-223 [8] Yi Tong, Xu Baowen, Wu Fangjun, “A FP-Tree Based Incremental Updating Algorithm for Mining Association Rules”, Chinese Journal of Computers, 2004, 27(5): 703-710 [9] Chen Anlong, Tang Changjie, Tao Hongcai, Yuan Changan, Xie Fangjun, “An Improved Algorithm Based on Maximum Clique and FP-Tree for Mining Association Rules”, Journal of Software, 2004, 15(8): 1198-1207

【作者简介】 田庆(1979-) ,女,土家族,硕士研究

刘永梅(1979-) ,女,汉族,硕士研究生,安徽滁州人,助

生,讲师,研究方向:计算机应用和网

理研究员,研究方向:智能信息处理与嵌入式系统设计。

络安全;2005 年毕业于中山大学电子

Email: snowflash@163.com

系。Email: zqtianqing@foxmail.com

- 30 http://www.ivypub.org/cst


Fp growth algorithm for application in research of the basket analysis