Apriori算法总结

      Apriori algorithm是关联规则里一项基本算法。是由Rakesh Agrawal和Ramakrishnan Srikant两位博士在1994年提出的关联规则挖掘算法。关联规则的目的就是在一个数据集中找出项与项之间的关系,也被称为购物蓝分析 (Market Basket analysis),因为“购物蓝分析”很贴切的表达了适用该算法情景中的一个子集。

      Apriori(先验的,推测的)算法应用广泛,可用于消费市场价格分析,猜测顾客的消费习惯;网络安全领域中的入侵检测技术;可用在用于高校管理中,根据挖掘规则可以有效地辅助学校管理部门有针对性的开展贫困助学工作;也可用在移动通信领域中,指导运营商的业务运营和辅助业务提供商的决策制定。

  关于这个算法有一个非常有名的故事:"尿布和啤酒"。故事是这样的:美国的妇女们经常会嘱咐她们的丈夫下班后为孩子买尿布,而丈夫在买完尿布后又要顺 手买回自己爱喝的啤酒,因此啤酒和尿布在一起被购买的机会很多。这个举措使尿布和啤酒的销量双双增加,并一直为众商家所津津乐道。

1、基本概念

      对于A->B

      ①支持度:P(A ∩ B),既有A又有B的概率

      ②置信度:

      P(B|A),在A发生的事件中同时发生B的概率 p(AB)/P(A)     例如购物篮分析:牛奶 ⇒ 面包

      例子:[支持度:3%,置信度:40%]

      支持度3%:意味着3%顾客同时购买牛奶和面包

      置信度40%:意味着购买牛奶的顾客40%也购买面包

      ③如果事件A中包含k个元素,那么称这个事件A为k项集事件A满足最小支持度阈值的事件称为频繁k项集。

      ④同时满足最小支持度阈值和最小置信度阈值的规则称为强规则


2、算法简述:

      Apriori算法是一种最有影响的挖掘布尔关联规则频繁项集的算法Apriori使用一种称作逐层搜索的迭代方法,“K-1项集”用于搜索“K项集”。

首先,找出频繁“1项集”的集合,该集合记作L1。L1用于找频繁“2项集”的集合L2,而L2用于找L3。如此下去,直到不能找到“K项集”。找每个Lk都需要一次数据库扫描。

      核心思想是:连接步和剪枝步。连接步是自连接,原则是保证前k-2项相同,并按照字典顺序连接。剪枝步,是使任一频繁项集的所有非空子集也必须是频繁的。反之,如果某个候选的非空子集不是频繁的,那么该候选肯定不是频繁的,从而可以将其从CK中删除。

      简单的讲,1、发现频繁项集,过程为(1)扫描(2)计数(3)比较(4)产生频繁项集(5)连接、剪枝,产生候选项集   重复步骤(1)~(5)直到不能发现更大的频集

      Apriori算法是反单调的,即一个集合如果不能通过测试,则该集合的所有超集也不能通过相同的测试。(剪枝步核心)


3.算法示例



      1.过单趟扫描数据库D计算出各个1项集的支持度,得 到频繁1项集的集合。

      2.连接步:为了生成,预先生成,由2个只有一个项不同的属于的频集做一 个(k-2)JOIN运算得到的。

      3.剪枝步:由于是的超集,所以可能有些元素不是频繁的。在 潜在k项集的某个子集不是中的成员是,则该潜在频繁项集不可能是频繁的可以从中移去。

      4.通过 单趟扫描数据库D,计算中各个项集的支持度,将中不满足支持度的项集去掉形成。

      5.通过迭代循环,重复步骤2~4,直到有某个r值使得为空,这时算法停止。


4.Apriori的缺点

      从以上的算法执行过程可以看到Apriori算法的缺点:

      第一:在每一步产生侯选项目集时循环产生的组合过多,没有排除不应该参与组合的元素;(空间、时间)

      第二:每次计算项集的支持度时,都对数据库D中的全部记录进行了一遍扫描比较,如果是一个大型的数据库的话,这种扫描比较会大大增加计算机系统的I/O开销。而这种代价是随着数据库的记录的增加呈现出几何级数的增加。(时间)


5.Apriori的优化改进(未完成,待补充)

      1.基于hash表的项集计数(将每个项集通过相应的hash函数映射到hash表中的不同的桶中,这样可以通过将桶中的项集技术跟最小支持计数相比较先淘汰一部分项集)
      2.事务压缩(压缩进一步迭代的事务数)(不包含任何k-项集的事务不可能包含任何(k+1)-项集,这种事务在下一步的计算中可以加上标记或删除)
      3.基于划分( D中的任何频繁项集必须作为局部频繁项集至少出现在一个部分中。
            第一次扫描:将数据划分为多个部分并找到局部频繁项集
            第二次扫描:评估每个候选项集的实际支持度,以确定全局频繁项集。)
      4.基于采样(在给定数据的一个子集挖掘)
            基本思想:选择原始数据的一个样本,在这个样本上用Apriori算法挖掘频繁模式
            通过牺牲精确度来减少算法开销,为了提高效率,样本大小应该以可以放在内存中为宜,可以适当降低最小支持度来减少遗漏的频繁模式
            可以通过一次全局扫描来验证从样本中发现的模式
            可以通过第二此全局扫描来找到遗漏的模式

6.参考文档:


      1.数据挖掘算法-Apriori Algorithm(关联规则)
      2.Apriori算法详解之【一、相关概念和核心步骤】
      3.大数据经典算法Apriori讲解


  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值