apriori推荐算法

Apriori算法是一种挖掘关联规则的频繁项集算法,其核心思想是经过候选集生成和情节的向下封闭检测两个阶段来挖掘频繁项集。算法



概念数据库

(1)支持度(Support):定 义为 supp(X) = occur(X) / count(D) = P(X)(有绝对支持度(个数)和相对支持度(百分比)之分)。
spa

(2)频集:支持度大于最小支持度的项集称为频繁项集,简称频集,表示为L[k]。频繁集的子集必定是频繁集。事务

(3)候选集(Candidate itemset):经过向下合并得出的项集。定义为C[k]。it


Apriori 算法的核心是使用候选项集寻找频繁项集。 Apriori 使用一种称为逐层搜索的迭代方法, k项集用于搜索( k+1 )项集。首先,找出全部频繁 1- 项集 L1 ,而后用 L1 寻找 L2 ,用 L2 寻找 L3, 如此,直至不能找到频繁 k- 项集为止。
io


光看概念太抽象,看下面这个例子就明白是怎么回事了。date

Apriori寻找频繁项集的过程是一个不断迭代的过程,每次都是两个步骤,产生候选集Ck(可能成为频繁项集的项目组合);基于候选集Ck计算支持度,肯定Lk。
Apriori的寻找策略就是从包含少许的项目开始逐渐向多个项目的项目集搜索。
数据以下:
搜索


会员100购买了 1 3 4三种商品,那么对应的集合形式如右边的图所示。那么基于候选集C1,咱们获得频繁项集L1,设定的支持度为2,支持度大于或者等于指定的支持度的最小阈值就成为L1了,这里{4}没有成为L1的一员。所以,咱们认定包含4的其余项集都不多是频繁项集,后续就再也不对其进行判断了。
方法


此时咱们看到L1是符合最低支持度的标准的,那么下一次迭代咱们依据L1产生C2(4就再也不被考虑了),此时的候选集如右图所示C2(依据L1*L1的组合方式)确立。C2的每一个集合获得的支持度对应在咱们原始数据组合的计数,以下图左所示。
im


此时,第二次迭代发现了{1 2} {1 5}的支持度只有1,低于阈值,故而舍弃,那么在随后的迭代中,若是出现{1 2} {1 5}的组合形式将不被考虑。



如上图,由L2获得候选集C3,那么此次迭代中的{1 2 3} { 1 3 5}哪去了?如刚才所言,{1 2} {1 5}的组合形式将不被考虑,由于这两个项集不可能成为频繁项集L3,此时L4不能构成候选集L4,即中止。
若是用一句化解释上述的过程,就是不断经过Lk的自身链接,造成候选集,而后在进行剪枝,除掉无用的部分。

上面看明白了下面这张图你就能看懂了。



算法伪代码

C[k]: 长度为 k的候选项集   L[k] : 长度为k的频繁项集      L[1] = {频繁项};   for (k = 1; L[k] !=∅; k++) do begin       C[k+1] = 由 L[k]产生的候选;       for each 数据库中的事务t  do         增长包含在t 中的全部候选C[k+1]的计数       L[k+1] = C[k+1]中知足 min_support的候选       end   return   L[1..k];
相关文章
相关标签/搜索