Python基础原理:FP-growth算法的构建
和Apriori算法相比,FP-growth算法只需要对数据库进行两次遍历,从而高效发现频繁项集。对于搜索引擎公司而言,他们需要通过查看互联网上的用词,来找出经常在一块出现的词。因此就需要能够高效的发现频繁项集的方法,FP-growth算法就可以完成此重任。
FP-growth算法是基于Apriori原理的,通过将数据集存储在FP(Frequent Pattern)树上发现频繁项集。
FP-growth算法只需要对数据库进行两次扫描,而Apriori算法在求每个潜在的频繁项集时都需要扫描一次数据集,所以说FP-growth算法是高效的。
FP算法发现频繁项集的过程是:
(1)构建FP树;
(2)从FP树中挖掘频繁项集
FP表示的是频繁模式,其通过链接来连接相似元素,被连起来的元素可看成是一个链表
将事务数据表中的各个事务对应的数据项,按照支持度排序后,把每个事务中的数据项按降序依次插入到一棵以 NULL为根节点的树中,同时在每个结点处记录该结点出现的支持度。
假设存在的一个事务数据样例为,构建FP树的步骤如下:
结合Apriori算法中最小支持度的阈值,在此将最小支持度定义为3,结合上表中的数据,那些不满足最小支持度要求的将不会出现在最后的FP树中。
据此构建FP树,并采用一个头指针表来指向给定类型的第一个实例,快速访问FP树中的所有元素,构建的带头指针的FP树如图:
结合绘制的带头指针表的FP树,对表中数据进行过滤,排序如下:
在对数据项过滤排序了之后,就可以构建FP树了,从NULL开始,向其中不断添加过滤排序后的频繁项集。过程可表示为:
这样,FP树对应的数据结构就建好了,现在就可以构建FP树了,FP树的构建函数参见Python源代码。
在运行上例之前还需要一个真正的数据集,结合之前的数据自定义数据集。这样就构建了FP树,接下来就是使用它来进行频繁项集的挖掘。
- 实用的位运算应用(r4笔记第97天)
- 关于date格式的两个案例(r4笔记第96天)
- 【新技术分享】C++17 最新进展
- Ant + Jenkies +Tomcat 自动构建部署Web项目
- 博客项目Tale思维导图,让项目不再难懂
- 关于权限管理的实用脚本(r4笔记第94天)
- Ant学习笔记
- 清理session的小插曲(r4笔记第95天)
- CVE-2017-16943 Exim UAF漏洞分析
- Java泛型学习
- Jenkins修改管理员密码.
- awk中的变量(r4笔记第93天)
- Spring思维导图,让Spring不再难懂(ioc篇)
- 基于dba_hist_sqlstat查看sql语句的性能历史(r4笔记第92天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Mysql快速导入数百万条数据,亲测有效
- [面试题06]从未到头打印链表(LeetCode-剑指Offer)
- SpringBoot集成RabbitMQ-三种模式的实现
- Centos7-Docker卸载旧的更新到新版本
- vue vuecli3 前端解决跨域问题
- 求求你,不要再纠结指针了(1) ——万能转化公式
- 求求你,不要再纠结指针了(2)——函数指针
- 用Python解决100个问题 | 倒计时
- 【转载】【ionic+angularjs】angularjs ui-router路由简介
- 实时性迷思(1) —— “快是优点么?”
- Java中Thread的join方法为什么能让线程插队?
- 再见 ELK,是时候拥抱下一代日志系统 Loki 了
- 利用VBAProject来共用VBA代码
- 线上频出MySQL死锁问题!分享一下自己教科书般的排查和分析过程!
- 换人!这些算法都不会还学什么操作系统