Mahout关联规则算法源码分析(2)
来源:互联网 发布:淘宝网鲜花图片素材 编辑:程序博客网 时间:2024/05/17 07:26
上次说到这个函数:
public final void generateTopKFrequentPatterns(Iterator<Pair<List<A>,Long>> transactionStream, Collection<Pair<A, Long>> frequencyList, long minSupport, int k, Collection<A> returnableFeatures, OutputCollector<A,List<Pair<List<A>,Long>>> output, StatusUpdater updater)调用了一个同名的函数,然后同名的函数又引入了FPTree。那么上面这个函数是如何调用其同名的函数呢?如下:
generateTopKFrequentPatterns(new TransactionIterator<A>(transactionStream, attributeIdMapping), attributeFrequency, minSupport, k, reverseMapping .size(), returnFeatures, new TopKPatternsOutputConverter<A>(output, reverseMapping), updater);这里先分析下FPTree的各个属性:
int[] attribute; int[] childCount; int[] conditional; long[] headerTableAttributeCount; int[] headerTableAttributes; int headerTableCount; int[] headerTableLookup; int[][] headerTableProperties; int[] next; int[][] nodeChildren; long[] nodeCount; int nodes; int[] parent; boolean singlePath; final Collection<Integer> sortedSet = new TreeSet<Integer>();其中的非header开头的属性当和TransactionTree的属性一样,可参考前一篇博客;这里header开头的属性则是属FPTree特有的,各个属性的含义如下:headerTableAttributes:项目名称(由于前面做过编码转换,所以此处为int型数据);headerTableAttributeCount:项目出现的次数;headerTableProperties:项目在树中首次出现的id和最后一次出现的id;next:同一个项目在树中下一个id;
接着看同名函数,其定义如下:
private Map<Integer,FrequentPatternMaxHeap> generateTopKFrequentPatterns( Iterator<Pair<int[],Long>> transactions, long[] attributeFrequency, long minSupport, int k, int featureSetSize, Collection<Integer> returnFeatures, TopKPatternsOutputConverter<A> topKPatternsOutputCollector, StatusUpdater updater)进入函数体内可以看到其建树包含两部分:其一:添加headerTable相关内容,或者说是初始化headerTable
FPTree tree = new FPTree(featureSetSize); for (int i = 0; i < featureSetSize; i++) { tree.addHeaderCount(i, attributeFrequency[i]); }其二,是添加事务到FPTree上:
while (transactions.hasNext()) { Pair<int[],Long> transaction = transactions.next(); Arrays.sort(transaction.getFirst()); // attribcount += transaction.length; nodecount += treeAddCount(tree, transaction.getFirst(), transaction.getSecond(), minSupport, attributeFrequency); }这里起主要作用的便是treeAddCount()函数,这个函数不仅像之前TransactionTree那样建立了一棵树,同时有把相关信息添加到headerTable中和next中。
比如刚开始的原始数据,经过排序、删除、编码和相加后的数据展现如下:
{[1]2}{[1,3]5}{[2]1}{[2,4]1}{[0,2]1}{[0,2,4]4}{[0,4]2}{[3]2}则把上面的数据添加到FPTree树上的结果如下:
其相应的headerTable如下:
通过调试,打印出来的FPTree如下:
[FPTree -{attr:-1, id: 0, cnt:0}-0->-{attr:1, id: 1, cnt:7}-0->-{attr:3, id: 2, cnt:5} -1->-{attr:2, id: 3, cnt:2}-0->-{attr:4, id: 4, cnt:1} -2->-{attr:0, id: 5, cnt:7}-0->-{attr:2, id: 6, cnt:5}-0->-{attr:4, id: 7, cnt:4} -1->-{attr:4, id: 8, cnt:2} -3->-{attr:3, id: 9, cnt:2}]至此,FPTree就建好了,剩下的工作就是挖掘每棵FPTree了。
分享,快乐,成长
转载请注明出处:http://blog.csdn.net/fansy1990
- Mahout关联规则算法源码分析(2)
- Mahout关联规则源码分析(2)
- Mahout关联规则算法源码分析(1)
- Mahout关联规则源码分析(1)
- Mahout关联规则算法源码分析--如何分数据
- Mahout决策树算法源码分析(2)
- Mahout决策树算法源码分析(2)
- Mahout关联规则算法挖掘FP树
- 使用mahout fpgrowth算法求关联规则
- 使用mahout fpgrowth算法求关联规则
- MAHOUT之关联规则挖掘算法
- Mahout贝叶斯算法源码分析(2-2)
- Mahout随机森林算法源码分析(2-2)
- Mahout源码canopy聚类算法分析(2)
- Mahout源码MeanShiftCanopy聚类算法分析(2)
- Mahout贝叶斯算法源码分析(2-1)
- Mahout贝叶斯算法源码分析(2-3)
- Mahout随机森林算法源码分析(2)--BuildForest
- 正则表达式匹配规则
- Chrome Extension 开发文档 (360极速浏览器应用开放平台)
- 经常在.net中使用的下载链接地址
- 60个精美的移动开发PSD素材资源免费下载 - 下篇
- 分享25佳 iPad 应用程序的网站设计案例
- Mahout关联规则算法源码分析(2)
- Middlegen-Hibernate-r5跟hibernate-extensions-2.1.3
- ios c++ 调用oc代码
- TFT-LCD with Touch Panel Data Sheet Note
- NPAPI插件开发[2]
- Struts2教程三——Using Struts 2 Tags
- __init 和 __exit 修饰符
- TCP/IP详解--学习笔记(5)-IP选路,动态选路,和一些细节
- POJ【数论/组合/博弈论】题目列表