⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zyfclass.m

📁 此算法利用一种有监督的人工免疫系统实现一个图像分类的分类器。
💻 M
字号:
%%无监督的人工免疫分类器UAIC
%%mwp
function main()
clc; clear all;
Time=input('输入执行次数后按回车开始运行:');
S=3;                                                          %S表示训练样区个数
k=100;                                                        %k表示每个样区的训练样本个数
n=3;                                                          %n每个样本的特征值个数
m=23;                                                          %每个特征值用m位二进制表示
r=0.05;                                                       %抑制率
c=0.05;                                                       %克隆率
load SAriver3 %读入样本数据
SA=sarsamples;                                                      
l=n*m;                                                        %l表示编码序列的长度
pm=0.1;                                                       %pm表示变异概率
pc=0.5;                                                       %pc表示交叉概率
T=0.005;                                                      %T表示终止条件阈值
gmax=100;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Datime=date;
Datime(size(Datime,2)-4:size(Datime,2))=[];%%记录测试日期
CPUT=floor(cputime);%%记录CPU时间
Method='UAIC';
center=[];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for time=1:Time
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%初始化抗体群
% load pick
% pick1=index1;
% pick2=index2;
% SA1=SA(pick1,:);%取出第一个样区的所有样本点
% sa=ceil(rand(1,100)*52686+1-0.5);
% for i=1:k
%     sa1(i,:)=SA1(sa(i),:);                                    %sa1表示某个样区的样本,任取一百个训练样本
% end  
% SA1=SA(pick2,:);%取出第二个样区的所有样本点
% sa=ceil(rand(1,1000)*12848+1-0.5);
% for i=1:k
%     sa1(i,:)=SA1(sa(i),:);                                    %sa1表示某个样区的样本,任取一百个训练样本
% end 
SA1=SA;
% for i=1:10
%     sa1(1+(i-1)*10:10*i,:)=SA1(45613+(i-1)*256:45622+(i-1)*256,:);         %sa1表示某个样区的样本,任取一百个训练样本
% end 
% for i=1:10
%     sa1(1+(i-1)*10:10*i,:)=SA1(38234+(i-1)*256:38243+(i-1)*256,:);         %sa1表示某个样区的样本,任取一百个训练样本
% end 
for i=1:10
    sa1(1+(i-1)*10:10*i,:)=SA1(6016+(i-1)*256:6025+(i-1)*256,:);         %sa1表示某个样区的样本,任取一百个训练样本
end 
% load pickriver3
% sample1=b;
% for i=1:k
%     sa1(i,:)=SA1(sample1(i),:);                                    %sa1表示某个样区的样本,任取一百个训练样本
% end  
[sx,sy]=size(sa1);
C=mean(sa1,1);                                                %C表示某个样区的中心,初始化样区中心
POP=coding(l,sa1);                                            %对某个样区内的样本进行二进制编码,初始化种群
fit=fitcom(C,sa1);                                            %计算亲和度函数值
aa=[];bb=[];
[aa,bb]=sort(-fit);                                           %将亲和度从大到小排序
fit=-aa;
Smax=sa1(bb(1),:);                                        
Pmax=POP(bb(1),:);                                           %选出适应度值最大的个体
NM=ceil(sx*r);  
ME=[];
MEpop=[];
for i=1:sx-NM
    MEpop(i,:)=POP(bb(i),:);
end%抗体抑制
cloneover=MEpop;
[cloneover] = Mclone_sub(Pmax,cloneover,c,pm,pc,sx);%%对所选择出的抗体进行克隆然后交叉变异
newPOP=cloneover;%产生新的种群
fitf=sum(fit);
newsa=decoding(newPOP,sy);
newC=mean(newsa,1);
fitt=fitcom(newC,newsa);
fita=sum(fitt);
it=0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
while  abs(fitf-fita)>T  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
cc=[];dd=[];
[cc,dd]=sort(-fitt);                                           %将亲和度从大到小排序
Fit=-cc;
Nmax=newsa(dd(1),:);                                        
Nmax=newPOP(dd(1),:);                                           %选出适应度值最大的个体
NN=ceil(sx*r);  
NE=[];
NEpop=[];
for i=1:sx-NN
    NEpop(i,:)=newPOP(dd(i),:);
end%抗体抑制
Ncloneover=NEpop;
[Ncloneover] = Mclone_sub(Nmax,Ncloneover,c,pm,pc,sx);%%对所选择出的抗体进行克隆然后交叉变异
newPOP=Ncloneover;
newsa=decoding(newPOP,sy);
newC=mean(newsa,1);
%%更新抗体群
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fitf=sum(Fit);
fitt=fitcom(newC,newsa);
fita=sum(fitt);
it=it+1;
% disp(sprintf('time: %d   generation: %d   center: %d ',time,it,newC));
disp(sprintf('time: %d   generation: %d    fitf: %d  fita: %d',time,it,fitf,fita));
% disp(sprintf('time: %d     center: %d',time,newC));
end  %迭代结束标志
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Times=time;
center=[center;newC];
eval(['save ' Method Datime num2str(CPUT) ' gmax center Times  CPUT Datime  fitf fita']) ;
end  %%运行次数结束标志
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -