数据挖掘Apriori算法报告

发布 2019-08-05 19:45:17 阅读 3076

一.关联算法简介。

关联规则的目的在于在一个数据集中找出项之间的关系,也称之为购物蓝分析 (market basketanalysis)。例如,购买鞋的顾客,有10%的可能也会买袜子,60%的买面包的顾客,也会买牛奶。这其中最有名的例子就是"尿布和啤酒"的故事了。

关联规则的应用场合。在商业销售上,关联规则可用于交叉销售,以得到更大的收入;在保险业务方面,如果出现了不常见的索赔要求组合,则可能为欺诈,需要作进一步的调查。在医疗方面,可找出可能的**组合;在银行方面,对顾客进行分析,可以推荐感兴趣的服务等等。

apriori algorithm是关联规则里一项基本算法。由rakesh agrawal 在 2023年提出的,详细的介绍请猛击这里《fast algorithms for mining association rules》。

二。关联算法的基本原理。

该算法的基本思想是:首先找出所有的频集,这些项集出现的频繁性至少和预定义的最小支持度一样。然后由频集产生强关联规则,这些规则必须满足最小支持度和最小可信度。

然后使用第1步找到的频集产生期望的规则,产生只包含集合的项的所有规则,其中每一条规则的右部只有一项,这里采用的是中规则的定义。一旦这些规则被生成,那么只有那些大于用户给定的最小可信度的规则才被留下来。为了生成所有频集,使用了递推的方法。

1)l1 = find_frequent_1-itemsets(d挖掘频繁1-项集,比较容易。

2)for (k=2;lk-1 ≠φk++)

9)lk =

11) return l= ∪k lk合并频繁k-项集(k>0)

三。关联算法的c++简单实现。

1)算法数据:

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

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

2)算法步骤:

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

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

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

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

3)c++算法的简单实现。

①首先要在工程名文件夹里自己定义文档存放数据,然后在main函数中用file* fp=fopen(""r");将数据导入算法。

②定义int countl1[10];找到各一维频繁子集出现的次数。

定义char curl1[20][2];实现出现的一维子集。

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

int countl2[10]; 各二维频繁子集出现的次数。

char curl2[20][3]; 出现的二维子集。

int countl3[10]; 各三维频繁子集出现的次数。

char curl3[20][4]; 出现的三维子集。

char cur[50][4];

③定义int sizestr(char* m) 得到字符串的长度。实现**如下:

int sizestr(char* m)

int i=0;

while(*(m+i)!=0)

return i;

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

bool opd(char* x,char* y)

int i=0;

if(sizestr(x)==sizestr(y))

return false;

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

void loaditeml1(char **p)

int i,j,n=0,k=0;

char ch;

char* s;

int f;

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

for(i=0;i<20;i++)

for(j=0;j<10;j++)

countl1[j]=0;

for(i=0;i<10;i++)

for(j=0;j<4;j++)

curl1[0][0]=cur[0][0];

curl1[0][1]=cur[0][1];

k=0;for(i=0;i<50;i++)

if(f==1)

for(i=0;i<20;i++)

for(j=0;j<50;j++)

printf("l1: ")

printf("项集支持度计数");

for(i=0;i<10;i++)

通过void subitem2(char **p) 得到所有的2元子串。

void subitem2(char **p)

int i,j,k,n=0;

char* s;

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

for(i=0;i<20;i++)

for(i=0;i<10;i++)

countl2[i]=0;

for(k=0;k<10;k++)

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

void loaditeml2(char **p)

int k,i,j;

char* s;

int f;

subitem2(p);

curl2[0][0]=cur[0][0];

curl2[0][1]=cur[0][1];

curl2[0][2]=cur[0][2];

k=0;for(i=0;i<50;i++)

if(f==1)

for(i=0;i<20;i++)

for(j=0;j<50;j++)

printf("l2: ");

printf("项集支持度计数");

for(i=0;i<10;i++)

通过定义void subitem3(char **p) 得到所有3元的子串。

void subitem3(char **p)

char *s;

int i,j,h,m;

int n=0;

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

for(j=0;j<20;j++)

for(i=0;i<10;i++)

countl3[i]=0;

for(m=0;m<10;m++)

同样我们要得到得到各个3元频繁子串出现的次数。

void loaditeml3(char** p)

数据结构与算法课程设计心得体会学习体会 35

课程设计心得体会。因为已经不是第一次做课程设计,所以对过程很是了解。前期准备工作也做的很充足,所以整个过程不慌不乱,有条不紊。总而言之,程序编写过程中,算法思路清晰,但细节处处理粗糙导致走了很多弯路。老师不只一次提到数据结构强调的是算法思路,经过这次课程设计后,我更是有了进一步深切体会。包括我之前在...

数据结构与算法课程设计心得体会学习体会 31

合肥学院。计算机科学与技术系。课程设计的心得体会。2009 2010 学年第二学期。2010年6 月。通过这次课程设计我自学了拓扑排序,使我对其排序方法和应用有了更深刻的了解。对于数据结构如何用c语言表述有了更深刻的体会和了解。在用c语言表述数据结构时遇到了不小的困难。总是在编译时错误连篇无法运行,...

数据结构实习报告

精选范文 数据结构实习报告 共2篇 一 需求分析1 程序所实现的功能 2 程序的输入,包含输入的数据格式和说明 3 程序的输出,程序输出的形式 4 测试数据,如果程序输入的数据量比较大,需要给出测试数据 5 合作人及其分工。二 设计说明1 主要的数据结构设计说明 2 程序的主要流程图 3 程序的主要...