频繁模式和关联规则
频繁模式是数据集中频繁出现的项集、序列或子结构。例如,在购物篮分析中,会分析哪些商品频繁的被客户同时购买;在网页日志分析中,会分析用户在浏览“手机”页面后,通常会继续浏览哪些页面。这些都是频繁模式挖掘的典型例子。频繁模式挖掘是关联规则、相关分析、因果分析的基础,对分类、聚类也有很大帮助。它在实际中的应用非常广泛,例如,购物篮分析、网页日志分析、DNA序列分析等。因此,频繁模式挖掘是一项非常重要的数据挖掘任务。
频繁项集基本概念
- 项集(itemset):最基本的模式是项集,它是指若干个项的集合。例如,某用户在一次购物过程中购买了啤酒、咖啡和鸡蛋,那么集合{“啤酒”, “咖啡”, “鸡蛋”}是一个项集。包含k个项的项集称为k项集(k-itemset)
- 数据集:典型的数据集是事物(Transaction)的集合,每一个事物是一个非空项集,并拥有一个标识TID(表1)。用户购物日志是一个典型例子,其中用户的每一次购物行为是一个事物。数据集也可以表示为Data Matrix的形式(表2)。
TID | Itemset |
---|---|
1 | {Beer, Coffee, Milk} |
2 | {Beer, Milk} |
3 | {Beer, Coffee, Milk, Fish} |
| TID | Beer| Coffee | Milk | Fish |
| :-------- | :--------| :--------| :--------|
| 1 |1|1|1|0|
| 2 |1|0|1|0|
| 3 |1|1|1|1|
- 支持度计数/绝对支持度(support count):数据集中包含项集X的事物数
- 相对支持度(support):项集X的绝对支持度与数据集事物总数的比值
- 频繁项集(frequent itemset):项集X的支持度超过最小门限值min_sup时,称X为频繁项集
频繁项集的压缩表示
易知,一个频繁项集的子集都是频繁的。当数据集很大时,通常会挖掘出大量的频繁项集,很难计算和存储。所以,我们引入了闭频繁项集(closed frequent itemset)和极大频繁项集(maximal frequent itemset)来对数据集D的全部频繁项集进行压缩表示。
- 闭频繁项集(closed frequent itemset):当项集X是频繁项集,且数据集D中不存在X的真超集Y,使得X和Y的支持度相等,则X是闭频繁项集。闭频繁项集的表示是无损压缩,不会丢失支持度的信息。通过闭频繁项集可以反推出所有的频繁项集以及相应的支持度
- 极大频繁项集(maximal frequent itemset):当项集X是频繁项集,且数据集D中不存在X的真超集Y,使得Y是频繁项集,则X是极大频繁项集。极大频繁项集的表示是有损压缩,失去了频繁项集的支持度信息,我们可以根据极大频繁项集判断任意项集是否是频繁的,但无法得到相应的支持度
实际中,需要根据应用的特点来选择相应的表示方法。这里的项集可以推广到其他的模式(pattern)
关联规则
由频繁项集,我们引入关联规则的概念。关联规则(association rules)是形如X→Y(s,c)的表达式,其中X
和Y均为项集,且X∩Y=∅。
s代表支持度(support),反映了规则的可用性。支持度一个事物包含X∪Y的概率
c代表置信度(confidence),反映了规则的确定性。置信度是一个事物在包含X的同时也包含Y的条件概率
同时满足最小支持度阈值和最小置信度阈值的规则称为强规则
一般而言,关联规则的挖掘分为两步:
- 找出所有频繁项集,即候选规则
- 对所有候选规则计算置信度,找出其中的强规则
频繁项集挖掘算法
频繁项集的挖掘算法基于Downward Closure性质。具体的说,如果一个项集X是频繁的,那么它的所有子集也是频繁的。反过来说,一个项集S是非频繁的,那么它的所有超集也是非频繁的。根据这个性质,诞生了一系列经典算法:
- Apriori :(Agrawal & Srikant@VLDB’94)
- Eclat (Zaki, Parthasarathy, Ogihara, Li @KDD’97)
- FP-Growth (Han, Pei, Yin @SIGMOD’00)