前言
大二的时候,一个老师为了勾起我们对数据挖掘的兴趣,老是问我们这个问题:你们知道超市为什么要把啤酒跟尿布放在一起吗?但是从来没告诉我们答案。现在,很多人都听过这个问题,觉得很平常,但是那时的我真觉得挺神奇的。直到后来,了解了关联规则挖掘,学习了关联规则挖掘的代表性算法Apriori,才终于知道了答案。关联规则挖掘,就是找出那些经常同时出现的事物,比如啤酒和尿布。接下来,我们进入正题。
基本知识
关联规则挖掘通过形式化的语言表述如下:
设集合
一个关联规则是一个如下形式的蕴涵关系:
X(或Y)是一个项目的集合,称为项集(Itemset),X称为前件,Y称为后件。
如果项集X是事物
对于关联规则
支持度用于衡量一条规则出现得有多频繁,只有出现得足够频繁的规则对我们才有用,比如
关联规则挖掘的目标就是,找出事物集合T中所有满足支持度和置信度分别高于用户指定的最小支持度和最小置信度(minconf)的规则。Apriori算法帮我们实现这个目标。
Apriori算法
Apriori算法分为两步:
(1)生成所有频繁项目集:一个频繁项目集(Frequent Itemset)是一个支持度高于minsup的项集。
(2)从频繁项目集中生成所有可信关联规则:一个可信关联规则(Confident Association Rule)是置信度大于minconf的规则。
一个包含k个项目的项集称为k-项集,一个包含k个项目的频繁项目集成为k-频繁项目集。
向下封闭属性:频繁项目集的任何非空子集也是频繁项目集。这个属性很重要,但是很好理解:包含频繁项目集的非空子集的事务数目大于等于包含频繁项目集本身的事务数目。
接下来具体介绍Apriori算法的两步。
频繁项目生成
Apriori算法假定I中的项目都采用字典序排列。在算法中涉及的每个项集也都假定始终保持这个顺序。
算法伪代码如下:
其中,
关联规则生成
从频繁项目集f中抽取所有关联规则,需要找出f的所有非空子集,然后以使得前件不为空的非空子集作为后件,生成一条关联规则。我们要从这些关联规则找到这样的关联规则:
可以看出,当以a为后件时,如果规则满足最小置信度,那么以a的任何非空子集为后件的规则也必定满足最小置信度,因为分母变小了。这也是向下封闭属性。
生成关联规则算法的伪代码如下:
参考资料: 《Web数据挖掘》第2版,Bing Liu 著, 俞勇 译