频繁模式挖掘(Frequent Pattern Mining)

       频繁模式挖掘(Frequent Pattern Mining)是数据挖掘中很常用的一个种挖掘,今天给大家介绍的一种名叫Apriori的频繁模式挖掘算法。先来看看什么叫频繁模式?~就是经常一起出现的模式,这里的“模式”是一个比较抽象的概念,我们来看一个具体的例子,那就是著名的“啤酒与尿布”的故事~说是在美国有婴儿的家庭中,一般都是母亲在家中照看婴儿,年轻的父亲前去超市购买尿布。父亲在购买尿布的同时,往往会顺便为自己购买啤酒,这样就会出现啤酒与尿布这两件看上去不相干的商品经常会出现在同一个购物篮的现象。如果这个年轻的父亲在卖场只能买到这两件商品之一,则他很有可能会放弃购物而到另外一家商店,直到可以一次同时购买到啤酒和尿布为止。沃尔玛发现这一独特的现象,开始在卖场尝试将啤酒与尿布摆放在相同的区域,让年轻的父亲可以同时找到这两件商品,并很快地完成购物;而沃尔玛超市也可以让这些客户一次购买到两件商品,而不是一件,从而获得了很好的商品销售收入,这就是“啤酒与尿布”故事的由来。再比如在超市的销售记录里,常常会发现牛奶和面包是经常被一起购买的,那么牛奶和面包这两个item经常一起现在销售记录中,所以在这里牛奶和面包是一个可以看成是一个频繁模式,当然单独看牛奶,单独看面包,也是频繁模式。

       那么频繁模式挖掘就是想找出这些频繁出现的模式,至于这个“频繁”是怎么定义的呢?那要看算法里的设置。我们来看看Apriori算法,首先需要先介绍几个概念,以便于算法的理解:

       1)支持度:表示某个item集合在数据表中出现的比例。

       2)K-项候选集:由K-1项频繁集组合而成,支持度大于等于指定支持度的含有K个项的集合,供计算K项频繁集使用。

       3)K-项频繁集:支持度大于等于指定支持度的含有k个项的集合,由K项候选集计算而得。

       看完这三个定义,是不是很茫然?。。我一惯很喜欢举例子,因为看例子很容易理解,下面我们就通过例子来看看这个算法,就会明白上述的术语是怎么回事了。

《频繁模式挖掘(Frequent Pattern Mining)》

          假设有上面这样一张表,我们想找出有哪些item是经常一起出现的,这些item具体是什么,要看具体的问题,比如可以是卖出的货物,或者用户的tag等等。下面我们开始计算。首先从1-项集开始,就是只考虑一个item在多少条记录中出现过,然后出现该项集的记录数所占的百分比,就是支持度,计算得:

《频繁模式挖掘(Frequent Pattern Mining)》

          上面这张表中算出的项集,就是K-项候选集,这里是1-项候选集。在算法中,我们需要设定一个最小支持度,用来过滤掉一些不频繁的项集,假设把最小支持度设为0.25,那么把支持度小于0.25的项集就会被过滤掉,得到下表:

《频繁模式挖掘(Frequent Pattern Mining)》

上表所计算得到的项集,就是K-项频繁集,这里是1-项频繁集,就是在我们设定的最小支持度设为0.25的情况下,这些1-项集被认为是频繁出现的。算出了1-项频繁集后,再继续扩展,算2-项频繁集,也就是算什么样的两个item频繁出现。在算K+1-项频繁项时,注意有一个这样的结论:如果K+1个元素构成频繁项集,那么它的任意K个元素的子集也是频繁项集。就比如,如果牛奶和面包频繁一起出现,那么是不是牛奶也频繁出现?面包也频繁出现?这个结论说的就是这个意思。因此K+1-项频繁集的任意子集必定也是频繁的,这有什么用呢?用处大了,这使得我们可以用K-项频繁集来生成K+1-项候选集,因为K+1-项频繁集的任意子集必定是之前算出的频繁项集,因此可以用之前算出的频繁项集来组合生成K+1-项候选集,组合方法是:两两组合,使得满足两两中前 K-1 个元素相同,最后一个元素要求前一条记录的商品名称小于后一条记录的商品名称,这样是为了避免重复组合。因此2-项候选集如下:

《频繁模式挖掘(Frequent Pattern Mining)》

        从中选出支持度大于等于 0.25 的项集,即是 2-项频繁集:

《频繁模式挖掘(Frequent Pattern Mining)》

        再用同样的方法计算3-项候选集,得到:

《频繁模式挖掘(Frequent Pattern Mining)》

        选出支持度大于等于 0.25的项集得 3-项频繁集,得到:

《频繁模式挖掘(Frequent Pattern Mining)》

       继续往下算,直到计算出的频繁集为空集,这个例子的 4-项频繁集即为空集,因此最大项集是 3-项频繁集。就 2-项频繁集来看,它表示这表示I1 和 I3 同时出现,或 I2 和 I3 同时出现,或 I2 和 I4 同时出现,或 I3 和 I4同时出现的概率大于等于设定的最小支持度,即大于等于 0.25。而 3-项频繁集{ I2,I3,I4}表示{ I2,I3,I4}同时出现的概率也大于等于设定的最小支持度,即大于等于 0.25。

       这个算法还是挺有用的,因为我们常常会关心什么和什么经常一起出现,这个算法给我提供了一个解决方案。

点赞