




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据挖掘(2):关联规则 FpGrowth 算法2015/08/28 IT 技术 数据挖掘分享到:6Android-精通 Activity新春特辑-Cocos 抢红包Android 攻城狮的第二门课(第 3 季)Android 攻城狮的第二门课(第 2 季)原文出处: fengfenggirl(也爱数据挖掘)上一篇介绍了关联规则挖掘的一些基本概念和经典的 Apriori 算法, Aprori 算法利用频繁集的两个特性,过滤了很多无关的集合,效率提高不少,但是我们发现 Apriori 算法是一个候选消除算法,每一次消除都需要扫描一次所有数据记录,造成整个算法在面临大数据集时显得无能为力。今天我们
2、介绍一个新的算法挖掘频繁项集,效率比 Aprori算法高很多。FpGrowth 算法通过构造一个树结构来压缩数据记录, 使得挖掘频繁项集只需要扫描两次数据记录,而且该算法不需要生成候选集合,所以效率会比较高。我们还是以上一篇中用的数据集为例:TIDItemsT1牛奶,面包T2面包,尿布,啤酒,鸡蛋T3牛奶,尿布,啤酒,可乐T4面包,牛奶,尿布,啤酒T5面包,牛奶,尿布,可乐一、构造 FpTreeFpTree 是一种树结构,树结构定义如下:12345678public class FpNode String idName;/ id 号List children;/ 孩子结点FpNode pare
3、nt;/ 父结点FpNode next;/ 下一个 id 号相同的结点long count;/ 出现次数树的每一个结点代表一个项,这里我们先不着急看树的结构,我们演示一下 FpTree 的构造过程,FpTree 构造好后自然明白了树的结构。假设我们的最小绝对支持度是 3。Step 1:扫描数据记录,生成一级频繁项集,并按出现次数由多到少排序,如下所示:ItemCount牛奶4面包4尿布4啤酒3可以看到,鸡蛋和可乐没有出现在上表中,因为可乐只出现 2 次,鸡蛋只出现 1 次,小于最小支持度,因此不是频繁项集,根据 Apriori 定理,非频繁项集的超集一定不是频繁项集,所以可乐和鸡蛋不需要再考虑
4、。Step 2:再次扫描数据记录,对每条记录中出现在 Step 1 产生的表中的项,按表中的顺序排序。初始时,新建一个根结点,标记为 null;1)第一条记录:牛奶,面包,按 Step 1 表过滤排序得到依然为牛奶,面包,新建一个结点,idName 为牛奶,将其插入到根节点下,并设置 count 为 1,然后新建一个面包结点,插入到牛奶结点下面,插入后如下所示:2)第二条记录:面包,尿布,啤酒,鸡蛋,过滤并排序后为:面包,尿布,啤酒,发现根结点没有包含面包的儿子(有一个面包孙子但不是儿子),因此新建一个面包结点,插在根结点下面,这样根结点就有了两个孩子,随后新建尿布结点插在面包结点下面,新建啤
5、酒结点插在尿布下面,插入后如下所示:3)第三条记录:牛奶,尿布,啤酒,可乐,过滤并排序后为:牛奶,尿布,啤酒,这时候发现根结点有儿子牛奶,因此不需要新建结点,只需将原来的牛奶结点的 count 加 1即可,往下发现牛奶结点有一个儿子尿布,于是新建尿布结点,并插入到牛奶结点下面,随后新建啤酒结点插入到尿布结点后面。插入后如下图所示:4)第四条记录:面包,牛奶,尿布,啤酒,过滤并排序后为:牛奶,面包,尿布,啤酒,这时候发现根结点有儿子牛奶,因此不需要新建结点,只需将原来的牛奶结点的 count 加 1 即可,往下发现牛奶结点有一个儿子面包,于是也不需要新建面包结点,只需将原来面包结点的 count
6、 加 1,由于这个面包结点没有儿子,此时需新建尿布结点,插在面包结点下面,随后新建啤酒结点,插在尿布结点下面,插入后如下图所示:5)第五条记录:面包,牛奶,尿布,可乐,过滤并排序后为:牛奶,面包,尿布,检查发现根结点有牛奶儿子,牛奶结点有面包儿子,面包结点有尿布儿子,本次插入不需要新建结点只需更新 count 即可,示意图如下:按照上面的步骤,我们已经基本构造了一棵 FpTree(Frequent Pattern Tree),树中每天路径代表一个项集,因为许多项集有公共项,而且出现次数越多的项越可能是公公项,因此按出现次数由多到少的顺序可以节省空间,实现压缩存储,另外我们需要一个表头和对每一个
7、 idName 相同的结点做一个线索,方便后面使用,线索的构造也是在建树过程形成的,但为了简化 FpTree 的生成过程,我没有在上面提到,这个在代码有体现的,添加线索和表头的 Fptree 如下:至此,整个 FpTree 就构造好了,在下面的挖掘过程中我们会看到表头和线索的作用。二、利用 FpTree 挖掘频繁项集FpTree 建好后,就可以进行频繁项集的挖掘,挖掘算法称为 FpGrowth(Frequent Pattern Growth)算法,挖掘从表头 header 的最后一个项开始。1)此处即从啤酒开始,根据啤酒的线索链找到所有啤酒结点,然后找出每个啤酒结点的分支:牛奶,面包,尿布,啤
8、酒:1,牛奶,尿布,啤酒:1,面包,尿布,啤酒:1,其中的“1”表示出现 1 次,注意,虽然牛奶出现 4 次,但牛奶,面包,尿布,啤酒只同时出现 1 次, 因此分支的 count 是由后缀结点啤酒的 count 决定的, 除去啤酒,我们得到对应的前缀路径牛奶,面包,尿布:1,牛奶,尿布:1,面包,尿布:1,根据前缀路径我们可以生成一颗条件 FpTree,构造方式跟之前一样,此处的数据记录变为:TIDItemsT1牛奶,面包,尿布T2牛奶,尿布T3面包,尿布绝对支持度依然是 3,构造得到的 FpTree 为:构造好条件树后,对条件树进行递归挖掘,当条件树只有一条路径时,路径的所有组合即为条件频繁
9、集,假设啤酒的条件频繁集为S1,S2,S3,则啤酒的频繁集为S1+啤酒,S2+啤酒,S3+啤酒,即啤酒的频繁集一定有相同的后缀啤酒,此处的条件频繁集为:,尿布,于是啤酒的频繁集为啤酒尿布,啤酒。2)接下来找 header 表头的倒数第二个项尿布的频繁集,同上可以得到尿布的前缀路径为:面包:1,牛奶:1,牛奶,面包:2,条件 FpTree 的数据集为:TIDItemsT1面包T2牛奶T3牛奶,面包T4牛奶,面包注意牛奶,面包:2,即牛奶,面包的 count 为 2,所以在牛奶,面包重复了两次,这样做的目的是可以利用之前构造 FpTree 的算法来构造条件 Fptree, 不过这样效率会降低,试想
10、如果牛奶,面包的 count 为 20000,那么就需要展开成 20000 条记录,然后进行 20000 次 count 更新,而事实上只需要对 count 更新一次到 20000 即可。这是实现上的优化细节,实践中当注意。构造的条件 FpTree 为:这颗条件树已经是单一路径,路径上的所有组合即为条件频繁集:,牛奶,面包,牛奶,面包,加上尿布后,又得到一组频繁项集尿布,牛奶,尿布,面包,尿布,牛奶,面包,尿布,这组频繁项集一定包含一个相同的后缀:尿布,并且不包含啤酒,因此这一组频繁项集与上一组不会重复。重复以上步骤,对 header 表头的每个项进行挖掘,即可得到整个频繁项集,可以证明(严谨的算法和证明可见参考文献1),频繁项集即不重复也不遗漏。程序的实现代码还是放在我的 github 上,这里看一下运行结果:12345678绝对支持度: 3频繁项集:面包 尿布3尿布 牛奶3牛奶4面包 牛奶3尿布 啤酒3面包4另外我下载了一个购物篮的数据集, 数据量较大, 测试了一下 FpGrowth 的效率还是不错的。FpGrowth 算法的平均效率远高于 A
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机动车售后服务合同范本
- 美术高考集训班协议合同
- 现场勘测安全协议书模板
- 自建房盖楼出售合同范本
- 腌制品配送服务合同范本
- 鱼缸家用转让协议书模板
- 离婚前财产转移合同范本
- 混凝土施工承包合同协议
- 高压铝电缆收购合同范本
- 潍坊小餐饮加盟合同范本
- 2025至2030咖啡豆市场前景分析及发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国细胞健康筛查和和健康测试行业市场深度研究及发展前景投资可行性分析报告
- 2025发展对象考试题库带有答案
- 肝癌介入术护理课件
- 企业安全生产内部举报奖励制度
- 2025年 高邮市公安局警务辅助人员招聘考试笔试试卷附答案
- 胸痛的诊断与处理
- 户外反洗钱宣传活动方案
- 声带小结护理查房
- 2025届山西中考语文真题试卷【含答案】
- 闵行区2024-2025学年下学期七年级数学期末考试试卷及答案(上海新教材沪教版)
评论
0/150
提交评论