基于单向F_tree的最大频繁项集挖掘算法研究

合集下载

频繁项集挖掘算法

频繁项集挖掘算法

频繁项集挖掘算法 FP-GrowthApriori算法和FPTree算法都是数据挖掘中的关联规则挖掘算法,处理的都是最简单的单层单维布尔关联规则。

Apriori算法Apriori算法是⼀种最有影响的挖掘布尔关联规则频繁项集的算法。

是基于这样的事实:算法使⽤频繁项集性质的先验知识。

Apriori使⽤⼀种称作逐层搜索的迭代⽅法,k-项集⽤于探索(k+1)-项集。

⾸先,找出频繁1-项集的集合。

该集合记作L1。

L1⽤于找频繁2-项集的集合L2,⽽L2⽤于找L3,如此下去,直到不能找到频繁k-项集。

找每个L k需要⼀次数据库扫描。

这个算法的思路,简单的说就是如果集合I不是频繁项集,那么所有包含集合I的更⼤的集合也不可能是频繁项集。

算法原始数据如下:TID List of item_ID’sT100 T200 T300 T400 T500 T600 T700 T800 T900I1,I2,I5 I2,I4I2,I3I1,I2,I4 I1,I3I2,I3I1,I3I1,I2,I3,I5 I1,I2,I3算法的基本过程如下图:⾸先扫描所有事务,得到1-项集C1,根据⽀持度要求滤去不满⾜条件项集,得到频繁1-项集。

下⾯进⾏递归运算:已知频繁k-项集(频繁1-项集已知),根据频繁k-项集中的项,连接得到所有可能的K+1_项,并进⾏剪枝(如果该k+1_项集的所有k项⼦集不都能满⾜⽀持度条件,那么该k+1_项集被剪掉),得到项集,然后滤去该项集中不满⾜⽀持度条件的项得到频繁k+1-项集。

如果得到的项集为空,则算法结束。

连接的⽅法:假设项集中的所有项都是按照相同的顺序排列的,那么如果[i]和[j]中的前k-1项都是完全相同的,⽽第k项不同,则[i]和[j]是可连接的。

⽐如中的{I1,I2}和{I1,I3}就是可连接的,连接之后得到{I1,I2,I3},但是{I1,I2}和{I2,I3}是不可连接的,否则将导致项集中出现重复项。

fp树算法

fp树算法

fp树算法FP树算法,全称频繁模式树算法(Frequent Pattern Tree Algorithm),是一种用来挖掘大规模数据集种频繁模式的算法。

其核心思想是利用FP树结构来存储数据集并高效地发现频繁模式。

这一算法在数据挖掘任务中被广泛使用,尤其适合处理大量离散数据的场景。

FP树算法的主要步骤分为三个部分:首先,统计出数据集中所有项的出现次数,并创建FP树结构;然后,通过遍历FP树结构,找出所有频繁项集;最后,再通过递归方法,在频繁项集种寻找关联规则。

首先,利用常用的Apriori算法,统计数据集中所有项(Item)的出现次数,并保留所有出现次数大于等于最小支持度(minimum support)的项。

然后,根据这些项构建FP树,FP树的节点包含了一个Item和指向所有出现该Item的项的连接。

其次,利用FP树结构,遍历FP树的所有路径,并寻找包含所有Item的路径,即频繁项集(Frequent Itemsets)。

在FP树结构中,由于每个Item的排序是根据最初出现的顺序而定,因此按顺序寻找每个Item,可以高效地找到频繁项集。

同时,在FP Tree的节点之间采用连接链接的方法构造,可以高效地遍历所有路径,从而找到所有频繁项集。

最后,对频繁项集可以进行关联规则的挖掘。

在求解关联规则时,需要考虑可信度(confidence)的概念,表示对于一个频繁项集$I$中的项$x$与$y$,给定$x$的前提下,$y$出现的概率。

我们可以通过计算$\frac{support(I)}{support(x)}$来得到$x$与$y$的可信度。

在求解规则时,在所有可信度达到最小置信度(minimum confidence)的规则中选择最优解。

总的来说,FP树算法具有以下几个优点:首先,它可以快速地找到频繁项集,因为它只遍历了FP树的所有路径而不是组合所有的项。

其次,它可以高效地存储数据,因为FP树只需要存储每个项的出现次数以及连接信息,比传统的关系型数据库存储更加高效。

基于改进FP-tree的最大频繁项目集挖掘算法

基于改进FP-tree的最大频繁项目集挖掘算法

