1 / 23
文档名称:

apriori算法实验报告材料.doc

格式:doc   大小:110KB   页数:23页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

apriori算法实验报告材料.doc

上传人:511709291 2019/7/22 文件大小:110 KB

下载得到文件列表

apriori算法实验报告材料.doc

文档介绍

文档介绍:题目Apriori算法实现学生姓名学生学号专业班级指导教师2014-12-27实验一Apriori算法实现实验目的加强对Apriori算法的理解;锻炼分析问题、解决问题并动手实践的能力。实验要求使用一种你熟悉的程序设计语言,如C++或Java,实现Apriori算法,至少在两种不同的数据集上比较算法的性能。实验环境Win7旗舰版+VisualStudio2010语言:C++算法描述Apriori算法说明在Apriori算法中,寻找频繁项集的基本思想是:简单统计所有含一个元素项目集出现的频率,找出不小于最小支持度的项目集,即频繁项集;从第二步开始,循环处理直到再没有最大项目集生成。循环过程是:第k步中,根据第k-1步生成的频繁(k-1)项集产生侯选k项集。根据候选k项集,算出候选k项集支持度,并与最小支持度比较,找到频繁k项集。下文中遇到的以下符号,分别代表相应的内容k-itemset k项集 Lk 频繁k项集Ck 侯选k项集Apriori算法描述数据结构说明doubleminsup;//设置最小支持度map<string,int>items_count;//统计各个项集的数目vector<vector<string>>datavec;//原始数据项集vector<vector<string>>candidatevec;//候选项集vector<vector<string>>frequentvec;//频繁项集ofstreamoutFile;intround=1;//生成项集轮次longtrancount=0;//原始事务总数//判断某个项目在某一个事务中是否存在,存在则值为1,反之为0vector<map<string,bool>>bitmap;Apriori算法的第一步是简单统计所有含一个元素的项集出现的频率,来决定频繁1项集。在第k步,分两个阶段:1,用函数genCanItemsetK,通过第(k-1)步中生成的频繁(k-1)项集来生成侯选k项集;,并找出频繁k项集。Apriori算法描述如下getOriData(); //获取原始数据集,并统计事务个数genCanItemset1();//产生输出候选1项集genFreItemset1();//产生频繁项集 if(!())//根据频繁1项集,执行程序 { do { genCanItemsetK(); //生成并输出候选k项集 genFreItemsetK(); //计算并输出频繁k项集}while(!());//频繁项集不为空,则循环继续 }其中,产生候选k项集函数genCanItemsetK中涉及两个重要函数,项集合并函数mergeItem和剪枝函数cutNotCanItemsetK。函数方法说明//获取原始数据集,并统计事务个数voidgetOriData();//合并生成新的候选项集vector<string>mergeItem(vector<string>vect1,vector<string>vect2,intround);//判断项集item是否已经存在候选项集集合items中,存在则返回1intisExist(vector<string>item,vector<vector<string>>items);//产生并输出候选1项集voidgenCanItemset1();//产生并输出频繁1项集voidgenFreItemset1();//产生并输出候选k-项集(k>=2)voidgenCanItemsetK();//产生并输出频繁k-项集(k>=2)voidgenFreItemsetK();//剪枝:剪去合并后项集中含有非频繁项集中的项voidcutNotCanItemsetK(vector<string>&item);实验截图程序运行界面输出文件截图1输出文件截图1实验总结做完这个实验,有如下收获:同一数据集,最小支持度越小,那么产生的频繁项集维数越高,程序运行时间越长;更加深刻理解了:频繁子集的任何子集一定是频繁的,子集频繁父亲一定频繁;Apriori也存在缺点:第一在每一步产生侯选项目集时循环产生的组合过多,没有排除不应该参与组合的元素;第二,每次计算项集的支持度时,开销会随着数据的增多而成几何级增长。#include<iostream>#include<fstream>#include<string>#include<vector>#include<map>#include<algorithm>#include<iomanip>usingnamespacestd;doubleminsup;//设置最小支持度map<string,in