当前位置:   article > 正文

Apriori算法解析_apriori算法结果分析

apriori算法结果分析

本文主要对Apriori算法进行解析,参考书籍《Introduction to Data Mining》

摘要: 本算法主要应用于关联分析问题(啤酒与尿布)。它使用基于支持度的剪枝技术,系统的控制候选集指数增长。

            关联规则是形如X->Y的蕴涵表达式,其中X和Y是不相交的项集,即X∩Y=∅。

            支持度(s):s(x->y)=count(X∪Y)/N                置信度(c): c(x->y)=count(X∪Y)/count(X)

            count(.)表示支持度计数。

  1.   Apriori算法的频繁项集产生
      通过例子来了解频繁项集是如何产生的,如下图:

    下面给出伪代码,并进行分析:
1:  K=1
2:  FK={i|i∈I∧σ({i})≥N*minsup}        {发现所有的频繁1-项集}
3: repeat
4:   k=k+1
5:   Ck=apriori-gen(Fk-1)       {产生候选项集}
6for 每个事务 t∈T do
7:      Ct=subset(Ck,t)      {识别属于t的所有候选}
8:      for 每个候选项集c∈Ct do
9:         σ(c)= σ(c)+1     {支持度技术增值}
10end for
11:   end for
12:   Fk={<!-- -->{c|c∈Ck∧σ(c)≥N*minsup}  {提取频繁K-项集}
13until Fk=14:Result=∪Fk

该伪代码中,Ck为候选K-项集的集合,而Fk为频繁K-项集的集合:

  • 该算法初始通过单遍扫描数据集,确定每个项的支持度。一旦完成这一步,就得到所有频繁1-项集的集合F1(1和2)
  • 接下来,用上一次迭代发现的频繁(k-1)-项集,产生新的候选k-项集(5),使用Apriori-gen 函数实现。
  • 为了对候选项支持度计数,算法需要再扫描一遍数据集(6~10)。使用子集函数(subset)确定包含在每个事务t中的Ck中的所有候选K-项集。
  • 计算候选项的支持度计数之后,算法将删除支持度计数少于minsup的所有候选项集(12)
  • 当没有新的频繁项集产生,算法结束。(13)

步骤5的函数主要有如下两个操作:

  1.  候选项集的产生
    采用Fk-1*Fk-1方法:如果要合并一对频繁(k-1)-项集,仅当它们的前k-2个项都相等。如下图:

    支持度计数:确定候选项剪枝步骤保留下来的每个候选项集出现的频繁程度。(由算法的6~11步实现)
    其中一种方法是枚举每个事务所包含的项集,并利用它们更新对应的候选项集的支持度。
    下图显示了枚举事务t{1,2,3,5,6}中所有3-项集的系统的方法:

    上图演示了通过从最左项到最右项依次指定项集的项,然而还必须确定每一个枚举的3-项集是否对应于一个候选项集,如果它与一个候选匹配,则相应候选项集的支持度计数增值。
    使用Hash树进行支持度计数
       
    主要思想:将候选集划分为不同的桶,并存放在Hash树中。在支持度计数期间,包含在事务中的项集也散列到相应的桶中,并将它与同一个桶中的候选项集进行匹配。

    对于一棵Hash树,树中的每个内部结点都使用Hash函数h(p)=p mod 3来确定应沿着当前结点的哪个分支向下。例如,项1,4和7将散列到相同的分支(最左)。下图展示了如何在Hash树的根节点散列一个事务:

    详细的Hash树方法介绍请见https://blog.csdn.net/owengbs/article/details/7626009
  2.  Apriori算法中规则的产生(基于高置信度)
    该算法使用的是一种逐层方法来产生关联规则,其中每层对应于规则后件中的项数。初始时,提取规则后件只含一个项的所有搞置信度规则,然后,使用这些规则来产生新的候选规则。如,如果{acd}-{b}和{abd}->{c}是两个高置信度规则,则可以通过合并这两个规则的后件产生候选规则{ad}->{bc}。下图是由频繁项集{a,b,c,d}产生关联规则的格结构。如果格中的任意节点具有低置信度,则可以立即剪掉该节点生成的整个子图(因为我们选取的规则一定具有高置信度)。

    下面给出Apriori算法中的规则产生的伪代码:

1: For 每一个频繁K-项集fk,k>=2 do
2:    H1={i|i∈f¬k} {规则的1-项后件}
3call ap-genrules(fk, H1)
4: end for

过程ap-genrules(fk,Hm)

1: k=|fk|   {频繁项集的大小}
2:m=|Hm|    {规则后件的大小}
3if k>m + 1 then
4:    Hm+1=apriori-gen(Hm)
5:    for 每个 hm+1∈Hm+1 do
6:       conf = σ(fk)/ σ(fk-hm+1)
7:       if conf >= minconf then
8:          output:规则(fk-hm+1)->hm+1
9:        else
10:          从Hm+1删除hm+1
11:       end if
12:    end for
13:    call ap-genrules(fk, Hm+1)
14: end if

3. 频繁项集的紧凑表示

  • 极大频繁项集:它的直接超集都不是频繁的
  • 闭频繁项集:项集X是闭的,如果它的直接超集都不具有和他相同的支持度计数。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/311637
推荐阅读
相关标签
  

闽ICP备14008679号