CO N Y I DE J IDU
ht:/ w .oaa t / w w jc.n p
di1.7 4 S ..07 2 1.0 2 o:0 3 2/ P J18 .02 0 36
基 于 改进 F - e P t e的最 大频 繁 项 目集 挖 掘 算 法 r
马 丽 生 。姚 光 顺 , 传 健 , 杨
MA L— eg‘ A u n — u ,Y N h a -a i h n ,Y O G a gs n A G C u nj n s h i
( oeeo o p t n f rai n ier g hzo nvrt hzo n u 3 00 hn ) C lg Cm ue ad I om t nE gne n,C uhuU i sy l f r n o i e i,C uhuA h i 90 ,C i 2 a
Ab t a t n o d r t e u e t e r p ae r v r a i s o ah i h P t e t e c n i o a a tr a e fal sr c :I r e o r d c h e e td ta es l t me f p t n t e F ・ e , h o d t n l p t n b s s o r i e l r u n i ms t n t P t e n e o b a e t e e it o h .C n e n h s r b e f q e t 一 e esi e F - e e d t e s v d i h xsi ga g rtms o c r i gt i p o lm,i e n w a g rtm, e 1 t h r n n l i n n t e lo h h i te d t t cu e o P t e w s i r v d t a n y t e c n i o a p t r a e e e s v d wh c e e c n t u e y t e h aa sr t r fF —r a mp o e h to l h o dt n at n b s s w r a e ih w r o si td b h u e i l e t i ms i h a h f m v r e fn d ’ a e t t h o ti h P te ,a d t eso a es a eo e c n i o a p t r a e t n t e p t o e e yla o e p r ns ot e r o t e F - e n tr g p c f h o dt n atn b s s e r n r h t i l e w sr d c d A trsu y n e c p c d t emeh d o a a r p e e tt n i h g rtm o n n x ma e u n a e u e . f t d ig s a h s a e a h to fd t e r s n ai n te a o h fr mii g ma i l ̄ q e t e r n o l i i ms t,t e p u ig a d c mp e so tae is we e d v l p d t r u h t e rt a n y i n ei c t n w ih c u d t es h r n n n o r si n sr tge r e eo e h o g h o ei l a a ss a d v r a i , h c o l e c l i f o d c e e t e s a c p c n h c e o P t e F n l ,t e n w ag r h w s c mp r d wi HT P ag r h a d e r a h e h s a e a d t e s a fF — e . i al s r l r y h e lo t m a o ae t N F G l o t m n i h i F MAX ag r h r s e t e y n tr f a c r c n f ce c . T * e p r n a e u s s o h t t e n w F -re p o t m e p ci l i e ms o c u a y a d e in y l i v i h x e me t l r s h h w t a h e P t i e ag r h s v s t e r q i d c n i o s fr mo e - a e tr g p c r h n 5 % lo t m a e e u r o dt n o d l s d soa e s a e mo e t a 0 i h e i b ta h n NHT P a g rt m, a d t e F G l o i h n h

一种基于FP-树的最大频繁模式增量更新挖掘算法

