ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:212.09KB ,
资源ID:6957716      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6957716.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(频繁项集报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

频繁项集报告.docx

1、频繁项集报告目录第一章绪论 11.1研究背景和意义 11.2本文主要内容 2第二章频繁项集 32.1频繁项集概述 32.2频繁项集名词解析 32.3频繁项集分析指标 4第三章A-Priori算法 53.1 概述 53.2 Apriori核心算法过程 6第四章PCY算法 8第五章 A-Priori算法的java实现 9第六章Hadoop核心 116.1 HDFS 116.1.1 HDFS概述 116.1.2 NameNode和SecondNameNode 126.2 MapReduce 14第七章基于MapReduce的A-Priori算法实现 16第一章绪论1.1研究背景和意义购物篮模型的最早

2、应用源于真实购物篮的分析,也就是说,超时和连锁商店都会记录每个结账的购物篮的内容、这里的“项”指的是商店出售的不同商店,而“购物篮”指的是单个购物篮中所装的项集,通过发现频繁项集,零售商可以知道哪些商品通常会被顾客购买,那些共同购买的频度远高于各自独立购买所预期的频度的项对或项集。频繁项集分析的应用并不仅限于购物篮数据,同样的模型可以用于挖掘很多其他类型的数据。例如:(1) 关联概念这里的项是词,购物篮是文档。文档中的所有词就构成了对应购物篮中的项,如果要寻找多篇文章中共同出现的词汇集合,那么这些集合大都被高频常见词所占据,比如,我们想要寻找猫和狗的网页摘要,但是停用词“and”和“a”却占据

3、了频繁项集中的主要比例,如果忽略所有的停用词,那么我们希望在高频次对中发现某些能够代表联合概念的一部分词对。(2) 文档抄袭这里的项是文档,购物篮是句子。一篇文档中,如果包含某个句子,则任务该句子对应的购物篮中包含文档对应的项。本应用中,寻找那些在多个购物篮中共同出现的项对,如果发现这项的项对,也就是两篇文档有很多相同的句子,实际当中,设置一到两个句子相同都是抄袭发生的有力证据。(3) 生态标志物这里的项包括两种类型,一种是诸如基金或血蛋白之类的生物标志物,另一类是痢疾,而购物篮是某个病人的数据集,包括他的基因组合血生化分析数据,以及他的病史信息。频繁项集有某个疾病和一个或多个生物标志物构成,

4、它们组合在一起给出的疾病是一个检测建议。1.2本文主要内容本文对频繁项集的基本概念分析指标进行了解释说明,详细介绍了频繁项集中的A-Priori算法,PCY算法,并通过JAVA对A-Priori算法进行了实现。现在正处于大数据时代,候选项,频繁项等数以百万计,目前的单个计算机来计算频繁项集耗费时间较大,故在文章的最后引入的Hadoop的HDFS和MapReduce技术,对A-Priori进行了分布式的实现,大大的减少的计算时间。第二章频繁项集2.1频繁项集概述频繁项集最经典和常用的应用就是超市的购物篮分析。每个购物篮里有很多商品,每个商品都是一项元素,每个购物篮都是一个集合,所有购物篮就形成了

5、一个系列集合。分析哪些商品经常一起频繁出现在购物篮内,即找到频繁项集,然后,再分析其他商品与频繁项集的关系,即关联规则。2.2频繁项集名词解析频繁项:在多个集合中,频繁出现的元素/项,就是频繁项频繁项集:有一系列集合,这些集合有些相同的元素,集合中同时出现频率高的元素形成一个子集,满足一定阈值条件,就是频繁项集。极大频繁项集:元素个数最多的频繁项集合,即其任何超集都是非频繁项集。 k项集:k项元素组成的一个集合2.3频繁项集分析指标支持度:包含频繁项集F的集合的数目。可信度:频繁项F与某项j的并集 (即FU j )的支持度与频繁项集F的支持度的比值。兴趣度:FU j 可信度 与 包含 j 的集

6、合比率之间的差值。若兴趣度很高,则 频繁项集F会促进 j 的存在, 若兴趣度为负值,且频繁项集会抑制 j 的存在;若兴趣度为0,则频繁项集对j 无太大影响。第三章A-Priori算法3.1 概述目前暂时只集中关注频繁项对的发现。假如我们都有足够的内存用于所有项对计数,那么通过单便扫描读取购物篮文件就很简单。对于每个购物篮,我们使用一个双重循环就可以生成所有的项对,没生成一个相对,就给对应的计数器加一,最后检查所有项对的技术结果并找出那些超过支持度阀值S的项对,这就是频繁项对。然而,当项对的数目太多而无法再内存中对所有的项对技术时,上述的方法就不行了,A-Priori算法被设计成能够减少必须计数

7、的项对数目,代价是要对数据做两便遍而不是一遍扫描。Apriori算法是一种最有影响的挖掘布尔关联规则频繁项集的算法。其核心是基于两阶段频集思想的递推算法。该关联规则在分类上属于单维、单层、布尔关联规则。在这里,所有支持度大于最小支持度的项集称为频繁项集,简称频集。3.2 Apriori核心算法过程1A-priori算法的第一遍扫描第一次扫描中,要建立两张表。如有必要,第一章表要将项的名称转换为1到n之间的整数,另一张表则是一个计数数组,第i个数组元素是上述第i个项的出现次数。这些项的计数值的初始值是0.在读购物篮时,检查购物篮中的每个项并将其名称转换为一个整数,然后,将刚整数作为计数数组的下表

8、找到对应的数组元素,最后对该数组加12A-Priori算法两遍扫描之间的处理第一遍扫描之后,检查所有项的计数值,以确定哪些项构成单元素频繁项集,对于A-Priori算法的第二遍扫描,只给频繁项重新编号,编号的范围是1到m,此时的表格是一个下表为1到n的数组,如果第i项不频繁,则对于的第i个数组元素为0.否则为1到m之间的一个唯一整数。3A-Priori算法的第二遍扫描第二遍扫描中,对两个频繁项组成的所有项对计数。除非一个相对中的两个项都频繁,否则这个项对也不可能是频繁的。第二遍扫描的技术细节包括,对每个购物篮,在频繁项集表中检查哪些项是频繁的,通过一个双重循环生成所有的频繁项对,对每个频繁项对

9、,在存储计数值的数据结构中对应的计数值加1.最后,在第二遍扫描结束时,检查计数值结构以确定哪些项对是频繁项对。第四章PCY算法第一次扫描结束后,每个桶中都有一个计数值,记录所有哈希到该桶中的项对的数目值和。如果某个桶中的计数值不低于支持度阀值s,那么该桶称为频繁桶,对于哈希到某个频繁桶中的项对,可以假设其为频繁项对,但是如果某个桶中的计数值小于S,那么可以确定哈希到该桶内的项对都是不频繁的,即使它由两个频繁项构成,这个事实对第二遍扫描很有帮助。PCY两次扫描之间,哈希表被概括表示成一个位图,其中每一位表示一个桶。位为1表示对于的桶是频繁的,而0表示不频繁。因此每32位表示的整数替换成1位。如果

10、大部分桶都不频繁,那么可以预期第二遍扫描中所要计算的项对数目会远小于所以频繁项组成的项对数目。所以,在第二遍扫描中,PCY可以在处理某些数据集时避免内存抖动。第五章A-Priori算法的java实现具体代码见附录下面是一个实例分析以及在JAVA程序中的测试结果加入存在5个购物篮,购物篮的内容如下所示,支持度为3.下面是A-Priori的分析过程下面是对该实例在JAVA中运行结果显示第六章Hadoop核心6.1 HDFSHadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。6.1.1 HDFS概述HDFS:分布式文件系统,海量

11、数据的存储。高容错,可以部署在廉价的机器上,提供高吞吐量的数据访问,适合那些需要处理海量数据集的应用程序。支持以流的形式访问文件系统中的数据。HDFS主要特性:支持超大文件;检测和快速应对硬件故障;流式数据访问;简化的一致性模型;不适用下面特性:低延迟数据访问;大量小文件;多用户写入文件,修改文件;名字节点是分布式系统的管理者,负责管理文件系统命名空间,集群配置和数据块复制;数据节点是文件存储的基本单元,以数据块的形式保存了HDFS中文件的内容和数据块的数据校验信息;数据块:块的大小代表着系统读写操作的最小单位。对于用户来说是透明的。6.1.2 NameNode和SecondNameNodeN

12、ameNode是HDFS主从结构中主节点上运行的主要进程,指导主从结构中的从节点,数据节点执行底层的IO任务。NameNode维护这整个文件系统的目录树,文件/目录的元信息和文件的数据块索引,即每个文件的数据块列表。这些信息以两种形式存储在本地文件系统中,一种是命名空间镜像(File System Image文件系统镜像),另一种是命名空间镜像的编辑日志(Edit log)命名空间镜像保存着某一时刻的目录树,元信息和数据库索引等信息,后续对这些信息的修改,保存在编辑日志中。通过NameNode,客户端可以了解到数据块所在的数据节点信息。这些信息不保存在上面所述的文件系统中,NameNode每次

13、启动,都会动态的重建这些信息,这些信息构成了名字节点的第二类关系。运行时客户端通过名字节点获得上述信息,然后和数据节点进行数据交互,读写文件。名字节点还能够获取HDFS整体运行状态的一些信息,如系统的可用空间,已经使用的空间,各数据节点的当前状态。第二名字节点用于定期合并命名空间镜像和镜像编辑日志。每个集群都有一个第二名字节点,在大规模的部署条件下,一般第二名字节点也独占一台服务器。第二名字节点和名字节点的区别是它不接收和记录HDFS的任何实时变化,只是根据集群配置的时间间隔,不停的获取HDFS某一个时间点的命名空间镜像和镜像的编辑日志,合并成一个新的命名空间镜像,这个新的命名空间镜像就会上传

14、到名字节点,替换原来的命名空间镜像,并情况编辑日志。在数据节点上,HDFS的数据块,以linux文件系统上的普通文件进行保存。客户端进行文件操作时,先由名字节点告知客户端每个数据块驻留在哪个数据节点,然后客户端直接与数据节点守护进程进行通信,处理与数据块对应的本地文件,同时数据节点会和其他的数据节点进行通信,复制数据块,保证数据的冗余性。数据节点作为从节点,会不断地向名字节点报告,初始化时,每个数据节点将当前存储的数据块告知名字节点,后续数据节点工作过程中,数据节点仍然不断的更新名字节点,为之通过本地修改的相关信息,并接受来自名字节点的指令,创建移动或者删除本地磁盘上的数据块。6.2 MapR

15、educeMapReduce是一种分布式计算模型,由Google提出,主要用于搜索领域,解决海量数据的计算问题.MR由两个阶段组成:Map和Reduce,用户只需要实现map()和reduce()两个函数,即可实现分布式计算,非常简单。这两个函数的形参是key、value对,表示函数的输入信息。执行步骤:1. map任务处理1) 读取输入文件内容,解析成key、value对。对输入文件的每一行,解析成key、value对。每一个键值对调用一次map函数。2) 写自己的逻辑,对输入的key、value处理,转换成新的key、value输出。3) 对输出的key、value进行分区。4) 对不同分

16、区的数据,按照key进行排序、分组。相同key的value放到一个集合中。5) (可选)分组后的数据进行归约。2.reduce任务处理1) 对多个map任务的输出,按照不同的分区,通过网络copy到不同的reduce节点。2) 对多个map任务的输出进行合并、排序。写reduce函数自己的逻辑,对输入的key、value处理,转换成新的key、value输出。3) 把reduce的输出保存到文件中。第七章 基于MapReduce的A-Priori算法实现A-Priori 算法, 通过对数据库的多趟扫描来发现 所有的频繁项集, 在海量数据的条件下, 对数据库的扫描将会耗费大量的时间和内存。本文充

17、分利用云计算提供的分布式并行计算功能, 对A-priori 算法加以改进, 得到新的适用于云计算的频繁项集挖掘方法, 该方法使查找L k 和L k+ 1 的过程独立,能够提高海量数据挖掘的效率。新方法的基本思想如下:( 1) 把数据库分成规模相当的M 个数据子集,把数据子集发送到M 个站点;( 2) 每个站点扫描它的数据子集, 产生一个局部的候选k 项集的集合, 记作Cpk , 每个候选项集的支持度计数为1;( 3) 利用hash 函数把M 个站点的Cpk中相同的项集和它的支持度计数发送到R 个站点;( 4) R 个站点中的每个站点把相同项集的计数累加起来, 产生最后的实际支持度, 与最小支持

18、度计数min_sup比较, 确定局部频繁k 项集的集合L( 5) 把R 个站点的输出合并即产生全局频繁k项集的集合L k 。附录一:packagecom.cars;importjava.util.*;publicclassApriori privatedoubleminsup = 3;/ 最小支持度 privatedoubleminconf = 0.2;/ 最小置信度 / 注意使用IdentityHashMap,否则由于关联规则产生存在键值相同的会出现覆盖 privateIdentityHashMapruleMap = newIdentityHashMap(); private String

19、transSet = MONKEY, DONKEY, MAKE, MUCKY, COKIE;/ 事务集 / 可以根据需要从构造函数里传入 privateintitemCounts = 0;/ 候选1项目集大小,即字母的个数 privateTreeSet frequencySet = newTreeSet40;/ 频繁项集数组,0:代表1频繁集.,TreeSet()使用元素的自然顺序对元素进行排序 privateTreeSetmaxFrequency = newTreeSet();/ 最大频繁集 privateTreeSetcandidate = newTreeSet(); privateTre

20、eSetcandidateSet = newTreeSet40;/ 候选集数组0:代表1候选集 privateintfrequencyIndex; publicApriori() maxFrequency = newTreeSet(); itemCounts = counts();/ 初始化1候选集的大小6个 / 初始化其他两个 for (int i = 0; i itemCounts; i+) frequencySeti = newTreeSet();/初始化频繁项集数组 candidateSeti = newTreeSet();/初始化候选集数组 candidateSet0 = candi

