Apriori算法实验报告材料.doc

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实用标准文案 文档大全 题 目 Apriori算法实现 学生姓名 学生学号 专业班级 指导教师 2014-12-27 实验一 Apriori算法实现 实验目的 加强对Apriori算法的理解; 锻炼分析问题、解决问题并动手实践的能力。 实验要求 使用一种你熟悉的程序设计语言,如C++或Java,实现Apriori算法,至少在两种不同的数据集上比较算法的性能。 实验环境 Win7 旗舰版 + Visual Studio 2010 语言:C++ 算法描述 Apriori算法说明 在Apriori算法中,寻找频繁项集的基本思想是: 简单统计所有含一个元素项目集出现的频率,找出不小于最小支持度的项目集, 即频繁项集; 从第二步开始,循环处理直到再没有最大项目集生成。循环过程是: 第k步中, 根据第k-1步生成的频繁(k-1)项集产生侯选k项集。根据候选k项集,算出候选k项集支持度,并与最小支持度比较, 找到频繁k项集。 下文中遇到的以下符号,分别代表相应的内容 k-itemset k项集 Lk    频繁k项集 Ck    侯选k项集 Apriori算法描述 数据结构说明 double minsup; //设置最小支持度 mapstring,int items_count; //统计各个项集的数目 vectorvectorstring datavec; //原始数据项集 vectorvectorstring candidatevec; //候选项集 vectorvectorstring frequentvec; //频繁项集 ofstream outFile; int round=1; //生成项集轮次 long trancount=0; //原始事务总数 //判断某个项目在某一个事务中是否存在,存在则值为1,反之为0 vectormapstring,bool bitmap; Apriori算法的第一步是简单统计所有含一个元素的项集出现的频率,来决定频繁1项集。在第k步,分两个阶段:1,用函数genCanItemsetK,通过第(k-1)步中生成的频繁(k-1)项集来生成侯选k项集;2.计算侯选k项集的支持度,并找出频繁k项集。 Apriori算法描述如下 getOriData(); //获取原始数据集,并统计事务个数 genCanItemset1(); //产生输出候选1项集 genFreItemset1(); //产生频繁项集 if(!frequentvec.empty()) //根据频繁1项集,执行程序 { do { genCanItemsetK(); //生成并输出候选k项集 genFreItemsetK(); //计算并输出频繁k项集 }while(!frequentvec.empty()); //频繁项集不为空,则循环继续 } 其中,产生候选k项集函数genCanItemsetK中涉及两个重要函数,项集合并函数mergeItem和剪枝函数cutNotCanItemsetK。 函数方法说明 //获取原始数据集,并统计事务个数 void getOriData(); //合并生成新的候选项集 vectorstring mergeItem(vectorstring vect1,vectorstring vect2,int round); //判断项集item是否已经存在候选项集集合items中,存在则返回1 int isExist(vectorstring item,vectorvectorstring items); //产生并输出候选1项集 void genCanItemset1(); //产生并输出频繁1项集 void genFreItemset1(); //产生并输出候选k-项集(k=2) void genCanItemsetK(); //产生并输出频繁k-项集(k=2) void genFreItemsetK(); //剪枝:剪去合并后项集中含有非频繁项集中的项 void cutNotCanItemsetK(vectorstring item); 实验截图 程序运行界面 输出文件截图1 输出文件截图1 实验总结 做完这个实验,有如下收获: 同一数据集,最小支持度越小,那么产生的频繁项集维数越高,程序运行时间越长; 更加深刻理解了:频繁子集的任何子集一定是频繁的,子集频繁父亲一定频繁; Apriori也存在缺点:第一在每一步产生侯选项目集时循环产生的组合过多,没有排除不应该参与组合的元素;第二,每次计算项集的支持度时,开销会随着数据的增多而成几何级增长。 附 程序源码 main.cpp #include iostrea

文档评论(0)

linlin921 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档