- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)