数据挖掘算法-FP-Growth

简介

FP-Growth 算法和 Apriori 算法都被用作关联规则挖掘。 可以说FP-Growth就是Apriori的升级版,Fp-Growth可以节省运算时间,减少遍历次数,但同时也会增加内存使用空间。
FP-Growth算法只进行 2 次数据库扫描。相比于 Apriori 算法,没有候选集,而是直接生成一颗频繁项树,通过这棵树生成关联规则。
使用基本步骤为:

  1. 构建FP-Tree树
  2. 从树中挖掘信息

原理

构建FP-Tree

数据结构

在构建FP-Free时,需要一张相头表和一颗fp树
在这里插入图片描述
其中的节点链,可以为后期的信息挖掘提供遍历

几个要点
  • 项头表是降序排序的
  • 树中每个节点的祖先频繁度都大于该该节点
构建步骤

原始数据

TID items
1 a,b,c,g,h,j,d
2 a,c,d,e,g
3 b,c,a,d,g,h,j,k
4 c,d,a,b
5 t,g,h,j,a
6 a,k,l,p,t,o

step1:
遍历原始数据计算项为1的频繁集出现次数,去除小于最小支持度的item,并且排序
下表以去除小于3的item

item times
a 6
c 5
g 4
b 3
d 3
h 3
j 3

step2:
根据得到的频度排序表,针对原始数据进行排序,并且去除不满足最小支持的的item

TID items
1 a,c,g,b,d,h,j
2 a,c,g,d
3 a,c,g,b,d,h,j
4 a,c,b,d
5 a,g,h,j
6 a

step3:
根据setp2中得到的表构建fp-tree树
在这里插入图片描述

挖掘信息

建立好FP-Tree后就需要从中挖掘频繁项集,挖掘时需要从项头表底部项依次向上挖掘,对项头表中的每一项都需要得到模式基(模式基是以我们要挖掘的节点作为叶子节点所对应的FP子树)。得到这个FP子树,我们将子树中每个节点的的计数设置为叶子节点的计数,并删除计数低于支持度的节点。从这个条件模式基,我们就可以递归挖掘得到频繁项集了。

条件模式基

这里提一下条件模式基是个什么玩意儿,看了很多博客写的都不太一样,有点差异。
条件模式基(conditional pattern base)

首先从FP树头指针表中的单个频繁元素项开始。对于每一个元素项,获得其对应的条件模式基(conditional pattern base),单个元素项的条件模式基也就是元素项的关键字。条件模式基是以所查找元素项为结尾的路径集合。每一条路径其实都是一条前辍路径(perfix path)。简而言之,一条前缀路径是介于所査找元素项与树根节点之间的所有内容。

下图是以{s:2}或{r:1}为元素项的前缀路径:

挖掘信息时,一般是通过项头表从下往上挖掘,即step1中的表

item times
a 6
c 5
g 4
b 3
d 3
h 3
j 3

从j开始挖掘信息一直到a

算法实现

节点数据结构
class Node:
    def __init__(self, x):
        self.x = x
        self.count = 1
        self.father = None
        self.children = {
   }
构建FP-tree
class 
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值