当前位置: 首页 > news >正文

【Python机器学习】FP-growth算法——FP树:用于编码数据集的有效方式

相比于Apriori算法,FP-growth算法是一种更快的频繁项集发现算法。它基于Apriori构建,但在完成相同任务时采用了一些不同的技术。这里的任务是将数据集存储在一个特定的称作FP树的结果之后发现频繁项集或者频繁项对,即常在一块出现的元素项的集合FP树。这种做法使得算法的执行速度要快于Apriori,通常性能要好两个数量级以上。

从数据集中获取信息最常用的两种方法分别是频繁项集与关联规则。FP-growth算法能够更有效地发现频繁项集,但不能用于发现关联规则。

FP-growth算法只需要对数据库进行两次扫描,而Apriori算法对于每个潜在的频繁项集都会扫描数据集判定给定模式是否频繁,因此FP-growth算法的速度要比Apriori算法快。在小规模数据集上,这不是什么问题,但当处理更大数据集时,就会产生较大问题。FP-growth只会扫描数据集两次,它发现频繁项集的基本过程如下:

1、构建FP树;

2、从FP树中挖掘频繁项集。

FP-growth算法的优缺点:

优点:一般要快于Apriori

缺点:实现比较困难,在某些数据集上性能会下降

使用数据类型:标称型数据。

FP-growth算法将数据存储在一种称为FP树的紧凑数据结构中,FP代表频繁模式。一棵FP树看上去与计算机科学的其他树结构类似,但是它通过链接来连接相似元素,被连起来的元素项可以看成一个链表,比如:

同搜索树不同的是,一个元素项可以在一颗FP树中出现多次。FP树会存储项集的出现频率,而每个项集会议路径的方式存储在树中。存在相似元素的集合会共享树的一部分。只有当集合之间完全不同时,树才会分叉。树节点上给出集合中的单个元素及其在序列中的出现次数,路径会给出该序列的出现次数。

相似项之间的链接即节点链接,用于快速发现相似项的位置。下面是一个简单例子:

上表就是上图所示FP树的数据。其中z元素项出现了5次,集合{r,z}出现了1次。于是可以得出结论:z一定是自己本身或者和其他符号一起出现了4次。那么在z的其他可能性中,集合{t,s,y,x,z}出现了两次,集合{t,r,z,y,x}出现了1次。元素项z的右边标的是5,表示z出现了5次,其中刚刚已经列出了4次,所以它一定单独出现过一次。

FP-growth算法的工作流程如下:首先构建FP树,然后利用它来挖掘频繁项集。为构建FP树,需要对原始数据集扫描两遍。第一遍对所有元素项的出现次数进行计数,第二遍只考虑频繁元素。

FP-growth的一般流程:

1、收集数据:使用任意方法

2、准备数据:由于存储的是集合,所以粗腰离散数据。如果要处理连续素具,需要将它们量化为离散值

3、分析数据:使用任意方法

4、训练算法:构建一个FP树,并对树进行挖据

5、测试算法:没有测试过程

6、使用算法:可用于识别经常出现的元素项,从而用于制定决策、推荐元素或进行预测等应用中。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【区块链+食品安全】海南省市场监管局:进口冷链食品可信追溯平台 | FISCO BCOS应用案例
  • 树和森林的应用场景
  • 时间同步及LVS的安装配置
  • linux信号集
  • WPF窗体动态效果
  • 评价算法(topsis熵权法)
  • language model
  • php收银系统源码(收银pos+聚合支付+ai智能称重+连锁多门店+多商户入驻平台版商城)
  • 【笔记】MSPM0G3507移植RT-Thread——MSPM0G3507与RT_Thread(二)
  • 图书借阅会员员工管理小程序开发
  • Spring事务管理和事务传播机制详解
  • 项目成功的关键:10款需求文档管理工具
  • Android进阶之路 - res、raw、assets 资源解析、区别对比
  • 生态系统NPP及碳源、碳汇模拟(土地利用变化、未来气候变化、空间动态模拟)
  • 【瑞芯微RV1126(板端摄像头图像数据采集)】②使用v4l2视频设备驱动框架采集图像数据,按键拍照并显示
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • C++11: atomic 头文件
  • canvas绘制圆角头像
  • CAP理论的例子讲解
  • ECMAScript入门(七)--Module语法
  • exports和module.exports
  • gf框架之分页模块(五) - 自定义分页
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • JavaScript类型识别
  • JavaScript设计模式系列一:工厂模式
  • nginx 配置多 域名 + 多 https
  • python学习笔记-类对象的信息
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 技术:超级实用的电脑小技巧
  • 如何进阶一名有竞争力的程序员?
  • 思维导图—你不知道的JavaScript中卷
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 协程
  • 一起参Ember.js讨论、问答社区。
  • zabbix3.2监控linux磁盘IO
  • ​马来语翻译中文去哪比较好?
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • (1)Nginx简介和安装教程
  • (2)STL算法之元素计数
  • (21)起落架/可伸缩相机支架
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (pojstep1.3.1)1017(构造法模拟)
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (回溯) LeetCode 40. 组合总和II
  • (九)c52学习之旅-定时器
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (一一四)第九章编程练习
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • .CSS-hover 的解释