一、频繁项集及先验原理
通过数据挖掘-关联规则-概念,首先我们知道项以及项集的概念,其次我们也知道了支持度的概念。那么频繁项集的概念 就不难给出:
频繁项集:支持度大于等于指定的最小支持度的项集,称为频繁项集。其中项集的大小称为基数。 基数为k的项集我们称为k-项集,基数为k的频繁项集称为k-频繁项集。
同样给出我们的栗子数据:
周几下午2点 | 一起在操场玩耍 |
---|---|
周一 | {小刚,小红} |
周二 | {小红,小明,小杨,小刘} |
周三 | {小刚,小明,小杨,小李} |
周四 | {小红,小刚,小明,小杨} |
周五 | {小红,小刚,小明,小李} |
根据频繁项集的定义,假设我们给定最小支持度 minsup=3/5。
那么项集:
I1:{小红}, (sup=4/5) 是 1-频繁项集
I2:{小刚,小明}, (sup=3/5) 是 2-频繁项集
I3:{小红,小明,小刚}, (sup=2/5) 不是频繁项集
I4:{小李}, (sup=2/5) 不是频繁项集
并且我们不难看出,如果一个项集不是频繁项集,那么任何包含该项集的父项集都不可能是频繁项集。
例如:因为I4不是频繁项集,所以任何包含小李的项集都不是频繁项集,这个很好理解,小李自己一周才玩耍了两次,所以不可能和任何人一起玩耍了两次以上。
所以,反过来,如果一个项集是频繁项集,那么该项集的任何非空子项集都必须是频繁项集。这是频繁项集的重要定理,称为先验原理。
二、频繁项集的生成过程
以上,我们知道,如果一条规则的支持度要满足最小支持度要求,这条规则的项集就必须是频繁项集。 所以我们挖掘关联规则的步骤就是:
- 根据最小支持度找出频繁项集。
- 由频繁项集生成该项集所有的规则。
- 根据最小置信度从生成的规则中找出关联规则。
所以第一步是根据给出的事务集合以及最小支持度找出最大的频繁项集或者指定的k-频繁项集。 根据先验原理,可以分为以下步骤:
- 由k-项集根据最小支持度过滤出k-频繁项集。
- 由k-频繁项集生成(k+1)-项集,可以称为候选项集。
- 然后重复第1步。
终止条件可以是直到找到最大的k-频繁项集,或者指定k的k-频繁项集为止。
三、关联规则的生成
当我们有了一个k-频繁项集之后(k>1),对应于该频繁项集就会产生2的k次方-2条规则。
我们需要在这些规则中过滤出置信度大于等于最小置信度的规则。过滤的最直接粗暴的方式就是遍历所有的规则,依次判断其置信度。但是我们可以根据置信度的公式:
(X∪Y)∙count/X.count
可以看出,对于给定的频繁项集的所有规则,(X∪Y)∙count是不变的。
例如假设 I={小红,小明,小刚} 是一个频繁项集,那么该频繁项集对应的规则:
R1: 小红->小明,小刚
R2: 小明->小红,小刚
R3: 小刚->小明,小红
R4: 小明,小刚->小红
R5: 小红,小刚->小明
R6: 小明,小红->小刚
这些规则的(X∪Y)∙count是不变的,都是频繁项集I出现在整个事务集合T中的次数。 那么唯一影响这些规则置信度大小的因素就是前件X在整个事务集合T中的次数,即X.count,对于R1,是小红在一周中玩耍的次数,对于R2是小明在一周中玩耍的次数,对于R4是小明和小刚一周中一起玩耍的次数,等等。
由于(X∪Y)∙count不变,所以随着X.count的增大,置信度会变小。所以上述规则中,我们不难看出,如果R4的置信度conf(R4)小于minconf,那么conf(R2)和conf(R3)都一定小于minconf,因为R4的X={小明,小刚},R2和R3的X分别等于{小明}和{小刚}。由频繁项集的先验原理我们不难知道{小明}.count和{小刚}.count一定大于等于{小明,小刚}.count。又因为随着X.xount的增大,置信度会变小,所以R2和R3的置信度一定小于等于R4。
上面说了一大堆,总结起来一句话:
给定一个频繁项集k,如果一条以y为后件的规则是关联规则,那么任何以y的非空子集为后件的规则都是关联规则。也可以反过来表述,如果一条以x为前件的规则不是关联规则,那么任何以x的非空子集为前件的规则都不是关联规则。
频繁项集的先验定理和这条规律在后续做频繁项集生成和规则生成的算法中,是至关重要的。