基于遗传算法的中药药对挖掘系统的设计与实现_第1页
基于遗传算法的中药药对挖掘系统的设计与实现_第2页
基于遗传算法的中药药对挖掘系统的设计与实现_第3页
基于遗传算法的中药药对挖掘系统的设计与实现_第4页
基于遗传算法的中药药对挖掘系统的设计与实现_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于遗传算法的中药材配对挖掘系统设计与实现摘要运用数据挖掘技术研究中药方剂配伍规律。主要工作:分析关联规则存在的问题,引入双向关联规则的概念;介绍了遗传算法的基本原理,研究了遗传算法在数据挖掘中的应用;将配方库转换为位图矩阵,大大提高了搜索效率;开发了基于遗传算法的中药药对挖掘系统。论文结构如下:介绍了研究背景和意义;阐述了相关的理论基础;提出系统的设计方案;编码方法、适应度函数设计、规则提取、选择、交叉、变异等遗传操作的实现;使用脾胃方库对该系统进行了测试,并对测试结果进行了分析。结果表明,该系统能够快速、高效地从处方库中找到重要的药物间组,对中药的研发具有一定的意义。关键词:数据挖掘;信心;双向关联规则;遗传算法目录论文总页数:24页TOC\o"1-6"\f\h\z\uTOC\o"1-6"\h\z\u1简介11.1背景11.2含义12理论依据12.1关联规则及存在的问题12.2双向关联规则22.3遗传算法介绍43需求分析与设计方案54基于遗传算法的双向关联规则挖掘算法的具体流程与实现74.1位图矩阵实现74.2编码94.3健身功能114.3.1健身功能设计114.3.2适应度函数的实现114.4规则14的提取4.5基因操作154.6算法流程185测试18结论21参考文献22至23声明24介绍背景我国作为最大的中药材资源国,具有中医药文明发祥地的地位,但现在却面临诸多挑战。我国一直未能在世界中药市场占据基本优势地位。相反,日本、中国等国则成功地利用现代数据挖掘技术将中医药产业发展成为现代产业,在国际市场上占有相当大的份额。因此,传承和发展中医药的不仅仅是中医药界,还有全国其他科研机构和研究机构。重要的话题。中药对数据挖掘是利用药对数据库从大量中药对中提取隐含的、未知的、有意义的药物组合模式。中药对的数据挖掘将为中药方剂理论研究和中药临床用药提供重要的模型参考,也为方剂配伍理论研究,特别是方剂配伍研究提供新的方法和现代技术手段。发现新药对和新药组。意义关联规则是数据挖掘中的重要技术之一,它可以反映事务数据库中数据项之间同时出现的规律,发现不同数据项之间的联系。关联规则通过量化的数字来描述数据项A的出现对数据项B的出现的影响。比如牛奶销售对大型商场面包销售的影响。发现这样的规则不仅可以应用于商品货架设计和库存安排,还可以用于根据购买模式对用户进行分类,制定相应的商业决策和销售策略。由于关联规则挖掘具有重要的现实意义,吸引了众多学者的研究,提出了许多关联规则挖掘算法。目前,所有的关联规则挖掘算法都是基于支持-置信度框架理论,存在很多局限性。通过分析这些不足,本文引入了双向关联规则的概念,并实现了一种基于遗传算法的双向关联规则挖掘算法。理论基础关联规则和问题关联规则的蕴涵形式为A=>B。挖掘关联规则分为两步:第一步是识别所有频繁项集,即支持度不小于用户指定的最小支持度的项集;第二步是识别所有频繁项集。就是从频繁项集中构造一个置信度不低于用户给出的最小置信度的规则,即强规则。这种基于支持-置信框架理论的关联规则挖掘方法存在以下问题:(1)无法有效找到低支持度和高置信度的有趣规则基于支持度-置信度框架理论的关联规则挖掘方法找到的强规则必须同时满足最小支持度阈值和最小置信度阈值,但有时人们感兴趣的规则往往是低支持度和高置信度[8]。例如,超市中的A和B两件商品,虽然销量很低,但经常被顾客同时购买。经理希望以低支持和高信心找出规则。(2)“相互依存”的规则无法确定关联规则反映了A和B同时出现的概率,以及在A出现的条件下B出现的条件概率。这样的规则只能确定A对B的“依赖”,而不能同时确定B对A的“依赖”,但很多时候人们对“相互依赖”的规则感兴趣。例如,在中药的药对中,药物必须“相依”。如果A药和B药是药对,那么一定是A通常与B相容,B通常与A相容。如果只有A通常与B相容,而B通常与A不相容,则A和B不是药对,因为B通常是只起辅助作用的药,而且这类药经常出现在各种处方中。上述中药药物对不能通过基于支持-置信框架理论的关联规则挖掘方法找到。(3)发现的强规则不一定有趣甚至是错误的假设您对分析涉及家用计算机和VCD播放器的交易感兴趣。在分析的10,000笔交易中,6,000笔交易包括家用电脑,7,500笔交易包括VCD播放器,4,000笔交易包括家用电脑和VCD播放器。运行一个最小支持度为30%,最小置信度为60%的传统关联规则挖掘程序,会发现以下关联规则:购买(X,“电脑”)购买(X,“vcd播放器”)[支持=40%,信心=66%]该规则是强关联规则。但事实上,电脑和VCD播放器是成反比的,买一台实际上降低了买另一台的可能性,因为买一台VCD播放机的概率是75%多于66%。双向关联规则定义1(双向关联规则):令I={i1,i2,...,im}为一组item,任务相关数据D为一组数据库事务,每个事务T为一个TI等项目集。_每个事务都有一个标识符,称为TID。令A是一个项集,事务T包含A当且仅当AT。如果AI、BI和A∩B=,则AB形式的表达式称为双向关联规则。显然双向关联规则是既满足A=>B又满足B=>A的规则。反之,也可以说同时满足A=>B和B=>A的规则就是双向关联规则。所有双向关联规则AB都有两个置信度。一是关联规则A=>B的置信度:conf(A=>B)=P(B|A)=P(AB)/P(A)B=>A的置信度:conf(A=>B)=P(A|B)=P(AB)/P(B)confidenceconf(A=>B)表示在A出现的条件下B出现的条件概率,即A和B同时出现的概率与A出现的概率之比。它反映了A对B的依赖程度。它的值越大,A对B的依赖越强;反之,值越小,A对B的依赖越弱。值为1表示A的每次出现都伴随着B的出现(不一定反之亦然),A对B的依赖100%.confidenceconf(B=>A)表示在B出现的条件下A出现的条件概率,即B和A同时出现的概率与B出现的概率之比。它反映了B对A的依赖程度。它的值越大,B对A的依赖越强;反之,值越小,B对A的依赖越弱。值为1表示B的每次出现都伴随着A的出现(不一定反之亦然),B对A的依赖100%.双向关联规则A和B共同反映了A和B的相互依赖程度。很多时候我们对高度相互依赖的规则感兴趣——下面定义的强双向规则。定义2(强双向规则):规则A=>B和B=>A同时满足最小置信阈值(min_conf)的双向规则称为强双向规则。上面的概念扩展到下面的多个项目集的情况。定义3(n项集的双向关联规则):设CiI(2<i≤n),且Ci∩Cj=(2<i≤n,2<j≤n,i≠j),n项的双向关联规则集合C1,C2,...,Cn是满足C1=>C2C3...Cn,C2同时=>C1C3...Cn,...,Ci=>C1C2...Ci-1Ci+1...Cn,...,Cn=>C1C2...Cn-1,其中C1=>C2C3...Cn,C2=>C1C3...Cn,...,Ci=>C1C2...Ci-1Ci+1…Cn,…,Cn=>Conf(C1=>C2C3…Cn)=P(C2C3…Cn|C1)=P(C1C2…CnConf(C2=>C1C3…Cn)=P(C1C3…Cn|C2)=P(C1C2…Cn……Conf(Cn=>C1C3…C(n-1))=P(C1C2…C(n-1)|Cn)=P(C1C2…Cn)/P(C如果C1=>C2C3...Cn,C2=>C1C3...Cn,...,Ci=>C1C2...Ci-1Ci+1...Cn,...,Cn=>C1C2...Cn-1同时满足最小置信阈值(min_conf),则项集C1,C2,...项的集合称为项集,包含k个项的项集称为k-项集。我们将上述概念应用到k-itemsets中,我们可以得到如下定义:定义4(项目置信度):令Tk={I1,I2,...,Ik}为k-项目集,Ii(1≤I≤k)为Tk的项目,则k-项目集Tk的项目Ii的置信度conf(Ii,Tk)是事务数据库D中的事务包含{Ii}和{I1,I2,...,I(i-1),I(i+1),...,Ik}的百分比,即:Conf(Ii,Tk)=P({I1,I2,...,I(i-1),I(i+1),,Ik}|{Ii})=P({I1,I2,…,Ii,…,Ik})/P({Ii})定义5(k-itemssetstrongbidirectionalrule):令Tk={I1,I2,...,Ik}为事务数据库D中的一个k-itemset,如果Tk的任意item的置信度如果满足最小置信度阈值(min_conf),则称k-itemsetTk为符合强双向规则的k-itemset,简称k-itemsetstrongbidirectionalrule。遗传算法简介遗传算法(GA)是近年来发展起来的一种新的全局优化算法。1962年,Holland教授首次提出了GA算法的思想。它借鉴了模拟生物遗传学和自然选择的机制,通过自然选择、遗传、突变等机制,实现了个体适应性的提高。在某种程度上,遗传算法是对生物进化过程的数学模拟。这反映了自然界“物竞天择,适者生存”的进化过程。与自然界类似,遗传算法本身对解决问题一无所知,它只需要对算法生成的每条染色体进行评估,将问题的解表示为一条染色体,并根据适应度值选择染色体,所以适应良好的染色体有更多的繁殖机会。在算法中,也是二进制编码的字符串。并且,在执行遗传算法之前,给出了一组染色体,即假设的解。然后通过将这些假设解决方案置于问题的“环境”中来评估这些假设解决方案,即适应度函数。并根据适者生存的原则,选择更适合环境的染色体进行复制,淘汰适应度低的个体,然后生成更适合环境的新一代染色体组通过交叉和变异的过程。下一轮的进化是对这个新的种群进行最适合环境的值。由于遗传算法是由进化论和遗传学产生的一种搜索算法,因此该算法会用到大量的生物遗传学知识。以下是一些将使用的术语:1.染色体_染色体也可以称为基因型个体(个体),一定数量的个体组成种群,种群中个体的数量称为种群规模。2.基因基因是字符串中的元素,基因用于表示个体的特征。例如,如果有一个字符串S=1011,则1、0、1、1这四个元素分别称为基因。3.健身(健身)每个个体对环境的适应程度称为适应度。为了体现染色体的适应能力,引入了一个可以衡量问题中每条染色体的函数,称为适应度函数。该功能是计算个体在群体中被使用的概率。4.人口染色体带有特征的个体的集合称为种群。这个集合中的个体数量称为群体中个体的大小。需求分析与设计方案由于事务数据库一般只具有访问和检索大量数据的功能,因此可以满足用户的一般使用。然而,正是由于数据库中存储的数据量很大,不同的数据项才关联到多个数据项。它们之间还存在大量隐含的、未知的、有意义的数据关系,而这些关系对用户起着重要的作用,所以数据挖掘就是在这种情况下诞生的。遗传算法是数据挖掘技术中的重要算法。这是因为它快速、简单、鲁棒、适合并行处理、高效实用,在各种结构对象的优化过程中具有明显的优势。它的思想来源于生物遗传和适者生存的自然规律,是一种具有“生存+检测”迭代过程的搜索算法。遗传算法以群体中的所有个体为目标,并使用随机化技术来指导对编码参数空间的有效搜索。其中,选择、交叉和变异构成了遗传算法的遗传运算;初始种群编码、初始种群数的设置、适应度函数的设计、遗传运算的设计、控制参数的设置构成遗传算法的核心。内容。与传统的搜索方法相比,遗传算法具有以下特点:(1)搜索过程不直接作用于变量,而是作用于参数集中编码的个体。这种编码操作使遗传算法能够直接对结构对象(集合、序列、矩阵、树、图形、链接和列表)进行操作。(2)搜索过程从一组解迭代到另一组解,同时处理组内多个个体的方法降低了陷入局部最优解的可能性,易于并行化。(3)使用概率转移规则来指导搜索方向,而不是使用确定性搜索规则。对搜索空间没有特殊要求,只使用自适应信息,不需要导数等其他辅助信息,自适应范围更广。中国自古就是中医药文明的发祥地。中医药是我国独有的资源。但是,长期以来,中医药的发展并不是很大,在国际医学界也没有很强的地位。许多年过去了,中药方剂的更新和发展并没有太大的变化。其中许多仍然基于很久以前存在的处方。没有多少新的处方。使用遗传算法进行数据挖掘的系统可以在这种情况下发挥重要作用。通过数据系统,可以在药物对药物数据库的大量数据中发现许多隐含的、未知的、有价值的药物对药物组,其规则和模式可以与许多有意义的药物组合。中药对的数据挖掘也将为中药理论研究和中药临床应用提供重要的模型参考。在系统的数据挖掘过程中,为了减少对事务数据库的扫描,提高挖掘效率,本文首先将事务数据库转换为位图矩阵,然后在该位图矩阵上挖掘出有趣的强双向关联规则。以下是位图矩阵模型的说明。Ik(k为自然数)表示事务数据库中的一项,I1,I2,...,Ik,...,In表示事务数据库中的所有项。用Tj(i1,i2,...,ik,...,in)表示事务数据库中的一个事务,ik对应Ik,占用1位(bit),当事务Tj包含项目Ik时,Tj的ik位为1,否则为0,因此交易Tj可以用位图i1i2...ik...in来表示。T1,T2,...,Tj,...,Tm表示事务数据库中的所有事务,T1,T2,...,Tj,......in表示,这样所有这些位图就构成了事务数据库的位图矩阵。I1I2I3I4I5图1一个位图矩阵的例子T1T2T3T4T5T6T711010010011011011101101001100101010图1是位图矩阵。位图矩阵对应的事务数据库共包含I1、I2、I3、I4、I55项,包括T1、T2、T3、T4、T5、T6和T7共7笔交易。事务T1的位图为11010,所以包含I1、I2、I4三项;事务T2的位图是01001,所以它包含I2和I5两项;事务T3的位图是10110,因此它包含三个项目I1、I3和I4;事务T4的位图是11101,所以它包含I1、I2、I3和I5四个项目;事务T5的位图是10100,所以它包含两个项目I1和I3;事务T6的位图是11001,所以它包含I1、I2和I5三个项目;事务T7的位图是01010,所以它包含I2,I4两项。得到事务数据库的位图矩阵后,很容易找到一条双向关联规则的支持数。例如,需要图1对应的事务数据库中I2和I4同时出现的次数。首先,设计一个只包含I2和I4两项的事物T,其位图为01010。判断交易Tk中是否出现了由I2和I4组成的规则,只需要判断是否新的T的位图和Tk的位图后得到的位图与T的位图相同。如果相同,则表示事物Tk包含由I2和I4组成的规则;否则它不会。通过对T的位图和事务数据库中每个事务的位图进行上述操作,可以得到由I2和I4组成的规则的支持计数。这种方法之所以高效,有两个原因:第一,交易数据库的位图矩阵的大小与交易数据库本身相比大大减小;其次,逐相与运算非常快。基于遗传算法的双向关联规则挖掘算法的具体过程与实现位图矩阵实现本设计使用的后台数据库为SQL2000,使用的数据表为药品表和处方表。位图矩阵的建立是在查询数据库中的数据的基础上生成的。在查询数据库得到的位图矩阵中,行代表处方,列代表数据库中的药品,矩阵中的数据项分别用1和0表示,如果R[i,j]=1(R表示位图矩阵,i表示横坐标,j表示纵坐标),表示第i个处方包含第j个位置对应的药物。创建位图矩阵的步骤如下:(1)使用sql查询语句,通过查询方号得到处方表中的处方总数,从而得到位图矩阵的行,相当于上节提到的事务Tk.StringqueryId="从配方表中选择配方号";Class.forName(".microsoft.jdbc.sqlserver.SQLServerDriver");//通过JDBC建立数据库连接连接dbConn=DriverManager.getConnection(dbURL,userName,userPwd);//连接数据库并提供对应的用户名和密码语句stmt=dbConn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);//创建带有dbConn连接的SQL语句对象ResultSetrsId=stmt.executeQuery(queryId);而(rsId.next()){drugId[i++]=rsId.getString(1);//将平方数存入数组}经过上面的语句,此时就得到了位图矩阵所需要的行的信息,即平方数,并将这个数据存放在名为drugId的数组中。存储在数组中的数据数量就是处方的数量。是后面用到的位图矩阵的行号。(2)接下来需要获取位图矩阵的列数以及该列对应的药品名称。字符串药名[]=新字符串[405];定义一个数组来存储药物名称。StringqueryName="从药品列表中选择药品名称";定义查询药品表中药品名称的SQL语句。 结果集rsName=stmt.executeQuery(queryName);定义保存从查询获得的结果集的变量。诠释p=0;而(rsName.next()){if(p==0){药物名称[i++]=rsName.getString(1);}这句话判断,如果数组中没有数字,直接放数字。别的{诠释j;for(j=0;j<i;j++){如果(药物名称[j].equals(rsName.getString(1)))休息;}该循环语句用于判断drugName数组中是否存在与当前药品名称相同的数据,如果存在则跳出循环,否则一直执行直到存入数据为止。f(j==i){药物名称[i++]=rsName.getString(1);}如果没有重复数据,则将当前药物名称存储在数组中。}p++;}位图矩阵的列信息是从上面的语句中得到的。该列的每一位代表一种药物,药物名称存储在drugName数组中。此数组中的数据数是位图矩阵中的列数。(3)行信息和列信息生成后,第三步,生成矩阵的数据,完成矩阵的构建。for(i=0;i<1060;i++){外层for循环控制位图矩阵的行,根据每一行的recipe整体确定每一行中数据项的值。StringqueryName1="从处方号="+drugId[i]的药品表中选择药品名称;声明sql语句,用于指定处方号查询对应处方中存储的药品。结果集rsName1=stmt.executeQuery(queryName1);声明rsName1结果集对象,每次查询得到的值都存放在里面,方便以后数据访问。而(rsName1.next()){temp[l++]=rsName1.getString(1);}将每次找到的药物名称存储在临时数组“temp”中,用于确定矩阵数据。诠释k;for(k=0;k<l;k++){外层for循环用于控制数组temp的下标。for(j=0;j<405;j++){层for循环用于控制数组drugName的下标。if(temp[k].equals(drugName[j])){矩阵[i][j]='1';}否则if(matrix[i][j]=='1'&&!(temp[k].equals(drugName[j]))){}别的{矩阵[i][j]='0';}判断当temp数组和drugName数组的值相等时,对应的位图矩阵的值为字符1。当当前的位图矩阵的值为字符1,但数组temp不等于drugName数组,不采取任何行动。当以上条件都不满足时,位图矩阵对应位置的值为字符0。}}在上面的程序段之后,构造了一个以0和1为每一项的值的矩阵,这个矩阵就是要构造的位图矩阵。位图矩阵的构建完成,带来了以后操作不用重复查询事务数据库的繁琐,提高了算法的效率,提高了运算速度。编码在使用遗传算法挖掘双向关联规则时,编码是首要解决的问题。编码方式不仅决定了个体的排列方式,也决定了个体从搜索空间中的基因型转变为解空间中的表型时的解码方式。编码方法也会影响遗传操作,例如交叉和变异。由于我们已经使用位图矩阵来描述交易数据库,所以双向关联规则的挖掘可以直接在位图矩阵上进行。因此,本文自然采用二进制编码,编码字符串的长度为事务数据库中的项目数。从上面生成的位图矩阵可以知道,编码后的字符串长度为405。生成初始种群的代码如下:for(i=0;i<50;i++){intt=(int)(Math.random()*28);//随机生成每行字符数组(单个染色体)中的'1'个数。while(true){//如果为0则重新生成。如果(t==0){t=(int)(Math.random()*28);}别的休息;}inttempLoc[]=新的int[t];//intnumber组装随机生成的数字的下标数字(即生成'1'的位置)。for(j=0;j<405;j++){随机药物[i][j]='0';}对于(j=0;j<t;j++){国际定位;如果(j==0){loc=(int)(Math.random()*405);tempLoc[j]=位置;radomDrug[i][loc]='1';}别的{loc=(int)(Math.random()*405);对于(p=0;p<j;p++){if(loc==tempLoc[p]){loc=(int)(Math.random()*405);p=0;}}如果(p==j){tempLoc[j]=位置;radomDrug[i][loc]='1';}}}}//随机数的生成完成。生成初始种群是生成随机数的过程。首先用一个整数变量t来存储每次随机产生的1的个数,因为通过查询药品数据库中的处方表,我们可以知道在整个处方表中,所有处方中的药品最多有27种口味,所以需要用一个变量来控制每个随机生成的个体(随机数)中1的个数。t生成后,立即生成1在每个个体中的位置。这里,代码中体现的是使用整数数组tempLoc来存储,而数组中存储的数据个数是在上一步中随机生成的。变量t的值由变量t的值控制,生成时除了第一个位置外,每个位置生成后,首先用前一个tempLoc数组中的数字进行判断。如果当前生成的数字与tempLoc数组中的数字相同,则需要Re-randomize,直到没有重复。获取到位置后,只需将对应位置的item的值赋值为1,其余的赋值为0,这样经过几层循环操作后,待操作的初始种群得到遗传算法。适应度函数4.3.1健身功能设计在遗传算法中,适应度用于衡量种群中每个个体在优化计算中可能达到或帮助找到最优解的好坏程度。适应度函数直接影响问题解决的效率。本文挖掘的双向关联规则要求规则中任意项的置信度必须满足最小置信度阈值(min_conf)。例如,C1,C2,...,Cn的双向关联规则必须同时满足:P(C1C2…Cn)/P(C1)≥P(C1C2…Cn)/P(C2)≥...P(C1C2…Cn)/P(Cn)≥...显然只是满足:P(C1C2…Cn)/max(P(C1),P(C2),…,P(Cn))≥而已。max(P(C1),P(C2),...,P(Cn))表示P(C1),P(C2),...,P(Cn)中的最大值.因此,适应度函数设计为:F()=count(C1C2....Cn)/max(count(C1),count(C2),...count(Cn其中,是由C1,C2,...,Cn组成的双向关联规则,count(C1C2.1c...Cn)是C1C2...的支持计数。.Cn,count(C1),count(C2),...,count(Cn)分别是C1,C2,...,Cn的支持数,max(count(C1),count(C2),...count(Cn))表示count(C1),count(C2),...,count(C4.3.2适应度函数的实现从上面的表达式可以得出,要计算种群中个体的适应度,首先要计算count(C1C2…Cn)和max(count(C1),count(C2),…count(Cn))count(C1C2...Cn)是将每个随机数(种群个体)与位图矩阵中每个处方对应的数(每个值组成的数)进行ANDcount(Ci)是位图矩阵第i列所有1的累加,即计算位图矩阵第i列1的个数。max(count(C1),count(C2),...count(Cn))是所有累加值的最大数量。由于本设计使用的编程语言是java语言,为了方便比较随机个体与位图矩阵中每一项的值,采用位图矩阵,使得得到的种群由0和1组成人物。方式,没有真正的二进制表示。因此,在对上面提到的位图矩阵的个体和每一行进行AND运算时,是逐项比较,而不是真正意义上的AND运算。设计中进行AND运算的方式是判断个体中包含'1'的位置在位图矩阵每一行的对应位置是否也是'1'。如果判断为真,则相当于执行与自身相等的AND运算。,那么count需要加1。如果'1'在位图矩阵中的某个位置对应的位置是'0',则表示AND运算不等于自身,所以count不需要是增加1。因此,首先,记录位图矩阵中所有值为'1'的位置,这里是用来记录的向量集合,每个向量记录每一行中'1'的位置。外循环控制行数,在每个外循环中为向量分配存储空间,循环控制每行下标的移动。随着下标的移动,查询到值为'1'的下标并记录在向量中间。向量Mloc[]=新向量[1060];for(i=0;i<1060;i++){Mloc[i]=新向量();for(j=0;j<405;j++){如果(矩阵[i][j]=='1'){Mloc[i].add(j);}}}其次,记录生成的总体中值为“1”的所有位置。在这里,也是通过一个向量组来记录的,每个向量都记录了“1”在种群的每个个体中的位置。向量Rloc[]=新向量[50];for(i=0;i<50;i++){Rloc[i]=新向量();for(j=0;j<405;j++){如果(随机药物[i][j]=='1'){Rloc[i].add(j);}}}根据位图矩阵和'1'在初始种群中的位置得到的Mloc和Rloc,每次将Rloc数组中的一个向量与数组Mloc中的所有向量进行比较,每次比较两个'1'的位置存入向量中,若Rloc中存入向量的数与Mloc中存入向量的数相同,即种群个体与位图矩阵每一行形成的数即为AND运算的值等于种群个体本身,然后用数组count记录每个AND运算等于自身的次数。for(i=0;i<50;i++){标志=假;计数[i]=0;对于(p=0;p<1060;p++){for(j=0;j<Rloc[i].size();j++){if(Mloc[p].contains(Rloc[i].get(j))){标志=真;}别的{标志=假;}}如果(标志){计数[i]++;}}}经过这段代码的运算,数组count存储了每个初始种群个体与等于自身的位图矩阵进行AND运算的次数,即得到计算适应度函数的分子的值。四、计算适应度的分母,即计算每个初始种群个体中'1'的位置在位图矩阵的对应列中出现的次数,然后使用max函数计算最大值刚刚计算的时间。,最后将计算出的每个最大值存储在数组中,用于适应度计算。for(i=0;i<50;i++){intcountR[]=新int[405];//countR将该列1的个数存储在位图矩阵中,对应随机数每一行的1个数。诠释k=0;for(j=0;j<405;j++){如果(随机药物[i][j]=='1'){计数R[k++]=计数D[j];}}整数最大值=0;for(inttt=0;tt<k;tt++){//求位图矩阵对应列中出现的每一行中1个数的最大值。if(max<Math.max(max,countR[tt])){最大值=计数[tt];}}countMax[i]=最大值;}第五,计算上面计算的分子和分母值,得到每个初始种群个体的适应度。浮动适合[]=新浮动[50];//计算选择概率,放入fit数组中。intfitD[]=新int[50];//计算适应度并将其保存在fitD数组中。for(i=0;i<50;i++){fit[i]=((float)count[i])/((float)countMax[i]);fitD[i]=(int)(fit[i]*100);System.out.print(fit[i]+"_"+fitD[i]+".");}//计算随机数的置信度。规则抽取由于挖掘双向关联规则只要满足最小置信度阈值即为所需规则,计算每一代种群的适应度后,如果适应度大于等于min_conf,则将个体放入规则库.放入时判断个体是否已经存在于规则库中。如果存在则不放入。设计中通过输入框输入min_conf,将值存放在变量getV中。for(i=0;i<50;i++){if(fitD[i]>=getV){如果(z==0){for(j=0;j<405;j++){规则[h][j]=randomDrug[i][j];}rfitD[h]=适合[i];h++;}别的{诠释k;for(k=0;k<50;k++){for(j=0;j<h;j++){if(gener[k].equals(ruleStr[j])==false){继续;}别的{休息;}}如果(j==h){for(j=0;j<405;j++){规则[h][j]=randomDrug[i][j];}rfitD[h]=适合[i];h++;}}}}}基因操作遗传操作主要包括选择、交叉和变异。(1)选择本文的选择操作采用轮盘赌选择方法,将个体的适应度与种群的总适应度(种群中所有个体的适应度之和)进行比较,得到个体的相对适应度,得到所有个体的相对适应度之和。为1。在选择操作中以个体的相对适应度作为被选中的概率,每一轮选择产生一个统一的随机数[0,1],并以该随机数作为选择指针来确定选定的个人。个体被选中的概率越大,参与复制和交叉产生新一代种群的机会就越大,体现了自然界生物进化中“物竞天择,适者生存”的自然规律。在本设计中,轮盘选择方法的实现是先计算总适应度之和,然后随机生成介于1和sum之间的数,根据生成的随机数得到对应的种群个体。正是因为模拟了遗传的特性,适应度大时被选中的概率高,被选中的概率小。下面的循环是计算适应度的总和。for(i=0;i<50;i++){总和+=拟合D[i];}以下代码是轮盘算法的实现:for(i=0;i<50;i++){//随机选择个体。n=((int)(Math.random()*val))+1;总和=0;j=0;米=0;而(真){总和+=拟合D[j];如果(总和>=n){休息;}别的米++;j++;}生成器[i]=Ch[m];}最后,根据轮盘赌算法选择的种群个体存储在生成器数组中。(2)交叉实际事务数据库中的item数量往往比较多,也就是编码字符串比较长。为了促进解空间的搜索,防止过早收敛,本文中交叉操作的交点个数由设置为10、20等。交叉位是随机生成的。例如,在图1对应的事务数据库中,如果n设置为10,则为单点交叉。对于父个体1“11010”和父个体2“01001”,如果随机生成的交叉点为3,则交叉得到的后代个体1和后代个体2分别为“11001”和“01010”。染色体交叉的实现代码如下:而(i<jcha/2){m=(int)(Math.random()*50);//选择要交换的两个物体的下标m,ra=(int)(Math.random()*50);n=(m+ra)%50;p=(int)(Math.random()*405);//p值是染色体交换位。CharSequencert1=generator[m].subSequence(p,gener[m].length());//第p个位置之后的染色体交换。CharSequencert2=generator[n].subSequence(p,gener[n].length());generator[m]=generator[m].replace(gener[m].subSequence(p,gener[m].length()),rt2);generator[n]=generator[n].replace(gener[n].subSequence(p,gener[n].length()),rt1);我++;}(3)突变由于初始种群的产生是随机的,交易数据库中的所有项目不一定都出现在初始种群中,这会导致一些规则的遗漏和早熟收敛。因此,本文在进行变异操作时,以概率随机选择个体,选择后随机产生变异位,翻转变异位。变异的实现,在这个设计中,就是随机生成种群中需要变异的个体和选中的个体中需要变异的染色体位置,然后翻转这个位置对应的值,将'1'变为“0”,或将“0”的值更改为“1”。for(j=0;j<byg;j++){p=(int)(Math.random()*405);//个体间的染色体变异。对于(k=0;k<10;k++){p1[k]=(((int)(Math.random()*405))+p)%405;}intp2=(int)(Math.random()*50);//产生突变的个体的位置。charbianyi[]=生成器[p2].toCharArray();对于(k=0;k<10;k++){if(bianyi[p1[k]]=='1'){变易[p1[k]]='0';}别的{变易[p1[k]]='1';}}for(k=0;k<405;k++){//变异然后转换为字符串。如果(k==0){生成器[p2]=String.valueOf(white[k]);}别的{生成器[p2]+=String.valueOf(white[k]);}}}算法流程NN开始产生初始种群计算适应度,把符合要求的个体放入规则库达到预设世代数?选择交叉变异结束Y图图2基于遗传算法的双向关联规则挖掘算法流程图测试本文将上述方法用于中药配伍规律的研究,从大量古今中药方剂中挖掘出药物配伍组。药对是临床上相对固定的两种药物的组合,是中药配伍中最小的单位;药物组是临床上相对固定的两种或两种以上药物的组合,也可以认为不限于两种药物。特殊药对对研究中药配伍规律具有重要意义。本文实验基于脾胃方剂库。方库包含方剂1060条,涉及药材405种。在实验中,使用基于遗传算法的双向关联规则挖掘算法来寻找药物到药物组。本系统具有数据挖掘功能,有两种选择模式,一种是一般模式状态下的双

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论