数据挖掘 实现Apriori算法.docx

上传人:b****6 文档编号:8816901 上传时间:2023-02-01 格式:DOCX 页数:13 大小:139.73KB
下载 相关 举报
数据挖掘 实现Apriori算法.docx_第1页
第1页 / 共13页
数据挖掘 实现Apriori算法.docx_第2页
第2页 / 共13页
数据挖掘 实现Apriori算法.docx_第3页
第3页 / 共13页
数据挖掘 实现Apriori算法.docx_第4页
第4页 / 共13页
数据挖掘 实现Apriori算法.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

数据挖掘 实现Apriori算法.docx

《数据挖掘 实现Apriori算法.docx》由会员分享,可在线阅读,更多相关《数据挖掘 实现Apriori算法.docx(13页珍藏版)》请在冰豆网上搜索。

数据挖掘 实现Apriori算法.docx

数据挖掘实现Apriori算法

实验报告

实验课程名称数据挖掘

实验项目名称实现Apriori算法

年级

专业

学生姓名

学号

00学院

实验时间:

年月日

姓名

学号

实验组

实验时间

指导教师

成绩

实验项目名称

实现Apriori算法

实验目的及要求:

1.掌握Apriori算法原理

2.用程序实现Apriori算法

3.学会把Apriori算法应用到实际例子中去

 

实验硬件及软件平台:

MicrosoftWindowsXP

C++

实验内容(包括实验具体内容、算法分析、源代码等等):

#include

typedefstruct

{

intitem[100];//数据项

}D_Node;//数据库D

typedefstruct

{

intitem[100];//数据项,用item[0]保存支持度

}C_Node;//候选集

typedefstruct

{

intitem[100];//数据项,用item[0]保存支持度

}L_Node;//频繁集

C_NodeC[100][100];

L_NodeL[100][100];

D_NodeD[100];

intmin_supp;//最小支持度

voidInPut()

{

inti,j,n,n1;

printf("请输入最小支持度:

");

scanf("%d",&min_supp);

printf("请输入交易集的大小");

scanf("%d",&D[0].item[0]);

n=D[0].item[0];

for(i=1;i<=n;i++)//for1

{

printf("请输入交易[%d]中记录的个数(n)",i);

scanf("%d",&n1);

D[i].item[0]=n1;

for(j=1;j<=n1;j++)//for2

{

printf("请输入交易[%d]中记录项,直接输入数字:

",i);

scanf("%d",&D[i].item[j]);

}//for2

}//for1

}//endofInPut

voidC1()

{

//功能:

扫描数据集D生成1项候选集C1

//输入:

数据集D

//输出1项候选集C1

//初始条件数据集D非空

inti,j,k;

intno=1,temp=0;

C[1][0].item[0]=0;//1项集的个数,在本算法中,用C[n][k].item[0]来保存候选集Cn的第k项的支持度

if(D[0].item[0]!

=0)

{

C[1][1].item[1]=D[1].item[1];

}

for(i=1;i<=D[0].item[0];i++)//for1

{

for(j=1;j<=D[i].item[0];j++)//for2

{

temp=1;

for(k=1;k<=no;k++)//for3

{

if(C[1][k].item[1]==D[i].item[j])

{

C[1][k].item[0]++;//支持度加1

temp=0;//

}//if

}//endfor3

if(temp)//生成新的项集

{

C[1][++no].item[1]=D[i].item[j];

C[1][no].item[0]=1;

}

}//endfor2

}//endfor1

C[1][0].item[0]=no;//数据项的个数

}//endofC1()

voidCn(intn)

{

//用频繁集Ln-1为基础,通过连接得到n项候选集Cn

inti,j,k,p,q,s,t,num;

intno=0,temp=0,count;

C[n][0].item[0]=0;//初始化

//printf("inCn(%d)n=%d/n",n,n);

//printf("inCn(%d)C[%d][0].item[0]=%d/n",n,n,C[n][0].item[0]);

num=L[n-1][0].item[0];//num是Ln-1项集的数据个数

for(i=1;i<=num;i++)

for(j=i+1;j<=num;j++)//for2

{

temp=1;//测试是否满足联结条件

if(n>2)//if1

{

for(k=1;k

if(L[n-1][i].item[k]!

=L[n-1][j].item[k])

{temp=0;

break;}//if1

}//endfor3

}//endif1

if(temp==1)//满足联结条件

{

//printf("inif2no=%d/n",no);

no++;

for(p=1;p<=n-1;p++)

C[n][no].item[p]=L[n-1][i].item[p];

C[n][no].item[p]=L[n-1][j].item[p-1];

C[n][no].item[0]=0;

for(q=1;q<=D[0].item[0];q++)//for5测试其支持度

{

count=0;//count用来记数,当所测试的项存在时,count加1,当count=n时,则子集存在

for(s=1;C[n][no].item[s]!

=0;s++)//for6

{

for(t=1;t<=D[q].item[0];t++)//for7

{

if(C[n][no].item[s]==D[q].item[t])

{count+=1;

break;

}

}//endfor7

}//endfor6

if(count==n)C[n][no].item[0]+=1;//子集存在,第no项的支持度加1

}//endfor5

C[n][0].item[0]+=1;

}//endif2

}//endfor2

}//endofCn()

voidL1()

{

inti,j,k;

j=0;

L[1][0].item[0]=0;

//printf("C[1][0].item[0]=%d/n",C[1][0].item[0]);

for(i=1;i<=C[1][0].item[0];i++)

{

if(C[1][i].item[0]>=min_supp)

{

j+=1;

for(k=1;k<=1;k++)

L[1][j].item[k]=C[1][i].item[k];

L[1][j].item[0]=C[1][i].item[0];

//printf("L[1][%d].item[1]=%d",j,L[1][j].item[1]);测试功能时加的

//printf("-------------%d/n",L[1][j].item[0]);

}

}//endfor1

L[1][0].item[0]=j;

}//endofL1()

voidLn(intn)

{

inti,j,k;

Cn(n);

j=0;

L[n][0].item[0]=0;

//printf("inLn(%d)C[%d][0].item[0]=%d/n",n,n,C[n][0].item[0]);

for(i=1;i<=C[n][0].item[0];i++)//for1

{

if(C[n][i].item[0]>=min_supp)

{

j+=1;

for(k=1;k<=n;k++)

L[n][j].item[k]=C[n][i].item[k];

L[n][j].item[0]=C[n][i].item[0];

}//endif

}//endfor1

L[n][0].item[0]=j;//保存数据的个数

}//endofLn(intn)

voidOutPut(intn)

{

inti,j,k;

printf("频繁项目集L%d如下:

\n",n);

k=L[n][0].item[0];

if(k!

=0)

{for(i=1;i<=k;i++)

{

printf("{");

for(j=1;j<=n;j++)

printf("I%d",L[n][i].item[j]);

printf("}支持度:

%d\n",L[n][i].item[0]);

}//for

}

else

printf("项目集为空\n");

}

voidmain()

{

inti;

intn=1;

InPut();

C1();//初始化,生成1项候选集C1

L1();//得到1项频繁集L1

while(L[n][0].item[0]!

=0)

{

n+=1;

Ln(n);

}

for(i=1;i<=n;i++)

OutPut(i);

//charch;

scanf("%d",&i);

}

实验结果与讨论:

 

指导教师意见:

签名:

年月日

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

当前位置:首页 > 高等教育 > 农学

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

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