一种基于FP-树的最大频繁模式增量更新挖掘算法
出来的最大频繁模式。 关键词 数据挖掘 关联规则 频繁模式树 最大频繁模 式
AN FP. TREE BAS ED NCREM ENTAL I UPDATI NG ALGORI THM
F A MAL F EQU N A T R I NG OR M XI R E T P T E NSM NI
0 引 言
关联规则的挖掘是数据挖掘研究 的重要 内容之一 。已经有 许多可用 的挖 掘算 法 , pi i 法 ” 和利 用 频 繁模 式 树 ( P A r r算 o F—
1 基本概念
设 I i, , , 是项 的集合 , ={li … i 2 m} 事务数据库 D=<T ,: T ,
u d td p ae . Ke wo d y rs Daa mii g As o it n r l F e u n atr r e Ma i l r q e tp t r t n n s ca i e o u r q e tp t n t e e x ma fe u n at n e

种 基 于 F - 的最 大 频 繁 模 式 增 量 更 新 挖 掘 算 法 P树
李忠哗பைடு நூலகம் 任春龙 何丕廉
河北 张家 口 05 0 ) 70 0 天津 30 7 ) 0 0 2 ( 河北北 方学 院计算机 系
。 天津大学计算机学院 (


挖掘关联规则是数据挖掘领域 的一个重要研 究方 向, 人们 已经提 出了许 多用于发现数据库 中关联规则 的算法, 但对关联
维普资讯
第2 4卷 第 5期
20 0 7年 5月
计 算机 应 用与软 件
Co u e mp t rApp iai n n o t r lc to s a d S f wa e

fp树算法

fp树算法

fp树算法FP树(Frequent Pattern Tree)算法是一种用于挖掘频繁项集的算法。

它通过构建一种称为FP树的数据结构,将事务数据集合转换为一棵树状结构,并利用该树状结构来发现频繁项集。

FP树算法具有高效的性能和较小的存储空间占用,因此被广泛应用于关联规则挖掘和数据压缩等领域。

FP树的构建过程包括两个主要步骤:首先是对事务数据集进行扫描以构建频繁项集表达的FP树,然后利用FP树进行频繁项集的挖掘和生成关联规则。

在FP树构建的过程中,数据集首先需要按照事务中的频繁项出现的频率进行排序,然后进行遍历扫描。

通过扫描事务数据集两次,分别统计每个项集的频度和排序,构建FP树的树状结构。

在构建过程中,如果某个项在树中已经存在,就在对应的节点上增加计数;否则,就新增一个节点。

FP树的节点包括项标签、计数和节点链接(指向相同项标签的下一个节点)。

其中,项标签表示该节点所代表的项,计数表示该项出现的频度。

节点链接用于将相同项标签的节点之间进行链接,方便后续的挖掘。

FP树的构建完成之后,可以通过遍历FP树来挖掘频繁项集。

FP树的遍历过程类似于深度优先搜索,从根节点开始,沿着子节点的链接递归遍历整个树。

在遍历过程中,根据某个节点的计数和条件模式基(由节点路径上的非叶子节点组成)可以得到该节点的条件频繁项集。

同时,遍历过程还会产生一颗以当前节点为根的条件FP树,用于进一步的频繁项集挖掘。

FP树算法通过构建FP树和遍历FP树的方式来发现频繁项集,具有较高的效率和性能优势。

它避免了候选项集的生成和扫描过程,减少了计算的复杂度并节省了存储空间。

因此,FP树算法在关联规则挖掘、购物篮分析、在线推荐系统等领域有着广泛的应用。

总结起来,FP树算法是一种用于挖掘频繁项集的高效算法。

通过构建FP树和遍历FP树的方式,可以发现频繁项集并生成关联规则。

该算法具有高效的性能和较小的存储空间占用,被广泛应用于关联规则挖掘和数据压缩等领域。

fpgrowth函数

fpgrowth函数

fpgrowth函数fpgrowth函数是一种用于频繁模式挖掘的算法,它是一种高效的数据挖掘方法,用于发现数据集中的频繁模式或关联规则。

在本文中,我们将详细介绍fpgrowth函数的原理、应用场景以及使用方法。

一、原理fpgrowth函数是基于FP树(Frequent Pattern Tree)的一种频繁模式挖掘算法。

它通过构建一个特殊的数据结构FP树来存储数据集,然后利用FP树来快速发现频繁项集。

FP树是一种紧凑的数据结构,它通过节点链接的方式表示数据集中的频繁项集,可以避免昂贵的模式枚举过程。

具体来说,fpgrowth函数的工作流程如下:1. 构建FP树:遍历数据集,统计每个项的频次,并根据频次排序生成频繁项集。

然后根据频繁项集构建FP树,将数据集映射到FP 树上。

2. 挖掘频繁项集:从FP树的根节点开始,递归地遍历每个节点,找到以当前节点为末尾的路径(即频繁项集),将其加入结果列表中。

3. 生成关联规则:根据频繁项集,使用置信度等指标来生成关联规则,可以通过设置最小支持度和置信度的阈值来控制规则的生成。

二、应用场景fpgrowth函数在很多领域都有广泛的应用,特别适用于:1. 市场篮子分析:可以挖掘顾客购买商品的频繁组合,从而进行交叉销售和推荐。

2. 网络流量分析:可以挖掘网络流量中的异常行为和攻击模式,用于网络安全监测和预警。

3. 社交网络分析:可以挖掘用户之间的关系和行为模式,用于社交网络推荐和社区发现。

4. 生物信息学:可以挖掘基因序列中的频繁模式,用于寻找基因间的关联和功能预测。

三、使用方法fpgrowth函数通常通过调用相应的库或软件包来实现,例如Python 中的mlxtend库、R语言中的arules包等。

以Python为例,使用mlxtend库的fpgrowth函数可以按照以下步骤进行:1. 导入库:首先导入mlxtend库。

2. 准备数据集:将数据集整理成列表或数组的形式。

fpgrowth算法sql代码

fpgrowth算法sql代码

fpgrowth算法是一种常用的频繁模式挖掘算法,它能够快速有效地发现数据集中的频繁模式和关联规则。

而在实际应用中,我们常常需要将该算法应用到SQL数据库中,以便更好地对数据进行分析和挖掘。

本文将介绍fpgrowth算法的原理和SQL代码实现,以帮助读者更好地理解和应用该算法。

一、fpgrowth算法原理fpgrowth算法是一种基于频繁模式树(FP-tree)结构的频繁模式挖掘算法。

它通过两次遍历数据集,首先构建FP树,然后通过递归方式挖掘FP树中的频繁模式。

具体步骤如下:1. 构建FP树(1) 遍历数据集,统计每个项的频数,然后根据频数降序排序得到频繁1项集;(2) 再次遍历数据集,根据频繁1项集和频数构建FP树,每个项在FP树上对应一条路径。

2. 挖掘频繁模式(1) 从FP树的底部开始,递归向上回溯每个项的前缀路径,得到条件模式基;(2) 对于每个条件模式基,构建条件FP树,然后递归挖掘得到频繁模式。

二、fpgrowth算法SQL代码实现在SQL数据库中,我们可以通过使用递归查询和临时表来实现fpgrowth算法。

下面是一个简单的示例,假设我们有一个名为transaction_table的交易表,表中包含了交易ID和对应的商品项集。

```sql-- 创建临时表存储频繁1项集CREATE TEMPORARY TABLE frequent_item1 ASSELECT item, COUNT(*) AS countFROM transaction_tableGROUP BY itemHAVING count >= min_support;-- 构建FP树WITH RECURSIVE fp_tree(item, count, parent) AS (SELECT item, SUM(count) AS count, NULL AS parentFROM frequent_item1GROUP BY itemUNION ALLSELECT t.item, SUM(t.count), f.idFROM transaction_table tJOIN fp_tree f ON t.item = f.itemGROUP BY t.item, f.idSELECT * FROM fp_tree;```上述SQL代码中,我们首先创建一个临时表frequent_item1来存储频繁1项集,然后使用递归查询构建FP树。

关联规则中FP-tree的最大频繁模式非检验挖掘算法

关联规则中FP-tree的最大频繁模式非检验挖掘算法
Ab t a t h loi msb s d o P te ,f r n n xma r q e tp t r s a eh g e fr n e b t i n sr c :T e ag r h a e n F —re o ig ma i lf u n at n ,h v ih p r ma c u t ma y t mi e e o w h d a b c s o x mpe h y mu t e u sv l e e ae c n i o a F — e s a e t o t e p o e so u e s t h c i g n r w a k .F re a l ,te s c rie yg n r t o d t n l P t e ,h v d h r c s f p re e k n .I r i r o s c o d rt v ro e e d a b c so e e i ig ag rtms n ag r h No — h c n n loi m o x mu F e u n r e o ec me t s r w a k ft xs n lo h ,a lo i m n C e k Mii g ag r h fMa i m r q e t o h h t i t t
第3 0卷 第 7期
21 0 0年 7月
计 算机 应 用
J u n lo o ue p ia in o r a fC mp trAp l t s c o
V0 . 0 . 13 No 7
J l 0 0 uy2 1
文章 编 号 :0 1 9 8 (00 0 10 — 0 12 1 )7—12 0 92— 4
下 , C P的 效 率是 同 类 算法 的 2~ N MF 5倍 。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于单向F_tree的最大频繁项集挖掘算法研究
【摘要】频繁项集挖掘算法是数据挖掘的主要研究方向。

目前主流的频繁项集挖掘算法有:产生候选频繁项集和不产生候选频繁项集两种,分别是Apriori 算法、FP_growth算法。

这两种算法各有优缺点。

本文在分析现有算法的基础上,充分利用FP_tree信息压缩的优点,设计出一种产生候选项集的最大频繁项集挖掘算法。

该算法首先构造一棵单向FP_tree,再利用最大频繁项集特性对候选项集进行剪枝,不需要扫描数据库计算候选项集的支持数。

仿真实验表明,与现有算法相比,该算法的时、空效率都有巨大提高。

【关键词】数据挖掘;单向FP_tree;最大频繁项集
1.引言
目前,频繁项集挖掘是数据挖掘中主要研究和应用的方向[1-2]。

现有频繁项集挖掘算法主要分两类:产生候选频繁项集、不产生候选频繁项集。

分别是Apriori 算法和FP_growth算法。

Apriori[3-5]算法要产生大量候选频繁项集,候选频繁项集计算支持度时需要扫描事务数据库,效率极差。

目前,主要从减少数据库规模、减少扫描次数、减少候选项集的数量等角度,做研究。

但是Apriori算法的本质——产生候选频繁项集、查询数据库计算支持度,不改变,算法性能也不可能有质的飞跃。

2000年,由Han等人提出了基于频繁项集树(FP_tree)的频繁模式增长(FP_growth)[7-9]算法。

它只需两次扫描事物数据库构建FP_tree,不产生候选频繁项集。

但是,它在进行频繁项集挖掘时,要递归产生大量的条件子树。

时、空效率也非常低下。

另有研究者提出了挖掘最大频繁项集的思想[3]。

由于最大频繁项目集隐含了所有频繁项目集,所以可以把发现频繁项目集的问题转化为发现最大频繁项目集的问题。

本文提出一种基于单向FP_tree的最大频繁项集挖掘算法。

它先是对现有FP_tree的结构和构造方法进行优化,采用“属性编码”规则,设计的单向FP_tree,且不会增加树的空间复杂度。

在进行最大频繁项集挖掘时,采用分治的思想,按FP_tree产生的项头表(frequent item header table),逐个链表进行处理。

在每个链表的处理过程中,采用剪枝策略极大减少候选频繁项集的数量,并且不扫描数据库计算候选频繁项集的支持度。

2.FP_tree改进
传统FP_tree是双向的,有指向父结点的指针。

在FP_growth算法进行频繁项集挖掘时,需要向上搜索构造“条件模式基”。

改进后的FP_tree,采用编码实现,在不增加任何资源要求的前提下,将所有信息都存放在当前结点中,不需要向上搜索来获取其前缀,实现单向FP_tree。

单向FP_tree不止能节约内存资源(无需指向父结点的指针),也能提高树的处理效率。

首先,它无需向上搜索获取前缀信息;其次,将属性“编码”后,所有对属性的操作都变成“位”操作,相比于“字符比对”或“整数运算”,操作速度大大提升。

2.1 改进FP_tree数据结构
改进后的FP_tree的数据结构定义如下:
(1)一个标记为“NULL”的根节点,有一个项头表(header table),由频繁项(frequent item)组成。

(2)频繁项头表(frequent item header table):每个表项(entry)由三个域(item-name,sequence-code,node-link)组成,见表1。

树结点有五个域:item,sup,progeny指针域,brother指针域,pc指针域。

item记录项集编码;sup记录项集支持度。

Pc指针域指向下一个具有同样的item-name域的结点,要是没有这样一个结点,就为null。

2.2 Sequence-code编码
每个项的编码中只有一位为1,其余都为0;项的sup值越大,其编码越小。

即,sup值最大的项,最低位为1,以此类推。

如:数据库D。

D={“ABE”,”BD”,”BC”,”ABD”,”AC”,”BC”,”AC”,”ABCE”,”AB C”,”ABCDE”,”BADE”,”BADE”,”CDE”,”CDE”}
遍历D,统计所有项的种类及其支持度值,分别为{B:10,A:9,C:9,D:7,E:7}。

根据sequence-code的编码规则进行编码,结果为{B:00001,A:00010,C:00100,D:01000,E:10000}。

生产的项头表如表2。

使用该编码规则的原因:
(1)占用资源少
在构造单向FP_tree时,树结点的item需包含路径上的所有项,假设事物数据库D有8种项,构造的FP_tree有10000个结点。

与用char类型、int类型表示的情况,见表3。

(2)比对速度快
采用sequence-code对项集进行编码,能够提高FP_tree的对比速度,如表4所示。

2.3 改进FP_tree构造过程及实例
FP_tree的构造过程如下:
(1)扫描数据库一次,得到各项的sup。

按sup递减排序,根据sequence-code 规则进行编码。

建立频繁项头表。

(2)创建FP_tree的根结点,以“null”标记。

从数据库中取出一个事务。

进行sequence-code转换。

编码从低位向高位取值,如果该位为1,则截取该位及其后缀,前面补0,构成的项集赋值给item。

如果item值不等于当前结点或其所有兄弟结点的item值,则构造新结点,按从小到大的顺序加入链表中。

如果有item等于该值,则将此结点的sup值加1。

(3)将指针移到第二步处理完的结点的孩子指针所指向的结点。

进行第二步的操作,直到该事务的所有为1的位都被处理完。

相关文档
最新文档