第六章FP-Growth

2024-01-04 14:58
文章标签 第六章 growth fp

本文主要是介绍第六章FP-Growth,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

     海量数据下,Apriori算法的时空复杂度都不容忽视。

        1)空间复杂度:如果L1数量达到104的量级,那么C2中的候选项将达到107的量级。

        2)时间复杂度:每计算一次Ck就需要扫描一遍数据库。

        此时,人们希望设计一种方法,“挖掘全部频繁项集而无须这种代价昂贵的候选产生过程”。一种试图这样做的有趣的方法称为频繁模式增长(FP-Growth)。它采取如下分治策略:首先,将代表频繁项集的数据库压缩到一颗频繁模式树(FP树),该树仍保留项集的关联信息。然后,把这种压缩后的数据库划分成一组条件数据库,每个数据库关联一个频繁项或“模式段”,并分别挖掘每个条件数据库。

1 FP-Growth算法的基本介绍

        FP-Growth算法:在不生成候选项的情况下,完成Apriori算法的功能。只需要对数据库进行两次扫描,它发现频繁项集的基本过程如下:

        1)构建FP树

        2)从FP树中挖掘频繁项集

        FP-Growth算法的基本数据结构,包含一棵FP和一个项头表

构建FP

2.1  项头表的构建


        以上图这个事务数据库为例。

        数据库的第一次扫描与Apriori算法相同,它导出频繁1-项集的集合,并得到它们的支持度计数(频度)。设最小支持度计数为2。频繁项的集合按支持度计数的递减序排序。结果集或表记为L。这样,有L={{I2:7},{I1:6},{I3:6},{I4:2},{I5:2}}。


2.2  FP树的构建

        首先,创建树的根节点,用“NULL”标记。第二次扫描数据库D。每个事务中的项都按L中的次序处理(即按递减支持度计数排序),并对每个事务创建一个分枝。例如,第一个事务“T100:I1,I2,I5”包含三个项(按L中的次序I2、I1、I5),导致构造树的包含三个结点的第一个分枝<I2:1>、<I1:1>、<I5:1>,其中I2作为根的子女链接到根,I1链接到I2,I5链接到I1。一般地,当为一个事务考虑增加分枝时,沿共同前缀上的每个结点的计数增加1,为前缀之后的项创建结点和链接。

        扫描所有的事务后得到的树显示在下图:


从FP树中挖掘频繁项集

3.1  抽取条件模式基

        条件模式基:以所查找元素项为结尾的路径集合。简而言之,一条前缀路径就是介于所查找元素与树根结点之间的所有内容。

        例如,I3在FP树中一共出现了3次,其祖先路径分别是{I2,I1:2},{I2:2}和{I1:2}。这3个祖先路径的集合就是频繁项I3的条件模式基。

3.2  创建条件FP

        条件树:将条件模式基按照FP树的构造原则形成一个新的FP树。比如上图中I3的条件树就是:


3.3  产生频繁项集

        首先考虑I5,它是L中的最后一项,而不是第一项。从表的后端开始的原因随着解释FP树挖掘过程就会清楚。I5的条件模式基是{{I2, I1:1}, {I2 ,I1,I3:1}},I5构造得到的条件FP-树如下。


        这个条件FP-树是单路径的,直接列举{I2:2,I1:2,I3:1}的所有组合,之后和模式后缀I5取并集得到支持度大于2的所有频繁模式:{I2,I5:2},{I1,I5:2},{I2,I1,I5:2}。

        对于I4,方法类似。

        对于I3,条件模式基是{{I2,I1:2}, {I2:2}, {I1:2}}。它的条件FP树是:


        FP树有两个分枝<I2:4,I1:2>和<I1:2>。首先把模式后缀I3和条件FP-树中的项头表中的每一项取并集,得到一组模式{I2,I3:4, I1,I3:4},但是这一组模式不是后缀为I3的模式。还需要递归调用FP-Growth,模式后缀为{I1,I3},{I1,I3}的条件模式基为{I2:2},其生成的条件FP-树如右下图所示:


这是一个单路径的条件FP树,在FP_Growth中把I2和模式后缀{I1,I3}取并得到模式{I2,I1,I3:2}。理论上还应该计算一下模式后缀为{I2,I3}的模式集,但是{I2,I3}的条件模式基为空,递归调用结束。最终模式后缀I3的支持度大于2的所有模式为:{I2,I3:4},{I1,I3:4},{I2,I1,I3:2}。

        对于I1,方法类似。

4 FP-Growth的伪代码


5 FP-Growth的优劣势

        FP-Growth方法将发现长频繁模式的问题转换成在较小的条件数据库中递归地搜索一些较短模式,然后连接后缀。它使用最不频繁的项作后缀,提供了较好的选择性。该方法显著地降低了搜索开销。

        当数据库很大时,构造基于主存的FP树有时是不现实的。

        对FP-Growth方法的性能研究表明,对于挖掘长的频繁模式和短的频繁模式,它都是有效的和可伸缩的,并且大约比Apriori算法快一个数量级。

 


       了解更多请参见PPT

这篇关于第六章FP-Growth的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/569687

相关文章

第六章习题11.输出以下图形

🌏个人博客:尹蓝锐的博客 希望文章能够给到初学的你一些启发~ 如果觉得文章对你有帮助的话,点赞 + 关注+ 收藏支持一下笔者吧~ 1、题目要求: 输出以下图形

Go语言设计与实现 学习笔记 第六章 并发编程(3)

系统调用 系统调用对于Go语言调度器的调度也有比较大的影响,为了处理这些特殊的系统调用,我们甚至专门在Goroutine中加入了_Gsyscall这一状态,Go语言通过Syscall和Rawsyscall等使用汇编语言编写的方法封装了操作系统提供的所有系统调用,其中Syscall在Linux 386上的实现如下: // 定义名为.Syscall的函数,该函数不允许栈分割,栈帧大小为0,有28字

计算机三级网络技术总结 第六章交换机及其配置

采用直通交换模式的交换机开始转发数据帧时已经接收到的帧长度时14字节建立VALN的命令格式: vlan <vlan_ID> name <vlan_name> 为端口分配VLAN的命令格式为: switchport access vlan <vlan_num>  不给定名字的VLAN,系统自动按缺省的VLAN名(VLAN00xxx)配置交换机Catalyst 6500管理IP地址命令格式: (ena

第六章 详细设计简记

第六章  详细设计       详细设计不是具体的编程,而是要设计出程序的“蓝图”,详细设计不仅仅是逻辑上正确的实现每个模块的功能,更重要的是设计出来的处理工程应该简明易懂。       详细设计的目的:为软件结构图中的每一个模块确定使用的算法和块内的数据结构,并用某种选定的表达工具给出清晰的描述。       详细设计的任务:           1.为每

Java学习Day37:HTML 第六章:黄金国(项目思路梳理)

第一天:后端思路梳理及代码实现 1.数据库设计 数据库设计使用一张表(course)设计 CREATE TABLE course(id INT PRIMARY KEY AUTO_INCREMENT COMMENT '课程ID',cname VARCHAR(255) NOT NULL COMMENT '课程名称',price DOUBLE NOT NULL COMMENT '售卖价格

《西瓜书》第六章 公式6.6 凸二次规划问题

1. 凸优化问题 对于一般的非线性规划,若目标函数是凸函数,约束集合 D D D 是凸集,则称该非线性规划是凸规划。 若上述约束规划中只含有不等式约束,又 c i ( x ) ( i ∈ I ) c_i(x)(i∈I) ci​(x)(i∈I)是凸函数,则约束集 D D D 是凸集。 对于混合约束问题,若 c i ( x ) ( i ∈ E ) c_i(x)(i∈E) ci​(x)(i∈E

《西瓜书》第六章 SVM支持向量机 笔记

文章目录 6.1 间隔与支持向量6.1.1 超平面6.1.2 支持向量6.1.3 间隔6.1.4 最大间隔 6.2 对偶问题6.2.1 凸二次规划6.2.2 对偶问题6.2.3 支持向量机的一个重要性质 6.3 核函数6.3.1 支持向量展开式6.3.2 核函数定理6.3.3 常用的核函数6.3.4 核函数特点 6.4 软间隔与正则化6.4.1 硬间隔6.4.2 软间隔6.4.3 替代损失6

Python计算机视觉编程——第六章 图像聚类

目录 1 K-means聚类1.1 Scipy聚类包1.2 图像聚类1.3 在主成分上可视化图像1.4 像素聚类 2 层次聚类3 谱聚类 聚类可以用于识别,划分图像数据集,组织与导航。 1 K-means聚类 K-means是一种将输入数据划分为k个簇的简单的聚类算法。步骤如下: (1) 以随机或猜测的方式初始化类中心 u i , i = 1 ⋯ k ; u_i,i=1\cd

PHP开发圣经-第六章

<pre name="code" class="php"><?php/*** Created by PhpStorm.* User: v_szylchen* Date: 2015/9/21* Time: 11:19* 第六章 面向对象的PHP*/?><?php/*** public 表示全局,类内部外部子类都可以访问;* private表示私有的,只有本类内部可以使用;* protected

25版王道数据结构课后习题详细分析 第六章 图 6.4图的应用

一、单项选择题 ———————————————————— ———————————————————— 解析: 正确答案: ———————————————————— ———————————————————— 解析: 正确答案: ———————————————————— ———————————————————— 解析: 正确答案: ——————————