Merge pull request #172 from wangyangting/master

更新: fp-growth 算法文档
This commit is contained in:
那伊抹微笑
2017-09-24 22:43:12 +08:00
committed by GitHub
8 changed files with 18 additions and 16 deletions

View File

@@ -1,14 +1,16 @@
# 第12章 使用FP-growth算法来高效发现频繁项集
![](../images/12.Fd-growth/apachecn_fd_growth_homepage.png)
![](../images/12.FP-growth/apachecn_fp_growth_homepage.png)
### 第11章 我们已经介绍了用Apriori算法发现频繁项集与关联规则本章将继续关注发现频繁项集这一任务并使用FP-growth算法更有效的挖掘频繁项集。
## 前言
在 [第11章]() 时我们已经介绍了用 `Apriori` 算法发现 `频繁项集``关联规则`
本章将继续关注发现 `频繁项集` 这一任务,并使用 `FP-growth` 算法更有效的挖掘 `频繁项集`
## FP-growth 算法简介
* 一种非常好的发现频繁项集算法。
* 基于Apriori算法构建,但是数据结构不同,使用叫做 FP树 的数据结构结构来存储集合。下面我们会介绍这种数据结构。
* 基于Apriori算法构建,但是数据结构不同,使用叫做 `FP树` 的数据结构结构来存储集合。下面我们会介绍这种数据结构。
## FP-growth 算法步骤
- 基于数据构建FP树
@@ -35,16 +37,16 @@ class treeNode:
1. 遍历所有的数据集合计算所有项的支持度
2. 丢弃非频繁的项
3. 基于 支持度 降序排序所有的项
![](../images/12.Fd-growth/步骤1-3.png)
![](../images/12.FP-growth/步骤1-3.png)
4. 所有数据集合按照得到的顺序重新整理
5. 重新整理完成后丢弃每个集合末尾非频繁的项
![](../images/12.Fd-growth/步骤4-5.png)
![](../images/12.FP-growth/步骤4-5.png)
步骤2:
6. 读取每个集合插入FP树中同时用一个头部链表数据结构维护不同集合的相同项
![](../images/12.Fd-growth/步骤6-1.png)
最终得到下面这样一棵FD
![](../images/12.Fd-growth/步骤6-2.png)
![](../images/12.FP-growth/步骤6-1.png)
最终得到下面这样一棵FP
![](../images/12.FP-growth/步骤6-2.png)
从FP树中挖掘出频繁项集
@@ -52,17 +54,17 @@ class treeNode:
步骤3:
1. 对头部链表进行降序排序
2. 对头部链表节点从小到大遍历得到条件模式基同时获得一个频繁项集
![](../images/12.Fd-growth/步骤6-2.png)
![](../images/12.FP-growth/步骤6-2.png)
如上图从头部链表 t 节点开始遍历t 节点加入到频繁项集找到以 t 节点为结尾的路径如下:
![](../images/12.Fd-growth/步骤7-1.png)
去掉FD树中的t节点得到条件模式基<左边路径,左边是值>[z,x,y,s,t]:2[z,x,y,r,t]:1 条件模式基的值取决于末尾节点 t 因为 t 的出现次数最小一个频繁项集的支持度由支持度最小的项决定所以 t 节点的条件模式基的值可以理解为对于以 t 节点为末尾的前缀路径出现次数
![](../images/12.FP-growth/步骤7-1.png)
去掉FP树中的t节点得到条件模式基<左边路径,左边是值>[z,x,y,s,t]:2[z,x,y,r,t]:1 条件模式基的值取决于末尾节点 t 因为 t 的出现次数最小一个频繁项集的支持度由支持度最小的项决定所以 t 节点的条件模式基的值可以理解为对于以 t 节点为末尾的前缀路径出现次数
3. 条件模式基继续构造条件 FD 得到频繁项集和之前的频繁项组合起来这是一个递归遍历头部链表生成FD树的过程递归截止条件是生成的FD树的头部链表为空
根据步骤 2 得到的条件模式基 [z,x,y,s,t]:2[z,x,y,r,t]:1 作为数据集继续构造出一棵FD计算支持度去除非频繁项集合按照支持度降序排序重复上面构造FD树的步骤最后得到下面 t-条件FD :
![](../images/12.Fd-growth/步骤7-2.png)
然后根据 t-条件FD 的头部链表进行遍历 y 开始得到频繁项集 ty 然后又得到 y 的条件模式基构造出 ty的条件FD ty-条件FD继续遍历ty-条件FD树的头部链表得到频繁项集 tyx然后又得到频繁项集 tyxz. 然后得到构造tyxz-条件FD树的头部链表是空的终止遍历我们得到的频繁项集有 t->ty->tyz->tyzx这只是一小部分
3. 条件模式基继续构造条件 FP 得到频繁项集和之前的频繁项组合起来这是一个递归遍历头部链表生成FP树的过程递归截止条件是生成的FP树的头部链表为空
根据步骤 2 得到的条件模式基 [z,x,y,s,t]:2[z,x,y,r,t]:1 作为数据集继续构造出一棵FP计算支持度去除非频繁项集合按照支持度降序排序重复上面构造FP树的步骤最后得到下面 t-条件FP :
![](../images/12.FP-growth/步骤7-2.png)
然后根据 t-条件FP 的头部链表进行遍历 y 开始得到频繁项集 ty 然后又得到 y 的条件模式基构造出 ty的条件FP ty-条件FP继续遍历ty-条件FP树的头部链表得到频繁项集 tyx然后又得到频繁项集 tyxz. 然后得到构造tyxz-条件FP树的头部链表是空的终止遍历我们得到的频繁项集有 t->ty->tyz->tyzx这只是一小部分
* 条件模式基:头部链表中的某一点的前缀路径组合就是条件模式基条件模式基的值取决于末尾节点的值
* 条件FD:以条件模式基为数据集构造的FD树叫做条件FD
* 条件FP:以条件模式基为数据集构造的FP树叫做条件FP
FP-growth 算法优缺点:

View File

Before

Width:  |  Height:  |  Size: 1.4 MiB

After

Width:  |  Height:  |  Size: 1.4 MiB

View File

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 70 KiB

View File

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 41 KiB

View File

Before

Width:  |  Height:  |  Size: 133 KiB

After

Width:  |  Height:  |  Size: 133 KiB

View File

Before

Width:  |  Height:  |  Size: 115 KiB

After

Width:  |  Height:  |  Size: 115 KiB

View File

Before

Width:  |  Height:  |  Size: 69 KiB

After

Width:  |  Height:  |  Size: 69 KiB

View File

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 40 KiB