背景介绍
维克多迈尔在《大数据时代》中,提出了大数据时代跟传统的信息时代相比,最本质的三个思维变革:1.要全体数据,而不仅是样本;2.要混杂,而不要效率偏低的精确;3.要相关关系,而不是因果关系。这第三条说的就是数据挖掘中,最基础,最简单,也是最为重要的应用——数据相关关系的挖掘。相关关系,其实是数据中蕴含的最直接的知识,而对这种相关关系的挖掘,如今也早已应用到推荐系统,个性化检索,机器学习,以及很多更加高级的领域。所以说,相关关系的挖掘,第一,它极为重要,它几乎是数据挖掘和传统数据分析侧重点的分水岭,在如今这个数据时代,它是最重要也是最基本的数据技能;第二,它不难,一般的相关关系挖掘,不需要太过精深的理论;第三,它很普及,已经渗入了生活的方方面面。而这个问题入门级的算法,就是本文要说的Apriori算法,也叫“先验算法”。
相关概念
1. 项(item):项指的是具体的一件东西,比如在购物篮的例子中,你的购物篮里面的大米,被子,红酒等等商品。
2. 项集(itemset):顾名思义,项的集合,由一个或多个项组成的一个整体,我们把由k个项组成的项集叫k项。
3. 事务(transaction): 一个事务,可以看做是发生的一次事件,比如一个人一次的购物清单,用符号T表示,一般来说,T包含一个它本身的身份——TID以及事务中的一个项集。当然,如果我们收集很多这样的清单,构成一个数据库,这个数据库就能作为我们挖掘计算的依据了。这个库,用符号D表示。
4. support(A⇒B)=P(A∪B)。
算法实现
第1步: 生成1项集的集合C1。将所有事务中出现的项组成一个集合,记为C1,C1可以看做是由所有的1项集组成的集合,比如上面这个例子,C1可以写成下面的形式,每个元素其实都是由一个项构成的集合:
第2步: 寻找频繁1项集,统计C1中所有元素出现的次数,再与最小支持度计数阈值min_sup比较,筛掉出现小于min_sup的项集(当然此时的项集都是1项集),剩下的都是频繁1项集,这些频繁1项集组成的集合记为L1。此例中,我们设置min_sup=2,那么经过这一步的筛选,没有项集被淘汰。
第3步: 连接。连接的作用就是用两个频繁k−1项集,组成一个k项集。