zoukankan      html  css  js  c++  java
  • 数据挖掘(七):Apriori算法:频繁模式挖掘

    1 算法思想

    算法使用频繁项集性质的先验知识。Apriori使用一种称作逐层搜索的迭代方法,k项集用于探索(k+1)项集。首先,通过扫描数据库,累积每个项的计数,并收集满足最小支持度的项,找出频繁1项集的集合。该集合记作L1.然后,L1用于找频繁2项集的集合L2,L2用于找L3,如此迭代,直到不能再找到频繁k项集。找每个Lk需要一次数据库全扫描。

    Apriori性质可用于压缩搜索空间,提高频繁项集逐层产生的效率。

    Apriori性质:频繁项集的所有非空子集也必是频繁的。

    Apriori算法主要包括连接步和剪枝步两步组成。在连接步和剪枝步中采用Apriori性质可以提高算法的效率。

    1.1 连接步

    此步骤用于从频繁k-1项集集合产生候选k项集集合。

    为了计算出Lk,根据Apriori性质,需要从Lk-1选择所有可连接的对连接产生候选k项集的集合,记作Ck。假设项集中的项按字典序排序,则可连接的对是指两个频繁项集仅有最后一项不同。例如,若Lk-1的元素l1和l2是可连接的,则l1和l2两个项集的k-1个项中仅有最后一项不同,这个条件仅仅用于保证不产生重复。

    1.2 剪枝步

    此步骤用于快速缩小Ck包含的项集数目。

    Apriori性质可得,任何非频繁的(k-1)项集都不是频繁k项集的子集,因此,如果Ck中的一条候选k项集的任意一个(k-1)项子集不在Lk-1中,则这条候选k项集必定不是频繁的,从而可以从Ck中删除。这种子集测试可以使用当前所有频繁项集的散列树快速完成。

    Ck是Lk的超集,经过子集测试压缩Ck后,即可扫描数据库,确定Ck中每个候选的计数,从而确定Lk。

    2 伪代码

    算法:Apriori, 使用逐层迭代方法基于候选产生找出频繁项集
    输入:
        D:事务数据库;
        min_sup:最小支持度计数阈值。
    输出:  L:D中的频繁项集。
    方法:
    1)  L1 = find_frequent_1_itemsets(D);
    2)  for (k = 2; Lk-1 ≠ ∅; k++) {
    3)    Ck = aproiri_gen(Lk-1,min_sup);
    4)    for each transaction t∈D{ //扫描D用来计数
    5)      Ct = subset(Ck,t); //找出事务t中包含的所有候选k项集,
    6)      for each candidate c∈Ct //对事务t包含的每个候选k项集的计数加一
    7)        c.count++;
    8)  }
    9)    Lk={c∈Ck | c.count ≥ min_sup}
    10) }
    11) return L = ∪kLk;
    procedure apriori_gen(Lk-1: frequent (k-1)-itemset; min_sup: support)
    1) for each itemset l1∈Lk-1
    2)   for each itemset l2∈Lk-1
    3)     if (l1[1]=l2[1])∧...∧(l1[k-2]=l2[k-2])∧(l1[k-1]<l2[k-2]) then {
    4)       c = l1 连接 l2; //连接步: 产生candidates
    5)       if has_infrequent_subset(c,Lk-1) then
    6)         delete c; // 剪枝步: 移除非频繁的cadidate
    7)       else add c to Ck;
    8) }
    9) return Ck;
    procedure has_infrequent_subset(c:candidate k-itemset; Lk-1:frequent (k-1)-itemset)
    // 使用先验知识
    1) for each (k-1)-subset s of c
    2)   if c∉Lk-1 then
    3)     return TRUE;
    4) return FALSE;

    其中,Lk-1表示频繁k-1项集。

    3 实现


    4 示例


    参考资料:

    《数据挖掘:概念与技术》(第二版)

  • 相关阅读:
    Linux学习之二——档案与目录的属性和权限
    Linux学习之一——开机必备知识
    阿里云实战之二(mysql+phpmyadmin)
    阿里云实战之一(必备程序安装)
    简要揭秘在线代码编辑器
    磕磕碰碰的Chrome之plugin开发
    Oracle导出的sql执行出错
    Spring学习(八)
    Spring学习(七)
    Spring学习(六)
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3212327.html
Copyright © 2011-2022 走看看