基于Hadoop的改进Apriori算法

一、Apriori算法性质

性质一:
候选的k元组集合Ck中,任意k-1个项组成的集合都来自于Lk.
性质二:
若k维数据项目集X={i1,i2,…,ik}中至少存在一个j∈X,使得|L(k-1)(j)|<k-1,则X不是频繁项集。即若Lk-1中有一个元素C包含一个项目i,使得|L(k-1)(j)|<k-1,则所有Lk-1与C中元素连接生成的候选k维数据项集不可能是频繁项目集。
  • eg.购物篮中的任意一个项,如果它没有出现在至少本篮中两个项组成的至少两个频繁项对中,那么它不会是本篮中频繁三元组中的一部分;
  • ??????宝宝觉得这里有问题:“……所有Lk-1与C中元素连接生成的……”,本宝宝觉得这里应该是“与i连接”而不是“与C中元素连接”。
  • 举个例子理解一下。
性质三:
候选k项集都是由两个频繁(k-1)项集进行连接产生的,并且这两个频繁k-1项集中的k-2个项目都是相同的。->候选k项集是由前k-2个项目相同的两个频繁k-1项集连接产生的。
  • 可以理解为候选频繁k项集是由频繁k-1项集再加上一个频繁项组成,而这个频繁项可以根据上述的性质二来缩小范围。

二、Apriori算法在hadoop下的改进

1、缺陷分析
  • 候选项集的支持度统计效率低
  • 候选项目集键值对产生数量大
2、算法改进步骤:
  • a、单词计数统计方法本身是用来统计未知的单词,能充分发挥优势和性能,可以用来计算候选1项集的支持度,从而生成频繁1项集:

    • 用MapReduce编程模型,将一个事物在数据模型中的行位置座位Map函数的键,以该事物的内容作为Map函数的输出;
    • 然后再以该事物所包含的候选项集作为键,以布尔值1作为输出;
    • 对每个键的所有1值进行累加操作,计算出各个候选1项集的支持度。
    • 根据设定的最小支持度生成频繁1项集。
  • b、将数据分割思想应用到计算候选项集的支持度计算中:

    由上述性质三可以建立MapReduce模型,将频繁k-1项集中相同的k-1个项目(即k-2项)作为Map函数的键,将不同的项目作为值,根据性质二缩小范围,Reduce函数对键值进行规约,相同键就会被规约到同一个Reduce中,从而对两个频繁k-1项集进行连接产生候选k项集。

原文地址:https://www.cnblogs.com/wust-zxl/p/6063604.html