2017-12-02 14:27:18
一、术语
Items:项,简记I
Transaction:所有项的一个非空子集,简记T
Dataset:Transaction的一个集合,简记D
关联规则:
一个Dataset的例子:
我们的目的就是找到类似买了面包->黄油这样的关联关系。
二、支持度与置信度
- 支持度
支持度就是相应的Item或者ItemSet在Dataset中出现的频率:
比如上图的D中的支持度为:
从这个图中我们可以看到一般来说支持度是单调不增的,也就是说,随着商品的增加,支持度是会减小的。
另外,类似X->Y这种购买了X又购买了Y的支持度就是这两者同时购买的频率:
- 置信度
关联规则X->Y的置信度就是T中包含X,Y的交易数目比上单独出现X的交易数目。
也可以理解为条件概率
,
举个例子:
一般来说会给出支持度和置信度的一个下限,也就是规定了支持度和置信度要高于某个阈值才表示当前的规则是有效的:
所以一个关联规则的问题就是:
一个简单的思想就是首先找到所有的频繁项,然后对频繁项中的数据进行排列组合找出其中符合条件的规则。但是这种暴力检索的方式是非常麻烦的,主要问题就是排列组合的过程中的算法的复杂度会达到指数级。
三、Apriori算法
我们必须设法降低产生频繁项集的计算复杂度。此时我们可以利用支持度对候选项集进行剪枝。
Apriori定律1:如果一个集合是频繁项集,则它的所有子集都是频繁项集。
Apriori定律2:如果一个集合不是频繁项集,则它的所有超集都不是频繁项集。
举个例子:
下图表示当我们发现{A,B}是非频繁集时,就代表所有包含它的超级也是非频繁的,即可以将它们都剪除。
算法的具体步骤:
关键的步骤是如何生成Ck+1;
通过上述的算法就可以生成一个Ck+1,算法的步骤是前k-1项相同,第k项不同,将不同的项合并就可以生成一个k+1的C。不过这种算法也会有出错的时候比如:
证明该种生成算法有效的过程如下:
举个例子:
一个更具体的例子如下:
保留了所有的频繁集之后再来进行计算置信度:
这里需要警惕的是,P(X|Y)<=P(X)的时候,这条关联规则就没有什么作用。
四、序列模式
序列是前后有一定关系的元素的列表。
子序列的概念:
注意,这里的子序列中的前后是有顺序的概念的,也就说,子序列中2在3前面,那么在原序列中也应该是这个顺序。
序列中的支持度:
序列的组合要更为复杂:
那么这里就需要一种新的生成算法: