数据挖掘Apriori算法报告周一

上传人:s9****2 文档编号:486169949 上传时间:2023-12-18 格式:DOCX 页数:16 大小:57.12KB
返回 下载 相关 举报
数据挖掘Apriori算法报告周一_第1页
第1页 / 共16页
数据挖掘Apriori算法报告周一_第2页
第2页 / 共16页
数据挖掘Apriori算法报告周一_第3页
第3页 / 共16页
数据挖掘Apriori算法报告周一_第4页
第4页 / 共16页
数据挖掘Apriori算法报告周一_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《数据挖掘Apriori算法报告周一》由会员分享,可在线阅读,更多相关《数据挖掘Apriori算法报告周一(16页珍藏版)》请在金锄头文库上搜索。

1、实训报告书实训名称:系 。然后对其中每个候选项集的支持计数,得到频繁项集22 项集的集合,并利用这些频繁 22 项集合的连接,得到候选 32 项集合。重复扫描数据库产生更高层 次的频繁项集合,再连接产生下一级候选项集,直到穷尽数据集中的所有频繁项集。1.3 Apriori 算法的典型改进Apriori 算法能够有效地产生关联规则 ,但存在算法效率不高的缺陷,因为Apriori 算法存在两个比较明显的缺点:一个是可能产生大量的候选集,另一个是需要重复扫描数据库 . 因此如果挖掘数据仓库数据量很大,应用此算法每次迭代产生候选项集用来统计其支持度 需要花费很多时间。为了提高算法的效率,国内外专家学者

2、提出的一系列改进算法主要从减少扫描数据库的次数和减少生成候选项目集的数目方面进行优化。从近几年频繁项集挖掘 算法的研究趋势来看 ,为了提高算法的效率,提出了一系列的混合搜索策略和高效剪枝策 略。当数据集中所包含的项目个数比较多时,马占欣,陆玉昌提出只有恰当地设置 2 个额外参数,才能够保证挖掘过程的正常进行,但这样做的代价是可能会遗漏部分包含更多负项 目的关联规则。二. 关联算法的基本原理该算法的基本思想是:首先找出所有的频集,这些项集出现的频繁性至少和预定义的最小支持度一样。然后由频集产生强关联规则,这些规则必须满足最小支持度和最小可信 度。然后使用第 1步找到的频集产生期望的规则,产生只包

3、含集合的项的所有规则,其中 每一条规则的右部只有一项,这里采用的是中规则的定义。一旦这些规则被生成,那么只 有那些大于用户给定的最小可信度的规则才被留下来。为了生成所有频集,使用了递推的方法 。挖掘频繁1-项集,比较容易。/调用 apriori_ge n方法生成候选频繁k-项集4)for eachtran sact iont D / 扫描事务数据库D。6)foreachcan didatecCt7)c.co un t+。/统计候选频繁k- 项集的计数8) min_sup满足最小支持度的k-项集即为频繁k-项集10)11) return L= U k Lk。/ 合并频繁 k-项集 0 )三. 关

4、联算法的C+简单实现3.1算法数据:对给定数据集用Apriori算法进行挖掘,找出其中的频繁集并生成关联规则。对下面数据集进行挖掘:13 14对于数据集,取最小支持度minsup=2,最小置信度 minconf=0.83.2算法步骤: 首先单趟扫描数据集,计算各个一项集的支持度,根据给定的最小支持度闵值,得到一 项频繁集L1。 然后通过连接运算,得到二项候选集,对每个候选集再次扫描数据集,得出每个候选集的支持度,再与最小支持度比较。得到二项频繁集L2。 如此进行下去,直到不能连接产生新的候选集为止。 对于找到的所有频繁集,用规则提取算法进行关联规则的提取。3.3 C+算法的简单实现 首先要在项

5、目名文件夹里自己定义date.txt文档存放数据,然后在main函数中用FILE* fp=fope n(date.txt,r。将数据导入算法。 定义int countL110。找到各一维频繁子集出现的次数。 定义char curL1202。实现出现的一维子集。4维来放数据。因为给出的数据最多有 4个数,所以同样的我们要定义到 int coun tL210。/各二维频繁子集出现的次数char curL2203。/ 出现的二维子集int coun tL310。/各三维频繁子集出现的次数char curL3204。/出现的三维子集char cur504。得到字符串的长度。实现代码如下: 定义 int

6、 SizeStr(char* m int SizeStr(char* m int i=0。while(*(m+i!=0 i+。return i 比较两个字符串,如果相等返回true,否则返回false bool OpD(char* x,char* yint i=0。if(SizeStr(x=SizeStr(ywhile(*(x+i=*(y+ii+ 。if(*(x+i=0 & *(y+i=0 return true 。 return false 。 通过 void LoadItemL1(char *p得到所有 1 元的字串和各自出现的次数void LoadItemL1(char *pint i,

7、j,n=0,k=0 。char ch 。char* s 。int f 。 memset(cur,0,sizeof(cur 。for(i=0。 icurL1i0=0 。curL1i1=0 。for(j=0。 j countL1j=0 。for(i=0。 ifor(j=0 。 jch=*(*(p+i+j 。 if(ch=0 break 。curn0=ch 。 n+。curL100=cur00curL101=cur01k=0。for(i=0。 iif(curi=0break 。s=curi 。f=1 。for(j=0 。jif(OpD(s,curL1jf=0 。break 。if(f=1+k。cur

8、L1k0=curi0。curL1k1=curi1。for(i=0 。 ifor(j=0 。jchar* m 。m=curL1i 。if(*m=0break 。if(OpD(m,curjcountL1i+ 。printf(L1: n 。printf( 项集 支持度计数 n 。for(i=0 。 iif(curL1i=0 break 。if(countL1i=2printf(I%s:%dn,curL1i,countL1i 通过 void SubItem2(char *p 得到所有的 2 元子串void SubItem2(char *pint i,j,k,n=0。char* s 。memset(cu

9、r,0,sizeof(cur 。for(i=0 。 icurL2i0=0。curL2i1=0。curL2i2=0 for(i=0 。 i countL2i=0 。for(k=0 。 k s=*(p+k 。 if(SizeStr(s continue 。for(i=0 。 i 。 i+ for(j=i+1。 j 。 j+if(*(s+j=0 break 。*(curn+0=*(s+i 。 *(curn+1=*(s+j 。 *(curn+2=0 。*(curn+3=0 。 n+。 通过 void LoadItemL2(char *p 得到各个 2 元频繁子串出现的次数 void LoadItemL2(char *pint k,i,j 。char* s 。int f 。SubItem2(p 。 curL200=cur00。curL201=cur01。curL202=cur

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号