Apriori(先验)算法关联规则学习的经典算法之一,用来寻找出数据集中频繁出现的数据集合。若是看过之前的博客,是否是想到了这个跟数据挖掘入门系列教程(一)之亲和性分析这篇博客很类似?Yes,的确很类似,只不过在这篇博客中,咱们会更加深刻的分析如何寻找可靠有效的亲和性。并在下一篇博客中使用Apriori算法去分析电影中的亲和性。这篇主要是介绍Apriori算法的流程。算法
这个在数据挖掘入门系列教程(一)之亲和性分析这篇博客曾经提过,但在这里再从新详细的说一下。ide
何如判断一个数据是不是频繁?按照咱们的想法,确定是数据在数据集中出现次数的越多,则表明着这个数据出现的越频繁。学习
值得注意的是:在这里的数据能够是一个数据,也能够是多个数据 (项集)。ui
如下面这张图为例子,这张图每一列表明商品是否被购买(1表明被购买,0表明否),每一行表明一次交易记录:spa
经常使用的评估标准由支持度、置信度、和提高度三个:code
支持度就是数据在数据集中出现的次数(也能够是次数占总数据集的比重),或者说其在数据集中出现的几率:htm
下面的公式以所占比例来讲明:
\[ \begin{split} & 若是是一个数据X,则其支持度为:\\ & support(X) = P(X) = \frac{num(X)}{num(ALL)} \\ & 若是数据是一个数据项集(X,Y),则支持度为:\\ & support(X,Y) = P(X,Y) = \frac{num(XY)}{num(ALL)}\\ & 若是数据是一个数据项集(X,Y,Z),则支持度为:\\ & support(X,Y,Z) = P(X,Y,Z) = \frac{num(XYZ)}{num(ALL)}\\ & (X,Y,Z表明的是X,Y,Z同时出现的次数) \end{split} \]
以上面的交易为例:blog
咱们来求 (黄油,苹果) 的支持度:教程
(黄油,苹果) 在第0,2,3
中经过出现了,一共是5条数据,所以\(support(黄油,苹果) = \frac{3}{5} = 0.6\)
通常来讲,支持度高的不必定数据频繁,可是数据频繁的必定支持度高
置信度表明的规则应验的准确性,也就是一个数据出现后,另一个数据出现的几率,也就是条件几率。(以购买为例,就是已经购买Y的条件下,购买X的几率)公式以下:
\[ \begin{split} & 设分析的数据是X,Y,则X对Y的置信度为:\\ & confidence(X \Leftarrow Y) = P(X|Y) = \frac{P(XY)}{P(Y)} \\ & 设分析的数据是X,Y,Z,则X对Y和Z的置信度为:\\ & confidence(X \Leftarrow YZ) = P(X|YZ) = \frac{P(XYZ)}{P(YZ)} \\ \end{split} \]
仍是以 (黄油,苹果) 为例子,计算黄油对苹果的置信度:\(confidence(黄油\Leftarrow苹果) = \frac{3}{4} = 0.75\)。
可是置信度有一个缺点,那就是它可能会扭曲关联的重要性。由于它只反应了Y的受欢迎的程度。若是X的受欢迎程度也很高的话,那么confidence也会很大。下面是数据挖掘蒋少华老师的一段为何咱们须要使用提高度
的话:
提高度表示在含有Y的条件下,同时含有X的几率,同时考虑到X的几率,公式以下:
\[ \begin{equation} \begin{aligned} Lift(X \Leftarrow Y) &= \frac{support(X,Y)}{support(X) \times support(Y)} \ \ &= \frac{P(X,Y)}{P(X) \times P(Y)}\\ & = \frac{P(X|Y)}{P(X)}\\ & = \frac{confidenc(X\Leftarrow Y)}{P(X)} \end{aligned} \end{equation} \]
在提高度中,若是\(Lift(X \Leftarrow Y) = 1\)则表示X,Y之间相互独立,没有关联(由于\(P(X|Y) = P(X)\)),若是\(Lift(X \Leftarrow Y) > 1\)则表示\(X \Leftarrow Y\)则表示\(X \Leftarrow Y\)是有效的强关联(在购买Y的状况下极可能购买X);若是\(Lift(X \Leftarrow Y) < 1\)则表示\(X \Leftarrow Y\)则表示\(X \Leftarrow Y\)是无效的强关联。
通常来讲,咱们如何判断一个数据集中数据的频繁程度时使用提高度来作的。
说完评判标准,接下来咱们说一下算法的流程(来自参考1)。
Apriori算法的目标是找到最大的K项频繁集。这里有两层意思,首先,咱们要找到符合支持度标准(置信度or提高度)的频繁集。可是这样的频繁集可能有不少。第二层意思就是咱们要找到最大个数的频繁集。好比咱们找到符合支持度的频繁集AB和ABE,那么咱们会抛弃AB,只保留ABE,由于AB是2项频繁集,而ABE是3项频繁集。
算法的流程图以下(图来自《Python数据挖掘入门与实践》):
下面是一个具体的例子来介绍(图源不知道来自哪里,不少博客都在用),这个例子是以support做为评判标准,在图中\(C_n\)表明的是备选项集,L表明的是被剪掉后的选项集,\(Min\ support = 50\%\)表明的是最小符合标准的支持度(大于它则表示频繁)。
这个例子的图像仍是满生动的,很容易看的懂。下面就简单的解释一下:
首先咱们有数据集D,而后生成数据项\(K =1\)的备选项集\(C_1\),而后去除\(support_n < Min\ support\)的数据项,获得\(L_1\),而后又生成数据项\(K =2\)的备选项集\(C_2\),而后又去除\(support_n < Min\ support\)的数据项。进行递归,直到没法发现新的频繁项。
总的来讲,Apriori算法不是很难,算法的流程也很简单,而它的核心在于如何构建一个有效的评判标准,support?confidence?Lift?or others?可是它也有一些缺点:每次递归都须要产生大量的备选项集,若是数据集很大的话,怎么办?重复的扫描数据集……
在下一篇博客中,我将介绍如何使用Apriori算法对电影的数据集进行分析,而后找出之间的相关关系。
- Apriori算法原理总结
- Association Rules and the Apriori Algorithm: A Tutorial
- 《Python数据挖掘入门与实践》
- 数据挖掘蒋少华老师