📄 mainfun.m
字号:
clear;
clc;
load shengchenshuju;
T=size(r1,1);
%%%%%%%%%%%%k叠交叉验证%%%%%%%%%%%%%
k=4;s=4;
tdata=r1(s:k:T,:);%测试数据包括分类好的决策属性值
r1(s:k:T,:)=[];
traindata=r1;
%%%%%%%%%%GA:遗传算法%%%%%%%%%%
NIND=40; %种群的大小
PRECI=size(traindata,1); %一个染色体的长度
P_mutation=0.1; %变异概率
P_cross=0.6; %交叉概率
real chrom; %定义初始种群
real currentbest_value;
for j=1:NIND
a=rand(1,PRECI);
chrom(:,j)=a; %初始种群
end
ecope=100; %iterative迭代次数
currentbest=zeros(PRECI,ecope); %record the optimum one
currentbest_value=zeros(ecope,1);%record the fitness value of the optimum one
currentbest_num=zeros(ecope,1);%存放每一次迭代最大正确的个数
for k=1:ecope
[fitness_gene correctrate]=fitness(chrom,traindata,tdata);
%leave the best chromosome(染色体)
[c_value c_order]=max(fitness_gene);
[b_value b_order]=max(correctrate);
currentbest(:,k)=chrom(:,b_order);
currentbest_value(k)=c_value;
currentbest_num(k)=b_value;
%the process of selection轮盘赌方法
N=NIND;
fit=fitness_gene;
fit=cumsum(fit)/sum(fit); %if a=[1 2 3 4],b=cumsum(a),then b=[1 3 6 10]
s=select(fit,N);
temchrom=chrom(:,s);
%crossover
P=rand(1,N);
prob=find(P<P_cross);
crosschrom=temchrom(:,prob); %选择那些小于交叉概率的染色体(列向量)进行交叉
crosschrom=cross_over(crosschrom);
temchrom(:,prob)=crosschrom; %从temchrom中选取一部分染色体交叉,交叉后在放回原来的行。
%mutation
temchrom=mutation(temchrom,P_mutation);
chrom=temchrom; %父代经选择、交叉、变异得到的子代种群
%calculation the fitness value after crossover and mutation
[fitness_gene correctrate]=fitness(chrom,traindata,tdata);
fit=fitness_gene;
fit=cumsum(fit)/sum(fit);
%elitist selection精英选择
s=select(fit,N-1);
[s_value s_order]=max(fitness_gene);
if s_value<currentbest_value(k)
chrom=[chrom(:,s) currentbest(:,k)];
fitness_gene=[fitness_gene(s);currentbest_value(k)];
else
s=[s s_order];
chrom=chrom(:,s);
fitness_gene=fitness_gene(s);
end
end
%decode
m_value=max(currentbest_num);
xx=find(currentbest_num==m_value);
if size(xx,1)==1
xx=xx;
else
xx=xx(1,1);
end
chrombest=currentbest(:,xx);%最好的训练样本的子集
chrom1=zhuanhua(chrombest);
h=find(chrom1==1);
traindata=traindata(h,:);
C=fenleiqi1(traindata,tdata);
TestSampleNum=size(tdata,1);
Correctrate=C/TestSampleNum;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -