`
安铁辉
  • 浏览: 245301 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

FP-tree 关联规则挖掘

阅读更多
          去年公司1拆4,再拆3,在拆25,真是72搬变化,看的我等屌丝一阵胆寒,但一年过去了并没有影响我和同事们的工作,也没有听得到一些负面消息,nice,看来level还查一大大截。拆25的一个大的结果是前台流量必然被瓜分,这个应该会很纠结,有点远,打住。今年我的技术方向有BI转向算法多一点,这也是我个人很甘兴趣的,团队专注于CRM这一块,现在提的比较多的是CEM,好像你还再提crm就不好意思和人打招呼。为了提高用户体验,所以在做一个用户行为分析的东东,思路就是采集用户行为,更好的服务会员,其中一个落地点就是根据会员状态,行为推测出来电的目的地是哪里,即什么问题。关联规则的算法主流的有3个,Apriori,基于划分的算法,FP-tree,他们都有自己的侧重点,百科地址:http://baike.baidu.com/view/1076817.htm
基本思路都是找出频繁项集 apriori迭代的方式找,效率低,但是思路很清晰,基于规划是在它基础上优化了性能,Fp-tree是韩佳伟设计的算法,只需要扫描2次数据库,性能有很大提升,并且最主要的mahout有对应的事项,mahout对于mapreduce支持友好,所以选它了.

一、环境
FP-tree wiki  https://cwiki.apache.org/confluence/display/MAHOUT/Parallel+Frequent+Pattern+Mining
hadoop 0.20.2+mahout 0.5 +jdk 1.6 不同版本间有不兼容情况,这个坑我踩过了,坑和安装见我之前的文章。安装环境过程中遇到好多问题,有些百度就能解决了,有好多需要谷歌看老外的论坛,觉得每次百度搞不定了就用谷歌,最后老外的解释都挺简单,但能解决问题,所以强烈建议在搜索之前想一下是否直接看老外的论坛,感觉国内遇到的问题总是更丰富一下。
二、讲算法前先讲一下如何配置eclipse进行debug,
1、eclipse安装mapreduce插件,网上找一个安装就行,应该与hadoop版本没关系
2、这个时候需要配置插件的hadoop信息了,因为需要与hadoop环境交互,所以需要知道namenode的监听端口和jobtracker的监听端口,如果你前面忘记了自己的配置,那查看一下文件。不同hadoop版本的配置文件也不同,我 的是hadoop0.20.2(这也是个坑)
core-site.xml文件的
fs.default.name

mapred-site.xml文件的
mapred.job.tracker

这样就可以在eclipse中run和debug了
二、算法逻辑
程序主入口是FPGrowthDriver 其实就是一个启动类,做一些输入参数解析,比如输入输出,根据掺入的参数选择单机还是分布式计算,由method指定,具体参数看mahout -fp-treewiki页面(或者你输入参数不对也会有提示的),我的method指定的mapreduce,如下代码:
if ("sequential".equalsIgnoreCase(classificationMethod)) {
				runFPGrowth(params);
			} else if ("mapreduce".equalsIgnoreCase(classificationMethod)) {
				Configuration conf = new Configuration();
				HadoopUtil.delete(conf, outputDir);
				PFPGrowth.runPFPGrowth(params);

PFPGrowth.runPFPGrowth主要计算逻辑都在这个方法总,这个方法调用了5个方法,所以计算过程可以分为5个步骤,我详细讲解下具体每一步都做了什么,之前有参照过另一片博客,头几步讲的很详细,而且有图,但是很多细节并没有提,博客地址是:http://www.cnblogs.com/zhangchaoyang/articles/2198946.html
1、
Count

startParallelCounting 这部就是个wordcount,对于DB中的每个元素做计数,可以叫做Count,这样方便记忆和理解,产出的是一个
fList, [(薯片,7), (面包,7), (鸡蛋,7), (牛奶,5), (啤酒,4)]
这个后面会用到,所以这些变量名最好都理解并记住。
2、
Group

startGroupingItems  fList随机分N组,每组放maxPerGroup个元素  maxPerGroup=fList.size() / numGroups;
分组后的数据放入gList {薯片=0, 牛奶=3, 鸡蛋=2, 面包=1, 啤酒=4} 数字是组ID
本次没有用到mapreduce,在本地完成,
fList相当于元素或元素对应编号与组的映射关系
3、
code

startTransactionSorting 编号,去重,排序,输入输出类似如下,只不过[0, 1, 2]不是数组,而是一个 TransactionTree,到现在位置逻辑还都很清晰,第四步开始构建树结构了
牛奶,鸡蛋,面包,薯片 ->> 单分支的树[0, 1, 2]

4、
tree

startParallelFPGrowth
map:读取第三步输出的树,并拆成多颗树:如把[0, 1, 2] --> [0, 1, 2] [0,1] [0]  输出K=groupId(fList中2对应的groupId)  V=对应的树
reducer:第三步中同一个groupid的输出构建成对应的一棵树。然后遍历表头项,分别从树上递归找到所有父节点,这样表头项中的1个元素会对应多条路径,然后把这些路径作为输入到第三步,迭代进行
5、
mining

startAggregating 根据第四步的输出产出top k频繁模式


ps:时间比较急,今天就搞环境和做ETL了,先写这些,后续再更新,发现还是没有我参照的博客写的详细,人家还有图呢,后续也会做个图,再把我代码中的一些注释抽取出来,会更清晰一些,方便来看的人,执行力,执行力啊,图会有的。收工,回家……2013-03-30
分享到:
评论

相关推荐

    详解python实现FP-TREE进行关联规则挖掘

    FP-TREE(频繁项集树)是关联规则挖掘中一种有效的数据结构,尤其适用于处理大规模数据集。本文将深入探讨如何使用Python来实现FP-TREE算法,并通过Python3.2进行演示。为了可视化FP树的生成过程,需要安装PIL库来...

    关联规则挖掘 FP-tree关联规则挖掘 FP-tree

    根据给定的文件信息,我们可以生成以下知识点: ...关联规则挖掘 FP-tree 是一种高效的关联规则挖掘算法,基于频繁模式树的构造和挖掘。FP-growth 算法是基于 FP-tree 的关联规则挖掘算法,具有高效和准确的特点。

    fp-tree详细介绍

    - **适应性**:FP-Tree可以与其他数据挖掘任务结合,如关联规则学习,通过发现频繁项集来生成规则。 - **可扩展性**:尽管本例只展示了单个FP-Tree,但可以扩展到多个FP-Tree,例如在多维数据或分类数据中。 总之,...

    python实现FP-TREE挖掘算法

    FP-TREE(频繁模式树)是一种在数据挖掘领域用于发现关联规则的高效算法,尤其适用于处理大规模高频率项集的数据。Python作为一种强大的编程语言,因其易读性与丰富的库支持,成为了实现FP-TREE算法的理想选择。在这...

    FP-tree 频繁模式挖掘

    FP树(FP-Tree)是一种在数据挖掘领域用于挖掘频繁项集的数据结构,它是由Hans-Peter Kriegel、Jörg Sander和Philipp W. Sander于1994年提出的。FP树算法主要用于解决关联规则学习的问题,即在大量事务数据中找出...

    使用Apriori和FP-growth进行关联规则挖掘

    本文将深入探讨两种广泛使用的关联规则挖掘算法:Apriori和FP-growth。 **Apriori算法** Apriori算法由Rakesh Agrawal和Ramakrishnan Srikant于1994年提出,它是基于频繁项集(frequent itemsets)的概念。该算法...

    FP-Tree GDI

    FP-Tree(频繁模式树)和FP-Growth是数据挖掘领域中的两种常用算法,主要用于发现大规模数据集中的频繁项集。这些算法在关联规则学习中扮演着重要角色,能够帮助我们找出不同项目之间的隐藏关系。在给定的“FP-Tree ...

    FP-Tree.zip_ fp tree_fp tree_fp-growth_fp-growth算法的源代码_fp-tree

    FP-Tree(频繁模式树)是一种在数据挖掘领域用于挖掘频繁项集的高效算法,它主要应用于关联规则学习。此压缩包包含与FP-Tree相关的源代码和其他支持文件,可以帮助我们理解并实现FP-Tree以及基于它的算法,如FP-...

    FP-Growth 关联规则挖掘方法 Matlab 频繁项集挖掘

    FP-Growth采用频繁模式挖掘技术构建频繁模式树(FP-Tree),可用于提取关联规则。与 Apriori 相比,FP-Growth 方法更加高效,并且在大型数据集中的规则挖掘方面具有更好的性能。适合研究生学习。

    FP-Tree-java-code

    FP-Tree(频繁模式树)是一种在数据挖掘领域用于发现关联规则的数据结构。它是由Hui Han和W. Philip M. Yin在2000年提出的,主要用于解决大规模数据集中的频繁项集挖掘问题,尤其是在内存限制的情况下。在这个Java...

    fp-tree算法程序

    5. **挖掘频繁项集**:使用递归函数遍历FP-Tree,生成频繁项集并计算关联规则。 6. **优化策略**:可以考虑使用逆序FP-Tree(反向链接),或者利用压缩技术如Z-Order编码来减少存储空间。 在C#中,可以利用.NET...

    fp-tree.rar_fp_fp-tree_tree_频繁项集

    3. **可扩展性**:fp-tree算法可以与其他挖掘任务结合,如关联规则学习,通过在fp-tree基础上寻找强规则。 **fp-tree的局限性与改进**: 尽管fp-tree算法在很多情况下表现优秀,但也有其局限性。例如,对于项集支持...

    数据挖掘Apriori和FP-tree算法的实现

    在数据挖掘中,关联规则学习是探索数据中项集之间有趣关系的重要方法,而Apriori和FP-growth(FP-tree)是两种经典的关联规则挖掘算法。 **Apriori算法** 是最早被提出的关联规则挖掘算法之一,由Rakesh Agrawal和...

    对FP-Tree头表节点数据结构的改进.pdf

    FP-Tree是一种用于关联规则挖掘的数据结构,而关联规则挖掘是数据挖掘领域中的一个重要分支,它旨在从大量的数据中发现项集之间的有趣关系,即所谓的关联规则。例如,购物篮分析中会发现顾客经常一起购买的商品组合...

    fp-tree java源码

    在数据挖掘领域,尤其是关联规则挖掘中,寻找频繁模式是一项核心任务。传统的Apriori算法虽然有效,但因需多次扫描数据库而存在效率瓶颈。针对这一问题,韩嘉炜教授提出的FP-Tree(频繁模式树)算法以其高效的性能...

    频繁模式树FP-TREE

    在数据挖掘领域,频繁模式树(FP-Tree)是一种用于高效发现频繁项集的算法,它主要用于处理大规模交易数据中的关联规则挖掘。关联规则挖掘是寻找数据库中项集之间的有趣关系的过程,例如,“如果顾客购买了尿布,...

    FP-TREE.rar_FP-tree java_tree_频繁项集

    FP-TREE.rar 是一个压缩包,其中包含了使用Java语言实现FP-Tree算法的代码,用于挖掘数据中的频繁项集。FP-Tree(Frequent Pattern Tree)是一种数据挖掘中用于高效发现频繁项集的结构,特别是在大规模交易数据集中...

    关联规则挖掘之FP-growth算法实现

    这个库通常会提供函数,如`fp_growth`,用于构建FP树、挖掘频繁项集以及生成关联规则。用户可以输入数据集和设定的支持度、置信度阈值,算法将返回满足条件的规则。 在实际应用中,FP-growth算法被广泛用于市场篮子...

    数据挖掘\fp-tree算法

    数据挖掘是一种从海量数据中发现有价值模式的过程,而fp-tree(频繁模式树)算法是数据挖掘领域中的一个重要方法,尤其在关联规则学习中被广泛应用。关联规则学习旨在找出数据库中项目之间的有趣关系,例如购物篮...

Global site tag (gtag.js) - Google Analytics