欢迎来到天天文库
浏览记录
ID:47486451
大小:123.16 KB
页数:16页
时间:2020-01-12
《Apriori算法实验报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、题目Apriori算法实现学生姓名学生学号专业班级指导教师2014-12-27实验一Apriori算法实现一、实验目的1.加强对Apriori算法的理解;2.锻炼分析问题、解决问题并动手实践的能力。二、实验要求使用一种你熟悉的程序设计语言,如C++或Java,实现Apriori算法,至少在两种不同的数据集上比较算法的性能。三、实验环境Win7旗舰版+VisualStudio2010语言:C++四、算法描述1、Apriori算法说明在Apriori算法中,寻找频繁项集的基本思想是:A.简单统计所有含一个元素项目集出现的频率,找出不小于最小支持度
2、的项目集,即频繁项集;B.从第二步开始,循环处理直到再没有最大项目集生成。循环过程是:第k步中,根据第k-1步生成的频繁(k-1)项集产生侯选k项集。根据候选k项集,算出候选k项集支持度,并与最小支持度比较,找到频繁k项集。下文中遇到的以下符号,分别代表相应的内容k-itemset k项集Lk 频繁k项集Ck 侯选k项集1、Apriori算法描述数据结构说明doubleminsup;//设置最小支持度mapitems_count;//统计各个项集的数目vector>datave
3、c;//原始数据项集vector>candidatevec;//候选项集vector>frequentvec;//频繁项集ofstreamoutFile;intround=1;//生成项集轮次longtrancount=0;//原始事务总数//判断某个项目在某一个事务中是否存在,存在则值为1,反之为0vector>bitmap;Apriori算法的第一步是简单统计所有含一个元素的项集出现的频率,来决定频繁1项集。在第k步,分两个阶段:1,用函数gen
4、CanItemsetK,通过第(k-1)步中生成的频繁(k-1)项集来生成侯选k项集;2.计算侯选k项集的支持度,并找出频繁k项集。Apriori算法描述如下getOriData();//获取原始数据集,并统计事务个数genCanItemset1();//产生输出候选1项集genFreItemset1();//产生频繁项集if(!frequentvec.empty())//根据频繁1项集,执行程序{do{genCanItemsetK();//生成并输出候选k项集genFreItemsetK();//计算并输出频繁k项集}while(!freq
5、uentvec.empty());//频繁项集不为空,则循环继续}其中,产生候选k项集函数genCanItemsetK中涉及两个重要函数,项集合并函数mergeItem和剪枝函数cutNotCanItemsetK。1、函数方法说明//获取原始数据集,并统计事务个数voidgetOriData();//合并生成新的候选项集vectormergeItem(vectorvect1,vectorvect2,intround);//判断项集item是否已经存在候选项集集合items中,存在则返回1inti
6、sExist(vectoritem,vector>items);//产生并输出候选1项集voidgenCanItemset1();//产生并输出频繁1项集voidgenFreItemset1();//产生并输出候选k-项集(k>=2)voidgenCanItemsetK();//产生并输出频繁k-项集(k>=2)voidgenFreItemsetK();//剪枝:剪去合并后项集中含有非频繁项集中的项voidcutNotCanItemsetK(vector&item);二、实验截图1
7、.程序运行界面2.输出文件截图13.输出文件截图1一、实验总结做完这个实验,有如下收获:1.同一数据集,最小支持度越小,那么产生的频繁项集维数越高,程序运行时间越长;2.更加深刻理解了:频繁子集的任何子集一定是频繁的,子集频繁父亲一定频繁;3.Apriori也存在缺点:第一在每一步产生侯选项目集时循环产生的组合过多,没有排除不应该参与组合的元素;第二,每次计算项集的支持度时,开销会随着数据的增多而成几何级增长。一、附1.程序源码main.cpp#include#include#include8、>#include#include#include#includeusingnamespacest
8、>#include#include#include#includeusingnamespacest
此文档下载收益归作者所有