好几天没写博客了,把之前在知乎上的一个回答搬了过来。
题目链接:hash tree 在apriori 算法中是如何进行支持度计数?
我的回答如下:
基本上看懂了,所以来答一发。
我认为这本书写得很好,数据挖掘入门首选。
P211中图6-9就是用Hash方法枚举事务t={1,2,3,5,6}的3-项集,这个图应该很好理解。
P212中图6-11其实是作者举的一个例子:此图为一个Hash树,树中结点为候选项集,树中结点为候选项集,树中结点为候选项集!!!明确这个概念,我们在统计支持度时候建立的Hash树是以候选项集建立的,而Hash树的叶结点就是候选项集。也就是说,一旦我们在P208中算法6.1中第5行中产生了候选集 Ck C k ,我们就通过此候选集建立Hash树。(第1次循环得到候选2-项集,我们就建立候选2-项集的Hash树,第2次循环得到候选3-项集,我们就建立候选3-项集的Hash树,以此类推)如何建立Hash树,参考:如何建立Hash树
而在作者举的例子中,候选项集为图6-11 Hash树的叶结点(不要纠结怎么来的,就是一个例子而已啊啊啊)。我根据此例讲一下如何统计候选3-项集的支持度:拿到一个事务t={1,2,3,5,6},生成3-项集 集合\Omega_3 ={{1,2,3},{1,2,5},{1,2,6},{1,3,5},{1,3,6},{1,5,6},{2.3.5},{2,3,6},{2,5,6},{3,5,6}}(如果要统计候选2-项集的支持度,我们就需要将把生成事务的2-项集集合),遍历这个候选3-项集集合,将每一个3-项集散列到对应的叶子结点,得到:
- 项集{1,2,3}、{1,2,6}和{1,5,6}被散列到【1 5 9】叶子结点
- 项集{1,2,5}被散列到【【1 2 5】【4 5 8】】叶子结点
- 项集{1,3,5}、{1,3,6}被散列到【1 3 6】叶子结点
- 项集{2,3,5}、{2,3,6}和{2,5,6}被散列到【2 3 4】【5 6 7】叶子结点
- 项集{3,5,6}被散列到【3 5 6】【3 5 7】【6 8 9】叶子结点
所以在这个例子中,访问了9个叶子结点中的5个,15个项集中的9个与事务t={1,2,3,5,6}进行比较(这5个叶子结点中共有9个项集),也就是P213上面最后一句话。
P.S. 事务的项集被散列到哪个叶子结点就和该叶子结点中的候选项集进行比较,而不用和全部的候选项集进行比较,这就是Hash树的优势!