数据挖掘十大经典算法(四) The Apriori algorithm

Apriori algorithm是关联规则里一项基本算法。关联规则的目的就是在一个数据集中找出项与项之间的关系,也被称为购物篮分析 (Market Basket analysis),eg:“尿布和啤酒”。


关联规则:关联规则是形如XY的蕴涵式,表示通过X可以推导得到Y。

支持度:事件A和事件B同时发生的概率。

置信度:发生事件A的基础上发生事件B的概率,即条件概率。

强规则:同时满足最小支持度和最小置信度的规则。

频繁集:支持度大于等于最小支持度的的项集,表示为L(k)。频繁集的子集一定是频繁集。

频繁k项集:包含k个元素的事件A。

《数据挖掘十大经典算法(四) The Apriori algorithm》

挖掘过程:

第一,找出所有的频繁项集;

第二,由频繁项集产生强规则。

Apriori算法采用连接步和剪枝步两种方式来找出所有的频繁项集。

1)  连接步

为找出Lk(所有的频繁k项集的集合),通过将Lk-1(所有的频繁k-1项集的集合)与自身连接产生候选k项集的集合。候选集合记作Ck。设l1l2Lk-1中的成员。记li[j]表示li中的第j项。假设Apriori算法对事务或项集中的项按字典次序排序,即对于(k-1)项集lili[1]<li[2]<……….<li[k-1]。将Lk-1与自身连接,如果(l1[1]=l2[1])&&( l1[2]=l2[2])&&……..&& (l1[k-2]=l2[k-2])&&(l1[k-1]<l2[k-1]),那认为l1l2是可连接。连接l1l2 产生的结果是{l1[1],l1[2],……,l1[k-1],l2[k-1]}

2)  剪枝步

CKLK的超集,也就是说,CK的成员可能是也可能不是频繁的。通过扫描所有的事务(交易),确定CK中每个候选的计数,判断是否小于最小支持度计数,如果不是,则认为该候选是频繁的。为了压缩Ck,可以利用Apriori性质:任一频繁项集的所有非空子集也必须是频繁的,反之,如果某个候选的非空子集不是频繁的,那么该候选肯定不是频繁的,从而可以将其从CK中删除。

Tip:为什么要压缩CK呢?因为实际情况下事务记录往往是保存在外存储上,比如数据库或者其他格式的文件上,在每次计算候选计数时都需要将候选与所有事务进行比对,众所周知,访问外存的效率往往都比较低,因此Apriori加入了所谓的剪枝步,事先对候选集进行过滤,以减少访问外存的次数。)

Apriori核心算法过程如下:

  1. 过单趟扫描数据库D计算出各个1项集的支持度,得到频繁1项集的集合。
  2. 连接步:为了生成,预先生成,由2个只有一个项不同的属于的频集做一 个(k-2)JOIN运算得到的。
  3. 剪枝步:由于是的超集,所以可能有些元素不是频繁的。在 潜在k项集的某个子集不是中的成员是,则该潜在频繁项集不可能是频繁的可以从中移去。
  4. 通过 单趟扫描数据库D,计算中各个项集的支持度,将中不满足支持度的项集去掉形成。

  通过迭代循环,重复步骤2~4,直到有某个r值使得为空,这时算法停止。在剪枝步中的每个元 素需在交易数据库中进行验证来决定其是否加入,这里的验证过程 是算法性能的一个瓶颈。这个方法要求多次扫描可能很大的交易数据库。可能产生大量的候选集,以及可能需要重复扫描数据库,是Apriori算法的两大缺点。

    原文作者:常用算法
    原文地址: https://blog.csdn.net/zd836614437/article/details/50943776
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