大数据经典算法Apriori讲解
- 格式:ppt
- 大小:958.00 KB
- 文档页数:32


数据挖掘算法实验报告1)实验题目Apriori算法是一种最有影响的挖掘布尔关联规则频繁项集的算法。
它将关联规则挖掘算法的设计分解为两个子问题:(1)找到所有支持度大于最小支持度的项集,这些项集称被为频繁项集(Frequent Itemset)。
(2)使用第一步产生的频繁集产生期望的规则。
在图书馆管理系统中积累了大量的读者借还书的历史记录,基于Apriori算法挖掘最大频繁项目集,由此产生关联规则。
数据格式可参阅文献参考文献:彭仪普,熊拥军: 关联挖掘在文献借阅历史数据分析中的应用.情报杂志. 2005年第8期(本实验我用的是书上的例题AllElectronics事物数据库的数据做的)2)算法基本思想的描述Apriori算法是一种最有影响的挖掘布尔关联规则频繁项集的算法。
其核心是基于两阶段频集思想的递推算法。
该关联规则在分类上属于单维、单层、布尔关联规则。
在这里,所有支持度大于最小支持度的项集称为频繁项集,简称频集。
该算法的基本思想是:首先找出所有的频集,这些项集出现的频繁性至少和预定义的最小支持度一样。
然后由频集产生强关联规则,这些规则必须满足最小支持度和最小可信度。
然后使用第1步找到的频集产生期望的规则,产生只包含集合的项的所有规则,其中每一条规则的右部只有一项,这里采用的是中规则的定义。
一旦这些规则被生成,那么只有那些大于用户给定的最小可信度的规则才被留下来。
为了生成所有频集,使用了递推的方法。
(1)L1 = find_frequent_1-itemsets(D);(2)for (k=2;Lk-1 ≠Φ ;k++) {(3)Ck = apriori_gen(Lk-1 ,min_sup);(4)for each transaction t ∈D{//scan D for counts(5)Ct = subset(Ck,t);//get the subsets of t that are candidates(6)for each candidate c ∈ Ct(7) c.count++;(8)}(9)Lk ={c ∈ Ck|c.count≥min_sup} (10)}(11)return L= ∪ k Lk;3)编程实现算法#include <stdio.h>#include <math.h>int l1[5]={0};int l2[5][5]={0};int l3[5][5][5]={0};void LoadIteml1(int data[9][4]){int i,j;for(i=0;i<9;i++){for(j=0;j<4;j++){switch(data[i][j]){case 0:break;case 1:l1[0]++;break;case 2:l1[1]++;break;case 3:l1[2]++;break;case 4:l1[3]++;break;case 5:l1[4]++;break;}}}printf("频繁一项集:\n");for(i=0;i<5;i++){printf("I%d:%d\n",i+1,l1[i]);}}int count2(int data[9][4],int m,int n){int i,j;int flag1=0,flag2=0,count=0;for(i=0;i<9;i++){for(j=0;j<4;j++){if(data[i][j]==m) flag1=1;else if(data[i][j]==n) flag2=1;}if(flag1==1 && flag2==1) count++;flag1=flag2=0;}return count;}void LoadIteml2(int data[9][4]){int i,j;for(i=0;i<5;i++){for(j=i+1;j<5;j++){l2[i][j]=count2(data,i+1,j+1);}}printf("频繁二项集:\n");for(i=0;i<5;i++){for(j=0;j<5;j++){if(l2[i][j]>1)printf("I%d I%d:%d\n",i+1,j+1,l2[i][j]);}}}int count3(int data[9][4],int m,int n,int a){int i,j,flag1=0,flag2=0,flag3=0;int count=0;for(i=0;i<9;i++){if(data[i][2]==0) continue;for(j=0;j<5;j++){if(data[i][j]==m) flag1=1;if(data[i][j]==n) flag2=1;if(data[i][j]==a) flag3=1;}if(flag1==1 && flag2==1 && flag3==1)count++;flag1=flag2=flag3=0;}return count;}void LoadIteml3(int data[9][4]){int i,j,k;for(i=0;i<5;i++){for(j=i+1;j<5;j++){for(k=j+1;k<5;k++){l3[i][j][k]=count3(data,i+1,j+1,k+1);}}}printf("频繁三项集:\n");for(i=0;i<5;i++){for(j=0;j<5;j++){for(k=0;k<5;k++){if(l3[i][j][k]>1)printf("I%d I%d I%d:%d\n",i+1,j+1,k+1,l3[i][j][k]);}}}}void LoadIteml4(int data[9][4]){printf("没有频繁四项集!算法结束!\n");}int main(){int data[9][4]={{1,2,5,0},{2,4,0,0},{2,3,0,0},{1,2,4,0},{1,3,0,0},{2,3,0,0},{1,3,0,0},{1,2,3,5},{1,2,3,0},};LoadIteml1(data);LoadIteml2(data);LoadIteml3(data);LoadIteml4(data);return 0;}4)输出运算结果。
⼗⼤经典算法之Apriori算法关联分析关联分析是⼀种在⼤规模数据集中寻找有趣关系的任务。
这些关系可以有两种形式:频繁项集(frequent item sets): 经常出现在⼀块的物品的集合。
关联规则(associational rules): 暗⽰两种物品之间可能存在很强的关系。
相关术语关联分析(关联规则学习): 从⼤规模数据集中寻找物品间的隐含关系被称作关联分析(associati analysis)或者关联规则学习(association rule learning)。
下⾯是⽤⼀个杂货店例⼦来说明这两个概念,如下图所⽰:频繁项集: {葡萄酒, 尿布, ⾖奶} 就是⼀个频繁项集的例⼦。
关联规则: 尿布 -> 葡萄酒就是⼀个关联规则。
这意味着如果顾客买了尿布,那么他很可能会买葡萄酒。
那么频繁的定义是什么呢?怎么样才算频繁呢?度量它们的⽅法有很多种,这⾥我们来简单的介绍下⽀持度和可信度。
⽀持度: 数据集中包含该项集的记录所占的⽐例。
例如上图中,{⾖奶} 的⽀持度为 4/5。
{⾖奶, 尿布} 的⽀持度为 3/5。
可信度: 针对⼀条诸如 {尿布} -> {葡萄酒} 这样具体的关联规则来定义的。
这条规则的可信度被定义为⽀持度({尿布, 葡萄酒})/⽀持度({尿布}),从图中可以看出⽀持度({尿布, 葡萄酒}) = 3/5,⽀持度({尿布}) = 4/5,所以 {尿布} -> {葡萄酒} 的可信度 = 3/5 / 4/5 = 3/4 = 0.75。
⽀持度和可信度是⽤来量化关联分析是否成功的⼀个⽅法。
假设想找到⽀持度⼤于 0.8 的所有项集,应该如何去做呢?⼀个办法是⽣成⼀个物品所有可能组合的清单,然后对每⼀种组合统计它出现的频繁程度,但是当物品成千上万时,上述做法就⾮常⾮常慢了。
我们需要详细分析下这种情况并讨论下 Apriori 原理,该原理会减少关联规则学习时所需的计算量。
Apriori 原理假设我们⼀共有 4 个商品: 商品0, 商品1, 商品2, 商品3。
数据挖掘中的关联分析方法数据挖掘是一门利用统计学、机器学习和数据库技术来发现模式和趋势的学科。
在大数据时代,数据挖掘变得尤为重要,因为海量的数据蕴含着无限的商业价值和科学意义。
而关联分析方法作为数据挖掘的重要技术之一,在市场分析、商品推荐、医疗诊断等领域有着广泛的应用。
关联分析方法是指在大规模数据集中发现变量之间的关联关系,并且用这些关联关系构建模型,以便做出预测或者发现隐藏的信息。
其中,最为典型的例子就是购物篮分析。
通过分析顾客购物篮中的商品组合,商家可以发现哪些商品具有相关性,并且做出相应的销售策略。
首先,关联分析方法中最为经典的算法就是Apriori算法。
Apriori算法是一种用于发现频繁项集的算法,它的核心思想就是通过迭代的方法来挖掘频繁项集。
具体地说,算法首先扫描数据集,找出数据集中的频繁1项集;然后通过频繁1项集来生成候选2项集,并再次扫描数据集,找出频繁2项集;如此循环下去,直至无法生成更多的频繁项集为止。
而这些频繁项集就是具有关联关系的商品组合,商家可以根据这些关联关系来进行商品的搭配销售,以提高销售额。
其次,关联分析方法中还有一种常用的算法叫做FP-Growth算法。
FP-Growth算法是一种用于挖掘频繁项集的算法,与Apriori算法相比,FP-Growth算法在性能上有着更好的表现。
其核心思想是通过构建FP树(频繁模式树)来高效地发现频繁项集。
FP树是一种用来存储数据集中元素项的树形结构,通过构建FP树,我们可以高效地发现频繁项集。
因此,在实际应用中,FP-Growth算法常常被用来挖掘大规模数据集中的频繁项集。
除了这两种经典的算法之外,关联分析方法中还有很多其他的技术和方法。
例如基于模式增长的方法、基于随机抽样的方法、基于模糊关联规则的方法等等。
这些方法各有其特点,适用于不同的应用场景。
而在实际应用中,人们可以根据具体的数据集和问题,选择合适的关联分析方法来进行数据挖掘。
Apriori ['eɪprɪ'ɔ:rɪ]Apriori算法是一种挖掘关联规则的频繁项集算法,其核心思想是通过候选集生成和情节的向下封闭检测两个阶段来挖掘频繁项集。
而且算法已经被广泛的应用到商业、网络安全等各个领域。
其核心是基于两阶段频集思想的递推算法。
该关联规则在分类上属于单维、单层、布尔关联规则。
在这里,所有支持度大于最小支持度的项集称为频繁项集,简称频集。
经典的关联规则数据挖掘算法Apriori 算法广泛应用于各种领域,通过对数据的关联性进行了分析和挖掘,挖掘出的这些信息在决策制定过程中具有重要的参考价值。
Apriori算法广泛应用于商业中,应用于消费市场价格分析中,它能够很快的求出各种产品之间的价格关系和它们之间的影响。
通过数据挖掘,市场商人可以瞄准目标客户,采用个人股票行市、最新信息、特殊的市场推广活动或其他一些特殊的信息手段,从而极大地减少广告预算和增加收入。
百货商场、超市和一些老字型大小的零售店也在进行数据挖掘,以便猜测这些年来顾客的消费习惯。
Apriori算法应用于网络安全领域,比如网络入侵检测技术中。
早期中大型的电脑系统中都收集审计信息来建立跟踪档,这些审计跟踪的目的多是为了性能测试或计费,因此对攻击检测提供的有用信息比较少。
它通过模式的学习和训练可以发现网络用户的异常行为模式。
采用作用度的Apriori算法削弱了Apriori算法的挖掘结果规则,是网络入侵检测系统可以快速的发现用户的行为模式,能够快速的锁定攻击者,提高了基于关联规则的入侵检测系统的检测性。
Apriori算法应用于高校管理中。
随着高校贫困生人数的不断增加,学校管理部门资助工作难度也越加增大。
针对这一现象,提出一种基于数据挖掘算法的解决方法。
将关联规则的Apriori算法应用到贫困助学体系中,并且针对经典Apriori挖掘算法存在的不足进行改进,先将事务数据库映射为一个布尔矩阵,用一种逐层递增的思想来动态的分配内存进行存储,再利用向量求"与"运算,寻找频繁项集。