本人刚开始学数据挖掘,虽然之前看过一本《数据挖掘原理与应用:SQL Server 2005数据库》,但是只是大体上了解了一些数据挖掘的概念,并没有深入去了解一个算法。前段时间开始比较深入的学习,就以关联规则作为学习的入口点。这 才有了这篇文章。
Apriori algorithm是关联规则里一项基本算法。是由Rakesh Agrawal和Ramakrishnan Srikant两位博士在1994年提出的关联规则挖掘算法。关联规则的目的就是在一个数据集中找出项与项之间的关系,也被称为购物蓝分析 (Market Basket analysis),因为“购物蓝分析”很贴切的表达了适用该算法情景中的一个子集。
关于这个算法有一个非常有名的故事:"尿布和啤酒"。故事是这样的:美国的妇女们经常会嘱咐她们的丈夫下班后为孩子买尿布,而丈夫在买完尿布后又要顺 手买回自己爱喝的啤酒,因此啤酒和尿布在一起被购买的机会很多。这个举措使尿布和啤酒的销量双双增加,并一直为众商家所津津乐道。
【1】一些概念和定义
- 资料库(Transaction Database):存储着二维结构的记录集。定义为:D
- 所有项集(Items):所有项目的集合。定义为:I。
- 记录 (Transaction ):在资料库里的一笔记录。定义为:T,T ∈ D
- 项集(Itemset):同时出现的项的集合。定义为:k-itemset(k项集),k-itemset ? T。除非特别说明,否则下文出现的k均表示项数。
- 支持度(Support):定 义为 supp(X) = occur(X) / count(D) = P(X)。
2. 解释二:在100个人去超市买东西的,其中买苹果的有9个人,那就是说苹果在这里的支持度是 9,9/100;
3. 解释三:P(X),意思是事件X出现的概率;
4. 解释四:关联规则当中是有绝对支持度(个数)和相对支持度(百分比)之分的。
- 置信度(Confidence/Strength): 定义为 conf(X->Y) = supp(X ∪ Y) / supp(X) = P(Y|X)。
- 候选 集(Candidate itemset):通过向下合并得出的项集。定义为C[k]。
- 频繁集(Frequent itemset):支持度大于等于特定的最小支持度(Minimum Support/minsup)的项集。表示为L[k]。注意,频繁集的子集一定是频繁集。
- 提升比率(提升度Lift):lift(X -> Y) = lift(Y -> X) = conf(X -> Y)/supp(Y) = conf(Y -> X)/supp(X) = P(X and Y)/(P(X)P(Y))
-
剪枝步
【2】Apriori优化:Fp-tree 算法
- 关键点:以树形的形式来展示、表达数据的形态;可以理解为水在不同河流分支的流动过程;
- 生成Fp-tree的几个点:
- 扫描原始项目集;
- 排列数据;
- 创建ROOT节点;
- 按照排列的数据进行元素的流动;
- 节点+1;
- 更多内容请自行学习
【3】Apriori优化:垂直数据分布
- 关键点:相当于把原始数据进行行转列的操作,并且记录每个元素的个数
- 更多内容请自行学习
Apriori核心算法过程如下:
- 过单趟扫描数据库D计算出各个1项集的支持度,得 到频繁1项集的集合。
- 连接步:为了生成,预先生成,由2个只有一个项不同的属于的频集做一 个(k-2)JOIN运算得到的。
- 剪枝步:由于是的超集,所以可能有些元素不是频繁的。在 潜在k项集的某个子集不是中的成员是,则该潜在频繁项集不可能是频繁的可以从中移去。
- 通过 单趟扫描数据库D,计算中各个项集的支持度,将中不满足支持度的项集去掉形成。
通过迭代循环,重复步骤2~4,直到有某个r值使得为空,这时算法停止。在剪枝步中的每个元 素需在交易数据库中进行验证来决定其是否加入,这里的验证过程 是算法性能的一个瓶颈。这个方法要求多次扫描可能很大的交易数据库。可能产生大量的候选集,以及可能需要重复扫描数据库,是Apriori算法的两大缺 点。
目前,几乎所有高效的发现关联规则的并行数据挖掘算法都是基于Apriori算法 的,Agrawal和Shafer 提出了三种并行算法:计数分发(Count Distribution)算法、数据分发(Data Distribution)算法和候选分发(Candidate Distribute)算法。
【5】总结
- 例子就暂时不举例,因为网上的这些例子也是比较多的;
- 度量标准还有很多很多很多,如:Lift/Interest、All-confidence、Consine、Conviction、Jaccard、Leverage、Collective strength等等。
- 频繁数据模型的分类比较多,需要慢慢理解;
参考文献
两位博士的论文下载:《Fast Algorithms for Mining Association Rules》