您好,欢迎访问三七文档
当前位置:首页 > 金融/证券 > 股票报告 > 基于遗传算法的聚类分析
基于遗传算法的聚类分析ClusterAnalysisWhichBasedonGeneticAlgorithm学院:电子信息工程学院专业:控制工程姓名:苏良碧学号:30956059指导老师:周润景聚类分析聚类分析是模式识别中的一个重要问题,是非监督学习的重要方法。聚类分析的目的是将若干特征模式按照它们之间的“相似度”划分为若干个集合,每个集合中的特征模式之间按照某种度量来说“相似”,而不同集合中的特征模式之间按相同的度量来说“不相似”。准则函数用来判断聚类质量cjnijjjiWjnicjmxJ112)(...2,1,...12,||||遗传算法遗传算法(GeneticAlgorithm)是一类借鉴生物界的进化规律演化而来的随机化搜索方法。适者生存,优胜劣汰很多年以后···第一代:第二代:第N代:基于遗传算法的聚类开始1、输入最大迭代次数maxgen2、种群大小popsize3、输入交叉概率pcross4、输入变异概率pmutation1、随机生成一个种群2、计算每个个体的适应度3、找出最好的个体,记录最好适应度和平均适应度1、进行选择、交叉和变异操作2、计算每个个体的适应度3、找出适应度最大的个体4、代替上一次适应度最大的个体迭代次数是否小于maxgen迭代次数加一输出适应度最大的个体(最佳聚类中心)进行聚类输出聚类结果结束第一步:参数初始化%%参数初始化maxgen=100;%进化代数,即迭代次数sizepop=100;%种群规模pcross=0.9;%交叉概率选择,0和1之间pmutation=0.01;%变异概率选择,0和1之间第二步:生成种群、计算适应度、找出最好个体individuals=struct('fitness',zeros(1,sizepop),'chrom',[]);%种群avgfitness=[];%每一代种群的平均适应度bestfitness=[];%每一代种群的最佳适应度bestchrom=[];%适应度最好的染色体%初始化种群fori=1:sizepop%随机产生一个种群individuals.chrom(i,:)=4000*rand(1,12);x=individuals.chrom(i,:);%计算适应度individuals.fitness(i)=fitness(x);end%%找最好的染色体[bestfitnessbestindex]=max(individuals.fitness);bestchrom=individuals.chrom(bestindex,:);%最好的染色体avgfitness=sum(individuals.fitness)/sizepop;%染色体的平均适应度%记录每一代进化中最好的适应度和平均适应度trace=[avgfitnessbestfitness];计算适应度functionfit=fitness(x)%%计算个体适应度值%xinput个体%fitoutput适应度值data=[2232.433077.871298.871580.11752.072463.041962.41594.971835.951495.181957.443498.021125.171594.392937.7324.223447.312145.011269.071910.722701.971802.071725.811966.351817.361927.42328.791860.451782.881875.131237.912055.133405.09688.942104.723198.511675.651747.231580.391806.021810.192191.1274.563288.022433.87307.353363.842021.611988.271657.512069.22173.922608.551803.57372.163077.442163.46576.62140.9833201724.131704.491798.752501.212652.65984.561656.941913.342459.07362.513150.032472565.742284.973024.581978.061536.132375.641661.061552.42005.05790.292419.983051.161557.271746.271879.132793.363009.261073.551766.081803.141895.181207.881600.623123.07245.753373.672248.452785.363052.811035.65315.423088.292187.121243.282451.723111.99829.841555.913139.211347.072364.313096.881926.981507.341626.471808.571608.781565.951124.11840.982819.4126613302.391710.321805.551899.092400.61130.181902.422753.71355.191566.162927.811651.141774.031725.562110.633308.04702.062788.113395.231684.451807.611680.562356.651363.581729.442749.551992.421526.91581.42];kernel=[x(1:3);x(4:6);x(7:9);x(10:12)];Gc=0;[n,m]=size(data);fori=1:ndist1=norm(data(i,1:3)-kernel(1,:));dist2=norm(data(i,1:3)-kernel(2,:));dist3=norm(data(i,1:3)-kernel(3,:));dist4=norm(data(i,1:3)-kernel(4,:));a=[dist1dist2dist3dist4];mindist=min(a);Gc=mindist+Gc;endfit=1/Gc;第三步:进化过程%%进化开始fori=1:maxgeni%选择individuals=Select(individuals,sizepop);avgfitness=sum(individuals.fitness)/sizepop;%交叉individuals.chrom=Cross(pcross,individuals.chrom,sizepop);%变异individuals.chrom=Mutation(pmutation,individuals.chrom,sizepop);%计算适应度forj=1:sizepopx=individuals.chrom(j,:);%解码[individuals.fitness(j)]=fitness(x);end%找到最小和最大适应度的染色体及它们在种群中的位置[newbestfitness,newbestindex]=max(individuals.fitness);[worestfitness,worestindex]=min(individuals.fitness);%代替上一次进化中最好的染色体ifbestfitnessnewbestfitnessbestfitness=newbestfitness;bestchrom=individuals.chrom(newbestindex,:);endindividuals.chrom(worestindex,:)=bestchrom;individuals.fitness(worestindex)=bestfitness;avgfitness=sum(individuals.fitness)/sizepop;trace=[trace;avgfitnessbestfitness];%记录每一代进化中最好的适应度和平均适应度选择函数functionret=Select(individuals,sizepop)%本函数对每一代种群中的染色体进行选择,以进行后面的交叉和变异%individualsinput:种群信息%sizepopinput:种群规模%retoutput:经过选择后的种群sumfitness=sum(individuals.fitness);sumf=(individuals.fitness)./sumfitness;index=[];fori=1:sizepop%转sizepop次轮盘pick=rand;whilepick==0pick=rand;endfori=1:sizepoppick=pick-sumf(i);ifpick0index=[indexi];break;endendendindividuals.chrom=individuals.chrom(index,:);individuals.fitness=individuals.fitness(index);ret=individuals;交叉函数functionret=Cross(pcross,chrom,sizepop)%本函数完成交叉操作%pcorssinput:交叉概率%lenchrominput:染色体的长度%chrominput:染色体群%sizepopinput:种群规模%retoutput:交叉后的染色体fori=1:sizepop%交叉概率决定是否进行交叉pick=rand;whilepick==0pick=rand;endifpickpcrosscontinue;end%随机选择交叉个体index=ceil(rand(1,2).*sizepop);while(index(1)==index(2))|index(1)*index(2)==0index=ceil(rand(1,2).*sizepop);end%随机选择交叉位置pos=ceil(rand*3);whilepos==0pos=ceil(rand*3);endtemp=chrom(index(1),pos);chrom(index(1),pos)=chrom(index(2),pos);chrom(index(2),pos)=temp;endret=chrom;变异函数functionret=Mutation(pmutation,chrom,sizepop)%本函数完成变异操作%pcorssinput:变异概率%lenchrominput:染色体长度%chrominput:染色体群%sizepopinput:种群规模%boundinput:每个个体的上届和下届%retoutput:变异后的染色体fori=1:sizepop%变异概率决定该轮循环是否进行变异pick=rand;ifpickpmutationcontinue;endpick=rand;whilepick==0pick=rand;endindex=ceil(pick*sizepop);%变异位置pick=rand;whilepick==0pick=rand;endpos=ceil(pick*3);chrom(index,pos)=rand*4000;endret=chrom;第四步:进行聚类kernal=[bestchrom(1:3);bestchrom(4:6);bestchrom(7:9);bestchrom(10
本文标题:基于遗传算法的聚类分析
链接地址:https://www.777doc.com/doc-1543441 .html