欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    Apriori算法实验报告及程序.docx

    • 资源ID:6756828       资源大小:156.30KB        全文页数:18页
    • 资源格式: DOCX        下载积分:12金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要12金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Apriori算法实验报告及程序.docx

    1、Apriori算法实验报告及程序 Apriori算法实验报告学 号: 姓 名: 专 业: 计算机应用技术 教 师: 计算机学院1 Apriori实验 实验背景现在, 数据挖掘作为从数据中获取信息的有效方法, 越来越受到人们的重视。关联规则挖掘首先是用来发现购物篮数据事务中各项之间的有趣联系。从那以后, 关联规则就成为数据挖掘的重要研究方向,它是要找出隐藏在数据间的相互关系。目前关联规则挖掘的研究工作主要包括:Apriori算法的扩展、数量关联规则挖掘、关联规则增量式更新、无须生成候选项目集的关联规则挖掘、最大频繁项目集挖掘、约束性关联规则挖掘以及并行及分布关联规则挖掘算法等。关联规则的挖掘问题

    2、就是在事务数据库D中找出具有用户给定的满足一定条件的最小支持度Minsup和最小置信度Minconf的关联规则。1.1.1 国内外研究概况1993年,Agrawal等人首先提出关联规则概念,关联规则挖掘便迅速受到数据挖掘领域专家的广泛关注.迄今关联规则挖掘技术得到了较为深入的发展。Apriori算法是关联规则挖掘经典算法。针对该算法的缺点,许多学者提出了改进算法,主要有基于哈希优化和基于事务压缩等。1.1.2 发展趋势关联规则挖掘作为数据挖掘的重要研究内容之一, 主要研究事务数据库、关系数据库和其他信息存储中的大量数据项之间隐藏的、有趣的规律。关联规则挖掘最初仅限于事务数据库的布尔型关联规则,

    3、 近年来广泛应用于关系数据库, 因此, 积极开展在关系数据库中挖掘关联规则的相关研究具有重要的意义。近年来,已经有很多基于Apriori算法的改进和优化。研究者还对数据挖掘的理论进行了有益的探索,将概念格和粗糙集应用于关联规则挖掘中,获得了显着的效果。到目前为止,关联规则的挖掘已经取得了令人瞩目的成绩,包括:单机环境下的关联规则挖掘算法;多值属性关联规则挖掘;关联规则更新算法;基于约束条件的关联规则挖掘;关联规则并行及分布挖掘算法等。 实验内容与要求 实验内容编程实现Apriori算法:要求使用a,b,c,d,e,f,g,h,i,j10个项目随机产生数据记录并存入数据库。从数据库读取记录进行A

    4、priori实验,获得频繁集以及关联规则,实现可视化。并用课堂上PPT的实例测试其正确性。 实验要求1、程序结构:包括前台工具和数据库;2、设定项目种类为10个,随机产生事务,生成数据库;3、正确性验证(可用课堂上的例子);4、算法效率的研究:在支持度固定数据量不同的时候测量运行时间;在数据量固定,支持度不同的时候测量运行时间;5、注意界面的设计,输入最小支持度和最小可信度,能够输出并显示频繁项目集以及关联规则。 实验目的1、加强对Apriori算法的理解;2、锻炼分析问题、解决问题并动手实践的能力。2 Apriori算法分析与实验环境 Apriori算法的描述Apriori算法是一种找频繁项

    5、目集的基本算法。其基本原理是逐层搜索的迭代:频繁K项Lk 集用于搜索频繁(K+1)项集Lk+1,如此下去,直到不能找到维度更高的频繁项集为止。这种方法依赖连接和剪枝这两步来实现。算法的第一次遍历仅仅计算每个项目的具体值的数量,以确定大型l项集。随后的遍历,第k次遍历,包括两个阶段。首先,使用在第(k-1)次遍历中找到的大项集Lk-1和产生候选项集Ck。接着扫描数据库,计算Ck中候选的支持度。用Hash树可以有效地确定Ck中包含在一个给定的事务t中的候选。如果某项集满足最小支持度, 则称它为频繁项集。 Apriori算法的步骤步骤如下:1、设定最小支持度s和最小置信度c;2、Apriori算法使

    6、用候选项集。首先产生出候选的项的集合,即候选项集,若候选项集的支持度大于或等于最小支持度,则该候选项集为频繁项集;3、在Apriori算法的过程中,首先从数据库读入所有的事务,每个项都被看作候选1-项集,得出各项的支持度,再使用频繁1-项集集合来产生候选2-项集集合,因为先验原理保证所有非频繁的1-项集的超集都是非频繁的;4、再扫描数据库,得出候选2-项集集合,再找出频繁2-项集,并利用这些频繁2-项集集合来产生候选3-项集;5、重复扫描数据库,与最小支持度比较,产生更高层次的频繁项集,再从该集合里产生下一级候选项集,直到不再产生新的候选项集为止。 开发环境2.3.1 软件环境 (1)编程软件

    7、:Jdk开发包+eclipse集成开发环境 Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。 (2)数据库软件:SQL Server 2008SQL Server 2008 在Microsoft的数据平台上发布,可以组织管理任何数据。可以将结构化、半结构化和非结构化文档的数据直接存储到数据库中。可以对数据进行查询、搜索、同步、报告和分析之类的操作。数据可以存储在各种设备上,从数据中心最

    8、大的服务器一直到桌面计算机和移动设备,它都可以控制数据而不用管数据存储在哪里。 (3)办公软件:Excel 2010 Excel是一款办公软件。它是微软办公套装软件office的重要的组成部分,它是集统计分析、数据处理和辅助决策等功能于一身,现在金融、统计财经、管理等众多领域广泛应用。本实验主要用来为固定数据量改变最小支持数以及固定最小支持数改变数据量两种情况进行时间分析提供可视化图表。2.3.2 硬件环境装有Windows 7 旗舰版电脑。 本章小结本章的内容主要是为了引出本实验的主要算法以及对算法的实现环境做了介绍。3 算法的设计 Apriori算法整体框架图 Apriori实验流程图 主

    9、要的数据结构与函数 数据结构class Transaction public int pid; public String itemset;该类表示表中的一条记录。class Daopublic ArrayList Query(String sql)该类用于访问数据库操作。class Kfp public char kfpstr=new char; public int index=-1; public int support=0; public boolean isfp=true;该类代表一个频繁项目。 主要的程序Java 中最常用的集合类是 List 和 Map。 List 的具体实现包括

    10、 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。 List 适用于按数值索引访问元素的情形。HashMap:Map接口的常用实现类,系统当成一个整体进行处理,系统总是根据Hash算法来计算的存储位置,这样可以保证能快速存、取 Map的对。ArrayList alTransactions:保存表中的所有记录ArrayList alKfpsl:临时存储频繁项目的集合,存储连接后的结果ArrayList SureFpset:保存频繁k项集ArrayList SureFpsetPrio:保存频繁k-1项集ArrayList notFpLis

    11、t:保存一定不是频繁项目的集合,用于剪枝HashMap KfpSuppor:频繁项目集及其对应的支持数HashMap guanlianguize:关联规则及其置信度 连接与剪枝操作对于连接操作的两个字符串(长度为k),它们必须有k-1个相同的字符才能做连接操作。 例如:abc和abd可以连接成abcd,abd和bcd可以连接成abcd,而abc和ade就不可以做连接操作。整个连接过程类似归并排序中的归并操作 对于任一频繁项目集的所有非空子集也必须是频繁的,反之,如果某个候选的非空子集不是频繁的,那么该候选集肯定不是频繁的,将其剪枝。 本章小结本章主要介绍了算法设计的整体流程并且也对主要程序和操

    12、作作了简要的说明。4 数据库的设计与数据的来源本实验的数据均存储于数据库中。数据库yuzm中共产生6张表。表test为测试用表,用于程序的正确性验证。还有5张表存储随机产生的实验数据。其中数据库的结构如下图所示。图 数据库结构正确性验证数据表test为PPT上的实例,用于正确性验证。数据的item个数为5,其中的九行数据均由SQL语句产生,表的每一行都是一个“0”“1”的字符串,字符串长度等于商品种类,其中“0”表示该商品不存在,“1”表示该商品存在。表的全部数据如图。图 表test 实验数据5张表是通过算法随机产生的具有不同数据量的数据集,假设商品种类为10种,表的每一行都是一个“0”“1”

    13、的字符串,字符串长度等于商品种类,其中“0”表示该商品不存在,“1”表示该商品存在。其中表data1共随机产生1万行数据,表data2产生5万行数据,表data3产生25万行数据,表data4产生50万行数据,表data5产生75万行数据。部分数据如图。图 实验用表(部分) 本章小结本章主要对数据库的设计与数据来源做出了说明。5 实验结果与性能分析 Apriori实验界面其中可信度可自由设置,默认为。而支持度记为最小支持度与数据量的比例。实验数据可以下拉选择6张表中的任意一张。如下图所示:图 实验界面 实验的正确性验证运行程序,我们选择表test,即可进行正确性验证,实验结果如下图:图 正确性

    14、验证最终实验结果与ppt的结果相吻合,表明程序编写正确。 实验性能分析为了对本程序的实验进行性能分析,我们分别采用固定数据量改变最小支持数以及固定最小支持数改变数据量两种情况进行时间分析,其中最小置信度设为不变。固定最小支持度改变数据量设支持度为,最小可信度为。具体实验数据量与执行时间如下:表 数据量对性能的影响数据量(万行)15255075时间(秒)图 数据量对性能的影响固定数据量改变最小支持度设实验数据量固定改变最小支持度,具体如下所示:表 最小支持度对性能的影响最小支持度时间(秒/ 1万)49时间(秒/ 5万)时间(秒/ 25万)图 最小支持度对性能的影响实验结果分析由以上实验我们可以看

    15、出,实验时间会随着数据量的增大而增大,并且随着最小支持度的增大而减小。并且他们之间的变化类似于某种指数函数的变化趋势。Apriori的时间主要消耗在4个方面:1、利用K频繁集连接产生K+1候选集时,判断连接的条件时比较的次数太多。假设项集个数为m的频繁集合Lk,判断连接条件时比较的时间复杂度为O(K*m2)。而且本实验的m都很大;2、对Ck中任意的一个c的k个(k-1)子集是否都在Lk-1中。在平均情况下,对所有候选k项集需要扫描次数为|Ck|*|Lk-1|*k/2;3、为了得到所有的候选频集的支持度,需要扫描N次;4、扫描一次数据库需时间O(k|T|)。|T|为交易数量,k交易长度 本章小结

    16、Apriori算法因自身需要多次扫描数据库,并且经过复杂的连接剪枝操作而产生大量候选集以及进行大量的模式匹配计算的缺陷,使得其在I/O上的花费时间很多,从而导致算法的效率不是太高。6 总结与体会通过本次实验,让我明白了什么是Apriori算法和数据之间的关联性,Apriori算法是一种最有影响的挖掘布尔关联规则频繁项集的算法,为以后进步学习数据挖掘知识打下了良好的基础。同时我也更加深刻理解了Apriori算法的原理及其实现的内部细节,同时通过实现这一经典的数据挖掘算法,也让我更深刻的体会到数据挖掘对于知识发现的重要性,尽管实现了算法,但其中可能还有可以改进的地方,尤其是程序的运行效率方面。Ap

    17、riori算法实验不仅使得我对该算法的理解更加上升了一个层次,同时也使得我更加了解了java编程语言,使用更加得心应手。import class Apriori extends JFrame implements ActionListener oString(); InitDate(date); if() = jButtonMine) (); long start=(); DataMine(); long end=(); import .*;import Dao public Connection conn=null; public ResultSet rs=null; public Stat

    18、ement statement=null; public String databasename=yuzm; public ArrayList alTransactions=null; public static String driver = ; public static String url = jdbc:;DatabaseName=yuzm;integratedSecurity=TRUE; /public static String user = root; /public static String password = root; public Dao() try / 加载驱动程序

    19、 (driver); / 连续数据库 conn = (url); if(conn = null) fail connect to the Database!); catch(Exception e) (); public ArrayList Query(String sql) try statement =(Statement) (); rs = (sql); alTransactions=Query(rs); catch (SQLException e) (); return alTransactions; private ArrayList Query(ResultSet rs) Arra

    20、yList alTransactions=new ArrayList(); try int pid_index=(id); int item_index=(item); while() Transaction t=new Transaction(); int pid=(pid_index); String itemset=(item_index); =pid; =itemset; (t); catch (Exception e) (); finally try (); catch (SQLException e) (); return alTransactions; public Transa

    21、ction Query() Transaction t=new Transaction(); return t; public void CloseConnection() try (); catch (SQLException e) (); import SubSet public ArrayList displaySubSet(char setN,int fpstep) ArrayList alStrings=new ArrayList(); int length = ; int i; for (i = 0; i (1 length); i+) String strtemp=; for (

    22、int j = 0; j length; j+) if (i & (1 = fpstep) (strtemp); return alStrings; public ArrayList displaySubSet1(char setN) ArrayList alStrings=new ArrayList(); int length = ; int i; for (i = 0; i (1 length); i+) String strtemp=; for (int j = 0; j length; j+) if (i & (1 j) != 0) strtemp=strtemp+setNj; if(

    23、!() (strtemp); return alStrings; public ArrayList SubSet2(char setN,int fpstep) ArrayList alStrings=new ArrayList(); int length = ; int i; for (i = 0; i (1 length); i+) String strtemp=; for (int j = 0; j length; j+) if (i & (1 j) != 0) strtemp=strtemp+setNj; if() = (fpstep-2) (strtemp); return alStr

    24、ings; public ArrayList SubSet3(char setN,int fpstep) ArrayList alStrings=new ArrayList(); int length = ; int i; for (i = 0; i (1 length); i+) String strtemp=; for (int j = 0; j length; j+) if (i & (1 j) != 0) strtemp=strtemp+setNj; if() fpstep & !() (strtemp); return alStrings; class Transaction public int pid; public String itemset;class Kfp public char kfpstr=new char; public int index=-1; public int support=0; public boolean isfp=true;


    注意事项

    本文(Apriori算法实验报告及程序.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

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

    收起
    展开