数据挖掘——关联规则算法之FP-tree

数据挖掘——关联规则算法之FP-tree

前言

Apriori算法需要生成大量的候选集而且需要进行多次的扫描,对于那些大数据量的数据集很耗费时间。基于此问题,FP-tree算法不用生成候选集,只进行两次数据库扫描。简单来说是尽可能少得读取数据,尽可能的对读取到的数据进行压缩,属于空间换时间的算法。

FP-tree算法

FP-tree没有候选集,直接压缩数据库成一个频繁模式,通过这棵树生成关联规则。

FP-tree的具体步骤:

步骤一、构造FP-tree:
	(1)扫描数据库一次,得到频繁项集1项集;
	(2)把项按支持度递减排序;
	(3)再一次扫描数据库,建立FP-tree。
步骤二、频繁模式的挖掘:
	根据事务数据库D和最小支持度min_sup,调用建树过程建立FP-tree;
	if(FP-tree为简单路径):
		将路径上支持度计数大于等于min_sup的节点任意组合,得到所需的频繁模式;
	else:
		初始化最大频繁模式集合为空;
		
	按照支持频率升序,以每个1频繁项为后缀,调用挖掘算法挖掘最大频繁模式集;
	根据最大频繁模式集合中最大频繁式,输出全部的频繁模式。

上面的过程看的云里雾里,下面来个例子来学习FP-tree:

举例

事务数据库如下:

TidItems
1a,b,e
2b,d
3b,c
4a,b,d
5a,c
6b,c
7a,b
8a,b,c,e
9a,b,c

那么按照上面说的步骤来处理上表的数据库:
步骤一:
1、扫描事务数据库得到频繁项集1项集F(每个项出现的次数):

abcde
67622

2、定义min_sup = 20%,即最小支持度为2,此时每一项最少出现 9 ∗ 0.2 ≈ 2 9 * 0.2 \approx 2 90.22次;
3、重新排列1项集F,把项按照支持度递减排序:

bacde
76622

4、重新调整事务数据库,使每一个事务中的项按照频次递减的顺序排列:

TidItems
1b,a,e
2b,d
3b,c
4b,a,d
5a,c
6b,c
7a,b
8b,a,c,e
9b,a,c

这块需要注意,FP-tree算法不是先把上面的这个整张表排序好再去生成树,而是每排序好一个事务就构建一个树。下面说明怎样建立树。
5、创建根节点和频繁项目表
(1)创建根节点:
在这里插入图片描述
(2)加入第一个事务(b,a,e)
在这里插入图片描述
(3)加入第二个事务(b,d)
在这里插入图片描述(4)加入第三个事务(b,c):
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191124191735137.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjIxMT
(5)加入第四个事务(b,a,d)
在这里插入图片描述
(6)按照上面的算法,直到加入第九个事务(b,a,c):
在这里插入图片描述
步骤二:
(1)此时按照支持度从小到大的顺序来挖掘。首先考虑e,得到条件模式基(简单理解就是以e为节点的所有路径分支), 同时把其经过的节点的个数设置为1(为什么设置为1?因为对于节点e来说,b和a对e只贡献一次作用,其他类似)

<b,a:1>、<b,a,c:1>

(2)利用上面得到的条件模式基,在此构建条件FP-tree:
在这里插入图片描述
(3)敲黑板了!!!这块不好理解!!!前面已经声明了最小支持度是2,然后上面由e得到的tree中c的支持度1是小于2的 ,所以和e结合起来也达不到支持度2,所以去掉:
在这里插入图片描述
那么剩下的b和a是满足要求的,他们与e结合起来可以有如下(两两组合)的三个频繁项集:

{b,e:2},{a,e:2},{b,a,e:2}

(4)按照递增的顺序,接下来该处理d了,其条件模式基:
<b,a:1>,<b:1>
那么构造d的FP-tree:
在这里插入图片描述
同样,a的支持度小于2,剔除,那么其tree如下:
在这里插入图片描述
得到d的频繁项集:

{b,d:2}

(5)考虑c,得到其条件模式基:
<b,a:2>,<b:2>,<a:2>

同样构造FP-tree:
在这里插入图片描述

注意:此树与上面的树都不同,此树不是单一路径的,因此需要递归挖掘c。
1)从a开始,考虑a,a的条件模式基<b:2>,构造a的条件FP-tree:
在这里插入图片描述
一定要转过来这个弯哈,因为这是递归的,该步得到的结构应该计入到5)里面,所以得c的频繁项集{b,c:4},{a,c:4},{b,a,c:2}

(6)考虑a(这不是上面递归里面的a) ,其条件模式基<b:4>
在这里插入图片描述
得a的频繁项集{b,a:4}。

FP-tree的优缺点

FP-tree结构的好处:
(1)完备:不会打破交易中的任何模式;包含了频繁模式挖掘所需的全部信息
(2)紧密:去除不相关信息(不包含非频繁项集);支持度降序排列,支持高的项在FP-tree中共享的机会也高;绝不会比原数据库大(如果不计算树节点的额外开销)。

优点:

  • FP-tree算法只需对事物数据库进行两次扫描;
  • 避免产生大量候选集

缺点:

  • 要递归生成条件数据库和条件FP-tree,所需内存开销大;
  • 只能用于挖掘单维的布尔关联规则
  • 6
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值