Apriori算法

1.问题描述

是一个文字集合,称作项集,D是一个事务集合,其中每个事务T是一个项目集合。与每个事务相关联的是一个唯一的标识符,称为TID。如果X属于T,则一个事务T包含X(I中的一些项的集合)。关联规则的形式是

如果在D中包含X的事务中有c%的事务也包含Y,则规则X => Y在事务集D中具有可信度c。如果在D中s%的事务包含X并Y,则规则X => Y在事务集D中具有支持度s

  • 项集:项的集合,项可以是商品,那么项集就是商品的集合。
  • 支持度:数据集中包含该项集的记录所占的比例,也就是该项集在数据集中的出现频率,用以衡量项集的频繁程度。
  • 可信度:又称置信度,是针对关联规则来定义的,表示某项集在指定条件下的出现概率,用以衡量物品之间的关系。

 给定一组事务D,挖掘关联规则的问题是生成所有支持度和可信度分别大于用户指定的最小支持度(minsup)和最小可信度(minconf)的关联规则。

 发现所有关联规则的问题可以分解为两个子问题。 

(1)查找事务支持高于最小支持的所有项目集。对项目集的支持是包含该项目集的事务的数量。具有最小支持的项目集称为大项目集,其他所有小项目集称为小项目集。

(2)使用大型项目集生成所需的规则。

2.发现大项目集

        发现大型项目集的算法会对数据进行多次传递。在第一轮中,我们计算单个项目的支持度,并确定它们中哪些是大的,即具有最小的支持度。在后续的每次传递中,我们从一个在前一次传递中发现很大的项目集种子集开始。我们使用这个种子集来生成新的可能较大的项目集,称为候选项目集,并在传递数据期间计算对这些候选项目集的实际支持。在传递结束时,我们确定哪些候选项目集实际上比较大,它们将成为下一个传递的种子。这个过程将继续下去,直到没有找到新的大型项集为止。

        Apriori和AprioriTid算法通过只使用在前一次传递中发现的大的项目集,而不考虑数据库中的事务,来生成要在一次传递中计数的候选项目集。基本的直觉是,大项目集的任何子集都必须是大的。因此,有k个项目的候选项目集可以通过合并有 k-1个项目的大型项目集,并删除那些包含任何较小子集的项目集来生成。这个过程生成的候选项目集的数量要少得多。

        AprioriTid算法有一个额外的属性,即在第一次遍历之后,计算候选项目集的支持时不完全用数据库计算。相反,为了达到这个目的,使用了前一次传递中使用的候选项目集的编码。在后面的过程中,这种编码的大小可以变得比数据库小得多,从而节省了大量的读取时间。

2.1 符号

        我们假设每个事务中的条目都按照它们的字典顺序进行排序。如果数据库D是标准化的,并且每个数据库记录都是<TID, item>对,其中TID是相应事务的标识符。我们称项目集中的项目数为其size,并称size为k的项目集为k-itemset

如果一个k-itemset c,c = X  Y 且 Y 是一个 m-itemset, 则Y 是X的一个 m-扩展。与每个项目集关联的是一个count字段,用于存储对该项目集的支持。

2.2 Apriori算法

        该算法的第一次遍历只是计算项的出现次数,以确定大型的1-item集。之后的传递,比如k次传递时,包含两个阶段。首先,使用apriori-gen方法在第k-1次遍历中找到的大项目集L_k-1被用来生成候选项目集C_k;接下来,扫描数据库,计算C_k中候选人的支持度。

2.2.1 Apriori候选生成

Apriori-gen函数的参数为L_k-1,它为所有大型(k-1)项目集的集合。它返回所有k-item集合的超集。

例如:L_3 = {{1,2,3},{1,2,4},{1,3,4},{1,3,5},{2,3,4},连接完成后C_4为{{1,2,3,4},{1,3,4,5}} 。在执行剪枝操作后,因为L_3中没有{1,4,5},所以结果只剩下{1,2,3,4}。

2.2.2 Subset Function

        候选项目集C_k存储在哈希树中。哈希树的节点要么包含项目集列表(叶节点),要么包含哈希表(内部节点)。在内部节点中,哈希表的每个桶都指向另一个节点。哈希树的根被设计为深度1。深度d处的内部节点指向深度d +1处的节点。项目集存储在叶中。当我们添加一个项目集c时,我们从根结点开始,并沿着树向下,直到到达一个叶结点。在深度d的内部节点上,我们通过对项目集的第d项应用哈希函数来决定遵循哪个分支。所有节点最初都创建为叶节点。当叶子节点中的项目集数量超过指定的阈值时,叶子节点将转换为内部节点。

        从根节点开始,子集函数寻找事务 t 中包含的所有候选对象,如下所示。如果在叶节点上,则查找 中包含叶节点中的哪些项目集,并将对它们的引用添加到回答集中。如果我们在一个内部节点,并且通过对 i 进行哈希到达了它,那么我们就对 中的 之后的每一项进行哈希,然后递归地将这个过程应用到相应桶中的节点上。对于根节点,我们对t中的每一项进行哈希。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值