数据挖掘Apriori算法报告Word格式文档下载.docx

上传人:b****2 文档编号:15058614 上传时间:2022-10-27 格式:DOCX 页数:16 大小:57.20KB
下载 相关 举报
数据挖掘Apriori算法报告Word格式文档下载.docx_第1页
第1页 / 共16页
数据挖掘Apriori算法报告Word格式文档下载.docx_第2页
第2页 / 共16页
数据挖掘Apriori算法报告Word格式文档下载.docx_第3页
第3页 / 共16页
数据挖掘Apriori算法报告Word格式文档下载.docx_第4页
第4页 / 共16页
数据挖掘Apriori算法报告Word格式文档下载.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

数据挖掘Apriori算法报告Word格式文档下载.docx

《数据挖掘Apriori算法报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据挖掘Apriori算法报告Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。

数据挖掘Apriori算法报告Word格式文档下载.docx

(1)L1=find_frequent_1-itemsets(D);

//挖掘频繁1-项集,比较容易

(2)for(k=2;

Lk-1≠Φ;

k++){

(3)Ck=apriori_gen(Lk-1,min_sup);

//调用apriori_gen方法生成候选频繁k-项集

(4)foreachtransactiont∈D{ 

 

//扫描事务数据库D

(5)Ct=subset(Ck,t);

(6)foreachcandidatec∈Ct

(7)c.count++;

// 

统计候选频繁k-项集的计数

(8)}

(9)Lk={c∈Ck|c.count≥min_sup}//满足最小支持度的k-项集即为频繁k-项集

(10)}

(11)returnL=∪kLk;

//合并频繁k-项集(k>

0)

三.关联算法的C++简单实现

(1)算法数据:

对给定数据集用Apriori算法进行挖掘,找出其中的频繁集并生成关联规则。

对下面数据集进行挖掘:

I1I2I5

I1I2

I2I4

I1I2I4

I1I3

I1I2I3I5

I1I2I3

I2I5

I2I3I4

I3I4

对于数据集,取最小支持度minsup=2,最小置信度minconf=0.8。

(2)算法步骤:

①首先单趟扫描数据集,计算各个一项集的支持度,根据给定的最小支持度闵值,得到一项频繁集L1。

②然后通过连接运算,得到二项候选集,对每个候选集再次扫描数据集,得出每个候选集的支持度,再与最小支持度比较。

得到二项频繁集L2。

③如此进行下去,直到不能连接产生新的候选集为止。

④对于找到的所有频繁集,用规则提取算法进行关联规则的提取。

(3)C++算法的简单实现

①首先要在工程名文件夹里自己定义date.txt文档存放数据,然后在main函数中用FILE*fp=fopen("

date.txt"

"

r"

);

将数据导入算法。

②定义intcountL1[10];

找到各一维频繁子集出现的次数。

定义charcurL1[20][2];

实现出现的一维子集。

由于给出的数据最多有4个数,所以同样的我们要定义到4维来放数据。

intcountL2[10];

//各二维频繁子集出现的次数

charcurL2[20][3];

//出现的二维子集

intcountL3[10];

//各三维频繁子集出现的次数

charcurL3[20][4];

//出现的三维子集

charcur[50][4];

③定义intSizeStr(char*m)得到字符串的长度。

实现代码如下:

intSizeStr(char*m)

{

inti=0;

while(*(m+i)!

=0)

{

i++;

}

returni;

}

④比较两个字符串,如果相等返回true,否则返回false

boolOpD(char*x,char*y)

if(SizeStr(x)==SizeStr(y))

while(*(x+i)==*(y+i))

{

i++;

if(*(x+i)==0&

&

*(y+i)==0)

returntrue;

}

returnfalse;

⑤通过voidLoadItemL1(char**p)得到所有1元的字串和各自出现的次数

voidLoadItemL1(char**p)

inti,j,n=0,k=0;

charch;

char*s;

intf;

memset(cur,0,sizeof(cur));

for(i=0;

i<

20;

i++)

curL1[i][0]=0;

curL1[i][1]=0;

for(j=0;

j<

10;

j++)

countL1[j]=0;

for(j=0;

4;

ch=*(*(p+i)+j);

if(ch==0)

break;

cur[n][0]=ch;

n++;

curL1[0][0]=cur[0][0];

curL1[0][1]=cur[0][1];

k=0;

50;

if(cur[i]==0)

break;

s=cur[i];

f=1;

=k;

if(OpD(s,curL1[j]))

{

f=0;

}

if(f==1)

++k;

curL1[k][0]=cur[i][0];

curL1[k][1]=cur[i][1];

char*m;

m=curL1[i];

if(*m==0)

if(OpD(m,cur[j]))

countL1[i]++;

printf("

L1:

\n"

项集支持度计数\n"

if(curL1[i]==0)

if(countL1[i]>

=2)

printf("

{I%s}:

%d\n"

curL1[i],countL1[i]);

⑥通过voidSubItem2(char**p)得到所有的2元子串

voidSubItem2(char**p)

inti,j,k,n=0;

curL2[i][0]=0;

curL2[i][1]=0;

curL2[i][2]=0;

countL2[i]=0;

for(k=0;

k<

k++)

s=*(p+k);

if(SizeStr(s)<

2)

continue;

for(i=0;

SizeStr(s);

for(j=i+1;

if(*(s+j)==0)

break;

*(cur[n]+0)=*(s+i);

*(cur[n]+1)=*(s+j);

*(cur[n]+2)=0;

*(cur[n]+3)=0;

n++;

⑦通过voidLoadItemL2(char**p)得到各个2元频繁子串出现的次数

voidLoadItemL2(char**p)

intk,i,j;

SubItem2(p);

curL2[0][0]=cur[0][0];

curL2[0][1]=cur[0][1];

curL2[0][2]=cur[0][2];

if(OpD(s,curL2[j]))

curL2[k][0]=cur[i][0];

curL2[k][1]=cur[i][1];

curL2[k][2]=cur[i][2];

s=curL2[i];

if(*s==0)

if(OpD(s,cur[j]))

countL2[i]++;

L2:

\n"

if(curL2[i]==0)

if(countL2[i]>

{I%c,I%c}:

curL2[i][0],curL2[i][1],countL2[i]);

⑧通过定义voidSubItem3(char**p)得到所有3元的子串

voidSubItem3(char**p)

char*s;

inti,j,h,m;

intn=0;

curL3[j][0]=0;

curL3[j][1]=0;

curL3[j][2]=0;

curL3[j][3]=0;

countL3[i]=0;

for(m=0;

m<

m++)

s=*(p+m);

3)

for(h=j+1;

h<

h++)

{

if(*(s+h)==0)

break;

*(cur[n]+0)=*(s+i);

*(cur[n]+1)=*(s+j);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1