假设某超市销售的商品包括:bread
, bear
, cake
, cream
, milk
和 tea
,交易数据如下
交易号 TID | 顾客购买商品 Items |
---|---|
T1 | bread , cream , milk , tea |
T2 | bread , cream , milk |
T3 | cake , milk |
T4 | milk , tea |
T5 | bread , cake , milk |
T6 | bread , tea |
T7 | beer , milk , tea |
T8 | beer , tea |
T9 | bread , cream , milk , tea |
T10 | bread , milk , tea |
例如,对于数据集
TID | item |
---|---|
1 | C,D |
2 | A,B |
3 | A,B,C |
4 | A,B,C |
频繁项集
频繁闭项集
极大频繁项集
注意到
两个关联挖掘的经典算法为Apriori 算法
J.Han 等人提出了一种不产生候选集来挖掘频繁集的方法——「FP-growth 算法」。FP-growth 算法在扫描两遍数据集之后,利用一棵频繁模式树来表示频繁集,进而再明确相应的强关联规则。
「频繁模式增长」(Frequent Pattern Growth, FP-growth)算法使用一种比称为 FP-tree 的数据结构,并且采用分而治之的策略,无需产生候选频繁集(
频繁模式树 FP-tree 是一个树形结构,包括
如果单个项目的支持度大于
「频繁项头表」(Head Table)的每个表项都由三个域组成,项目名称,出现次数和指针,和倒排索引中的词典蕾丝
每个P项前缀子树
根据一个数据集
例如从项头表开始挖掘,由频率低的节点开始,沿每个频繁项的连接来遍历 FP 树,通过积累该项的前缀
对每个条件模式基
对于每个条件模式基,都可以构建一个相应的 FP 树。这个过程类似于构建原始 FP 树,只不过数据集变成了条件模式基。
好处:
数据项中经常会出现概念分层,底层的数据项,其支持度也往往较低。这意味着挖掘底层数据项之间的关联规则必须定义不同的支持度。
在适当的等级挖掘出来的数据项之间的关联规则可能是非常有用的。事务数据库中的数据一般是根据维和概念分层来进行存储的。这为从事物数据库中挖掘不同层次的关联规则提供了可能。
子啊多个抽象层挖掘
通常,多层关联规则的挖掘还是使用置信度——支持度框架,可采用自顶向下策略。
一致支持度:对所有层都适用一致的最小支持度
优点:搜索时容易采用优化策略,即一个项如果不满足最小支持度,它的所有子项都可以不用搜索。
在浇地岑使用递减的最小支持度,每一层都有自己的一个独立的最小支持度。抽象层越低,对应的最小支持度越小
使用递减支持度,可以解决使用一致支持度时在最小支持度值上设定的困难
用户和专家清楚哪些分组比其他分组更加重要,在挖掘多层关联规则时,使用用户指定的基于项或基于分组的最小支持度阈值。
对于 laptop_computer
或者 flash_drives
设置特别低的支持度阈值,以便特别关注这类商品的管理模式。
挖掘多层关联规则时,由于项间的祖先关系,有些发现的规则是冗余的。例如规则 1 是规则 2 的祖先,如果规则 2 中的项用它在概念分层中的祖先代替,能得到 1,而且 1 的支持度和置信度都接近期望值,则 2 不是有趣的。
挖掘了关联规则后,哪些规则是用户感兴趣的?强关联规则是否就是有趣的?
强关联规则往往未必有趣,例如下面的数据
打篮球 | 不打篮球 | 合计 | |
---|---|---|---|
喝麦片 | 2000 | 1750 | 3750 |
不喝麦片 | 1000 | 250 | 1250 |
合计 | 3000 | 2000 | 5000 |
然而,规则
我们需要一种度量事件之间的相关性或是依赖性的指标,称为「提升度」,定义为
当项集