21、date;/ 1候选集 /主函数入口 publicstaticvoid main(String args) Aprioriap = newApriori(); ap.run(); /方法运行 publicvoid run() int k = 1; /求1频繁集,保存到frequencySet0中 item1_gen(); do k+; canditate_gen(k); frequent_gen(k); while (!is_frequent_empty(k); frequencyIndex = k - 1; print_canditate(); maxfrequent_gen(); prin

22、t_maxfrequent(); ruleGen(); rulePrint(); /记录每个事务中的元素出现次数 publicdoublecount_sup(String x) int temp = 0; for (int i = 0; i transSet.length; i+) for (int j = 0; j x.length(); j+) if (transSeti.indexOf(x.charAt(j) = -1)/返回指定字符在此字符串中第一次出现处的索引,如果不作为一个字符串,返回-1 break; elseif (j = (x.length() - 1) temp+; ret

23、urn temp; /统计1候选集的个数a,b,c,d,e,f,return值为6 publicint counts() String temp1 = null; char temp2 = a; / 遍历所有事务集String 加入集合,set自动去重了 for (int i = 0; i transSet.length; i+) temp1 = transSeti; for (int j = 0; j = 3) frequencySet0.add(temp1);/1频繁集加入频繁项集数组,自动出去重复的集合 /求K候选集 publicvoidcanditate_gen(int k) Stri

24、ng y = , z = , m = ; char c1 ,c2 ;/ 这里减去2是因为需要对频繁项个数是k-1个频繁项的频繁项集进行便利 Iterator temp1 = frequencySetk - 2.iterator();/iterator迭代器,用于数组遍历 Iterator temp2 = frequencySet0.iterator();/遍历频繁项集数组,0:代表1频繁集 TreeSet h = newTreeSet(); while (temp1.hasNext() y = (String) temp1.next();/ c1 = y.charAt(y.length() -

25、 1);/返回指定y.length() - 1(数组的最后一个)的char值 while (temp2.hasNext() z = (String) temp2.next(); c2 = z.charAt(0);/c2=a,b,c,d,e,f /频繁集已经排序,所以不会出现重复的情况 if (c1 = c2) continue; else m = y + z;/m为字符串组合yz h.add(m);/m加入TreeSet temp2 = frequencySet0.iterator(); candidateSetk - 1 = h; / k候选集=k频繁集 publicvoidfrequent

26、_gen(int k) String s1 = ; Iterator ix = candidateSetk - 1.iterator();/遍历K候选集ix while (ix.hasNext() s1 = (String) ix.next();/ix中的值s1 if (count_sup(s1) = (3) /s1项集支持度大于最小支持度 frequencySetk - 1.add(s1);/s1加入K频繁集中 /判断频繁集为空 publicbooleanis_frequent_empty(int k) if (frequencySetk - 1.isEmpty() returntrue;

27、else returnfalse; /打印候选集频繁集 publicvoidprint_canditate() for (int i = 0; i frequencySet0.size(); i+) Iterator ix = candidateSeti.iterator(); Iteratoriy = frequencySeti.iterator(); System.out.print(候选集 + (i + 1) + :); while (ix.hasNext() System.out.print(String) ix.next() + t); System.out.print(n + 频繁集 + (i + 1) + :); while (iy.hasNext() System.out.print(String) iy.next() + t); System.out.println(); /求关联项集合 publicvoidmaxfrequent_gen() int i; for (i = 1; i frequencyIndex; i+) maxFrequency.addAll(frequencySeti); /打印频繁项集 publicvoidprint_maxfrequent() Iteratoriterator = maxFrequency.it

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1