一种基于Hadoop并行挖掘海量数据关联规则的方法
技术领域
本发明涉及一种大数据挖掘与分析的方法,特别是一种基于Hadoop并行挖掘海量数据关联规则的方法。
背景技术
设D是事务数据集合,I是数据集D中数据项的集合,设A与B是I的子集,且关联规则是发现形如的蕴涵式。若规则在事务集D中成立,且 同时满足最小支持度阈值(min_sup)和最小置信度阈值(min_conf),则称规则为强规则。关联规则挖掘旨在发现D中项集之间的强规则。
关联规则最初提出的动机是针对购物篮分析问题提出的。通过对商店的顾客事务零售数量进行购物篮分析,发现顾客放入“购物篮”中的不同商品之间的关联,分析顾客的购物习惯,童儿帮助零售商了解哪些商品频繁的被顾客同时购买,从而帮助他们开发更好的营销策略。关联规则挖掘技术还广泛应用在金融行业企业、零售商业以及电子商务中,它可以成功预测客户需求、实现商品的捆绑销售,从而实现更大的利润。
在传统事务数据库关联规则挖掘中,现有技术普遍使用的方法是Apriori法,但是Apriori方法需要产生大量候选模式,并重复扫描数据来检查模式是否频繁,因此效率不高。在Apriori方法之后,针对如何提高Apriori算法的效率提出了很多变形来减少扫描数据的次数,其中,FP-Growth方法最优,可以不需要产生候选模式且仅需扫描数据库两次,从而大大提高了模式挖掘的效率。
近年来随着互联网、物联网、云计算等IT与通信技术的迅猛发展,因而信息社会已经进入了大数据时代。大数据的涌现不仅改变着人们的生活与工作方式、企业的运作模式,甚至还引起科学研究模式的根本性改变。根据国际管理咨询公司麦肯锡2011年的一份研究报告显示:世界商业巨头沃尔玛在全球有6000多个分店,它们每小时产生一百万条顾客购买事务记录,这些数据的总量约为2.5PB。另外一份来自Intel的研究报告显示,82%的商业交易数据都是需要进行分析。其中,一个非常有意义的工作就是挖掘零售商业交易数据,以发现其中的关联规则。然而,面对海量事务数据,传统的Apriori和FP-Grwoth等方法无法胜任这一工作。
发明内容
本发明的目的在于提供一种基于Hadoop并行挖掘海量数据关联规则的方法,采用该方法不仅可以对数据进行分析,发现其中的关联规则,而且适用于对PG及以上量级的数据分析。
实现本发明目的的技术方案是:一种基于Hadoop并行挖掘海量数据关联规则的方法,其特征在于:包括以下步骤:
1.1.设定关联规则挖掘的最小支持度阈值minSup和最小置信度阈值minConf;
1.2.设定用户选择的误差调节系数ζ(0<ζ<1),取关联规则挖掘的最大许可误差maxError=ζ*minSup;
1.3.根据大小k(k为大于0的整数)对待处理事务大数据BIGDATA按记录行数分割成一些列的数据块,记为SEG1,SEG2,…,SEGt。记d为数据分段SEGi(1≤i≤t)中事务数据的个数,有:
这里k′(k′≤k)表示BIGDATA中最后那个数据分段SEGt中所包含事务数据个数;
1.4.每一个数据分段SEGi由Hadoop集群中的一个Map任务处理,通过分析获得所有的重要模式及其支持数;
1.5.Hadoop集群中每个计算节点所有Map任务完成后,由Combine任务收集所有本地Map任务的输出结果,统计该节点所有模式的支持数,并根据最大许可误差maxError,将重要模式和模式支持数以<key,value>的形式作为Combine任务的输出;
1.6.Hadoop集群中所有计算节点Combine任务完成后,有Reduce任务收集集群中所有Combine任务的输出结果,统计所有模式的支持数。根据最小支持度阈值minSup,将所有频繁模式和模式支持数以<key,value>的形式作为Reduce任务的输出;
1.7.记Reduce任务输出的频繁模式集合为FIS,判断FIS中所包含的所有强规则。
而且所述的步骤1.4.包含以下步骤:
初始条件:已知BIGDATA中数据项全集A={A1,A2,…,Am};
2.1.依次将数据分段SEGi(1≤i≤t)中的各个事务数据向数据项全集A上投影,生成SEGi的事务向量矩阵MA,
其中,d为数据分块SEGi中事务数据的个数,m为数据项全集A中数据项的个数。矩阵中数据元素rpq表示SEGi中第p个事务是否包含数据项全集A中第q个数据项,因此有:
这里,Aq表示数据项全集A中第q个数据项,Tp表示数据分段SEGi中第p个事务数据;
2.2.对矩阵MA进行转置,生成新的矩阵MB=MA’;
2.3.根据最大许可误差maxError,从MB中生成所有重要模式,并将重要模式和模式支持数以<key,value>的形式作为Map任务的输出。而且所述的步骤2.3包含以下步骤:
初始条件:输入最大许可误差maxError和m*d矩阵MB;
3.1.定义频繁1项集缓存区;
3.2.依次读取矩阵MB中行向量,计算其中元素值为1的个数,记为freq(i);
3.3.如果freq(i)/d<maxError,则跳转3.2继续执行,否则执行步骤3.4;
3.4.将数据项全集A中第i个数据项A[i]写入频繁1项集缓存区;
3.5.将键值对<A[i],freq(i)>作为Map任务的输出;
3.6.跳转到步骤3.2,直到循环结束;
3.7.根据频繁1项集、数据项全集A和矩阵MB继续输出长度大于1的重要模式。
而且所述的步骤3.7包含以下步骤:
初始条件:输入最大许可误差maxError、频繁1项集、数据项全集A和m*d矩阵MB;
4.1.定义集合1-List和2-List,并初始化为空;
4.2.复制频繁1项集中数据到1-List;
4.3.如果1-List为空,则退出,否则执行步骤4.4;
4.4.依次从集合1-List中读取一个数据项到X;
4.5.如果X为空,则跳转到步骤4.17继续执行,否则执行步骤4.6;
4.6.依次从频繁1项集中读取一个数据项到Y;
4.7.如果Y为空,则跳转到步骤4.4继续执行,否则执行步骤4.8;
4.8.判断数据项Y是否属于X,如果是则跳转到步骤4.6继续执行,否则执行步骤4.9;
4.9.获得模式X∪Y;
4.10.判断模式X∪Y所有长度减1的子模式是否都包含在集合1-List中,如果否则跳转到步骤4.6继续执行,否则执行步骤4.11;
4.11.查询模式X∪Y所包含所有数据项在数据项集A中的位置序号;
4.12.根据模式X∪Y所包含数据项在数据项集A中的位置序号,从矩阵MB中获得相应行所对应的向量,并以二进制形式表示;
4.13.对模式X∪Y所包含数据项对应的二进制执行按位与操作,并统计结果中包含1的个数,记为freq(X∪Y);
4.14.判断freq(X∪Y)/d是否不小于maxError,如果否,则跳转到步骤4.6继续执行,否则执行步骤4.15;
4.15.将键值对<X∪Y,freq(X∪Y)>作为Map任务的输出;
4.16.将X∪Y添加到集合2-List中,跳转到步骤4.6继续执行;
4.17.清空集合1-List,将集合2-List中数据项复制到集合1-List,清空集合2-List,然后跳转到步骤4.3继续执行。
进一步的技术方案可以是Hadoop集群中每个计算节点所有Map任务完成后,由Combine任务收集所有本地Map任务的输出结果,统计该节点所有模式的支持数,并根据最大许可误差maxError,将重要模式和模式支持数以<key,value>的形式作为Combine任务的输出。
而且Hadoop集群中所有计算节点Combine任务完成后,有Reduce任务收集集群中所有Combine任务的输出结果,统计所有模式的支持数,根据最小支持度阈值minSup,将所有频繁模式和模式支持数以<key,value>的形式作为Reduce任务的输出。
进一步的技术方案也可以是记Reduce任务输出的频繁模式集合为FIS,判断FIS中所包含的所有强规则。
而且步骤7包含以下步骤:
初始条件:已知频繁模式集合FIS,和最小置信度阈值minConf;
8.1.依次从集合FIS中读取一个模式,记为X,其支持数记为freq(X);
8.2.如果X为空,则结束,否则执行步骤8.3;
8.3.依次获取X的一个子模式,记为Y;
8.4.如果Y为空,则跳转到步骤8.1继续执行,否则执行步骤8.5;
8.5.从集合FIS中查询模式Y的支持数,记为freq(Y);
8.6.如果freq(X)/freq(Y)≥minConf,则输出强规则
8.7.跳转到步骤8.3继续执行。
9.根据权利要求1所述的一种基于Hadoop并行挖掘海量数据关联规则的方法,其特征在于:所述的Hadoop是Hadoop分布式系统基础架构。
本发明的优点在于基于Hadoop框架构建,Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算;因此采用该方法不仅可以对数据进行分析,发现其中的关联规则,而且适用于对PG及以上量级的数据分析。
附图说明
图1是基于Hadoop并行挖掘海量数据关联规则的方法逻辑步骤流程图;
图2是步骤1.4的逻辑步骤流程图;
图3是步骤2.3的逻辑步骤流程图;
图4是步骤3.7的逻辑步骤流程图。
具体实施方式
一种大数据挖掘与分析的方法,特别是一种基于Hadoop并行挖掘海量数据关联规则的方法,其特征在于:包括以下步骤:
1.1.设定关联规则挖掘的最小支持度阈值minSup和最小置信度阈值minConf;
1.2.设定用户选择的误差调节系数ζ(0<ζ<1),取关联规则挖掘的最大许可误差maxError=ζ*minSup;
1.3.根据大小k(k为大于0的整数)对待处理事务大数据BIGDATA按记录行数分割成一些列的数据块,记为SEG1,SEG2,…,SEGt。记d为数据分段SEGi(1≤i≤t)中事务数据的个数,有:
这里k’(k′≤k)表示BIGDATA中最后那个数据分段SEGt中所包含事务数据个数;
1.4.每一个数据分段SEGi由Hadoop集群中的一个Map任务处理,通过分析获得所有的重要模式及其支持数;
1.5.Hadoop集群中每个计算节点所有Map任务完成后,由Combine任务收集所有本地Map任务的输出结果,统计该节点所有模式的支持数,并根据最大许可误差maxError,将重要模式和模式支持数以<key,value>的形式作为Combine任务的输出;
1.6.Hadoop集群中所有计算节点Combine任务完成后,有Reduce任务收集集群中所有Combine任务的输出结果,统计所有模式的支持数。根据最小支持度阈值minSup,将所有频繁模式和模式支持数以<key,value>的形式作为Reduce任务的输出;
1.7.记Reduce任务输出的频繁模式集合为FIS,判断FIS中所包含的所有强规则。
而且所述的步骤1.4.包含以下步骤:
初始条件:已知BIGDATA中数据项全集A={A1,A2,…,Am};
2.1.依次将数据分段SEGi(1≤i≤t)中的各个事务数据向数据项全集A上投影,生成SEGi的事务向量矩阵MA,
其中,d为数据分块SEGi中事务数据的个数,m为数据项全集A中数据项的个数。矩阵中数据元素rpq表示SEGi中第p个事务是否包含数据项全集A中第q个数据项,因此有:
这里,Aq表示数据项全集A中第q个数据项,Tp表示数据分段SEGi中第p个事务数据;
2.2.对矩阵MA进行转置,生成新的矩阵MB=MA’;
2.3.根据最大许可误差maxError,从MB中生成所有重要模式,并将重要模式和模式支持数以<key,value>的形式作为Map任务的输出。而且所述的步骤2.3包含以下步骤:
初始条件:输入最大许可误差maxError和m*d矩阵MB;
3.1.定义频繁1项集缓存区;
3.2.依次读取矩阵MB中行向量,计算其中元素值为1的个数,记为freq(i);
3.3.如果freq(i)/d<maxError,则跳转3.2继续执行,否则执行步骤3.4;
3.4.将数据项全集A中第i个数据项A[i]写入频繁1项集缓存区;
3.5.将键值对<A[i],freq(i)>作为Map任务的输出;
3.6.跳转到步骤3.2,直到循环结束;
3.7.根据频繁1项集、数据项全集A和矩阵MB继续输出长度大于1的重要模式。
而且所述的步骤3.7包含以下步骤:
初始条件:输入最大许可误差maxError、频繁1项集、数据项全集A和m*d矩阵MB;
4.1.定义集合1-List和2-List,并初始化为空;
4.2.复制频繁1项集中数据到1-List;
4.3.如果1-List为空,则退出,否则执行步骤4.4;
4.4.依次从集合1-List中读取一个数据项到X;
4.5.如果X为空,则跳转到步骤4.17继续执行,否则执行步骤4.6;
4.6.依次从频繁1项集中读取一个数据项到Y;
4.7.如果Y为空,则跳转到步骤4.4继续执行,否则执行步骤4.8;
4.8.判断数据项Y是否属于X,如果是则跳转到步骤4.6继续执行,否则执行步骤4.9;
4.9.获得模式X∪Y;
4.10.判断模式X∪Y所有长度减1的子模式是否都包含在集合1-List中,如果否则跳转到步骤4.6继续执行,否则执行步骤4.11;
4.11.查询模式X∪Y所包含所有数据项在数据项集A中的位置序号;
4.12.根据模式X∪Y所包含数据项在数据项集A中的位置序号,从矩阵MB中获得相应行所对应的向量,并以二进制形式表示;
4.13.对模式X∪Y所包含数据项对应的二进制执行按位与操作,并统计结果中包含1的个数,记为freq(X∪Y);
4.14.判断freq(X∪Y)/d是否不小于maxError,如果否,则跳转到步骤4.6继续执行,否则执行步骤4.15;
4.15.将键值对<X∪Y,freq(X∪Y)>作为Map任务的输出;
4.16.将X∪Y添加到集合2-List中,跳转到步骤4.6继续执行;
4.17.清空集合1-List,将集合2-List中数据项复制到集合1-List,清空集合2-List,然后跳转到步骤4.3继续执行。
进一步的技术方案可以是Hadoop集群中每个计算节点所有Map任务完成后,由Combine任务收集所有本地Map任务的输出结果,统计该节点所有模式的支持数,并根据最大许可误差maxError,将重要模式和模式支持数以<key,value>的形式作为Combine任务的输出。
而且Hadoop集群中所有计算节点Combine任务完成后,有Reduce任务收集集群中所有Combine任务的输出结果,统计所有模式的支持数,根据最小支持度阈值minSup,将所有频繁模式和模式支持数以<key,value>的形式作为Reduce任务的输出。
进一步的技术方案也可以是记Reduce任务输出的频繁模式集合为FIS,判断FIS中所包含的所有强规则。
而且步骤7包含以下步骤:
初始条件:已知频繁模式集合FIS,和最小置信度阈值minConf;
8.1.依次从集合FIS中读取一个模式,记为X,其支持数记为freq(X);
8.2.如果X为空,则结束,否则执行步骤8.3;
8.3.依次获取X的一个子模式,记为Y;
8.4.如果Y为空,则跳转到步骤8.1继续执行,否则执行步骤8.5;
8.5.从集合FIS中查询模式Y的支持数,记为freq(Y);
8.6.如果freq(X)/freq(Y)≥minConf,则输出强规则
8.7.跳转到步骤8.3继续执行。
9.根据权利要求1所述的一种基于Hadoop并行挖掘海量数据关联规则的方法,其特征在于:所述的Hadoop是Hadoop分布式系统基础架构。
本方法是基于Hadoop框架构建,Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算;因此采用该方法不仅可以对数据进行分析,发现其中的关联规则,而且适用于对PG及以上量级的数据分析。