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

📄 classification_svm_stevegunn.m

📁 这个是我自己编写的基于混沌自适应粒子群优化支持向量机用于分类的matlab程序
💻 M
字号:
% 支持向量机用于二类模式分类 - 必须选择最优参数 p1,C% 工具箱:SVM_SteveGunn% 使用平台:Matlab6.5% 作者:jzhang%email:zj8455@126.comclcclearclose all%format long e%---------------------------------------------------load heart.txt;% load SPECTFtest.txt;trnY=ones(200,1)-heart(1:200,14);n=length(trnY);for k=1:n    if trnY(k,1)==0        trnY(k,1)=-1;    else       trnY(k,1)=trnY(k,1);     endendn1=length(ones(1,n)*heart(1:n,:));trna=heart(1:200,1:(n1-1));max_trna=max(trna);min_trna=min(trna);trnc=trna-ones(n,1)*min_trna;trnX=trnc./(ones(n,1)*(max_trna-min_trna));tstY=ones(96,1)-heart(201:296,14);m=length(tstY);for t=1:m    if tstY(t,1)==0        tstY(t,1)=-1;    else       tstY(t,1)=tstY(t,1);     endendtsta=heart(201:296,1:(n1-1));max_tsta=max(tsta);min_tsta=min(tsta);tstc=tsta-ones(m,1)*min_tsta; tstX=tstc./(ones(m,1)*(max_tsta-min_tsta));% %---------------------------------------------------% 参数设置% trnX = xn_train';% trnY = dn_train';% tstX = xn_test';% tstY = dn_test';xaxis=1;yaxis=2;%ker1 = 'kstyle';ker1= 'rbf';% 核函数 k = exp(-(u-v)*(u-v)'/(2*p1^2))global p1 ;%p1 = 0.05;             % p1 is width of rbfs (sigma)%C = 200;% 折衷系数% global pj pb% pj=0.9;% pb=0.1;aspect=0;mag=0.1;% bpc=0;maxbestper=0;bestnum=0;minbestnum=0;%input=zeros(1,size(trnX,2));%--------------------------------------------------------------------%初始化遗传算法种群% par=floor(rand(10,(n1-1))+0.5*ones(10,(n1-1))); tic% for num=1:20% for l=1:10% %----------------------------------------------------------------%     X=trnX1.*(ones(n,1)*par(l,:));%定义训练样本%     trnX=X(:,any(X));%     TX=tstX1.*(ones(m,1)*par(l,:));%定义测试样本%     tstX=TX(:,any(TX));%-------------------------------------bestPercent1 =0;xl=[0.7 0.3];%初始输入参数a=[10 0.001];b=[400 40 ];xk=[200 20 ].*xl;%--------------------------------------------%用混沌算法粗搜索fprintf('training  ...\n');for i=1:15%while abs(merr-maxerr)>eep1=xk(2);C=xk(1);%el=xk(3);t=(xk-a)./(b-a);%disp('输出寻环数');%i%disp('输出选择的参数');%xk%---------------------------------------------------% 训练与测试(K型) [nsv1,alpha1,bias1] = svc(trnX,trnY,ker1,C);                        % 训练actfunc = 0;                                                    % 1 为实际输出,0 为取sign输出 predictedY1 = svcoutput(trnX,trnY,tstX,ker1,alpha1,bias1,actfunc);  % 测试%---------------------------------------------------% 结果统计Result1 = ~abs(predictedY1-tstY);               % 正确分类显示为1Percent1 = sum(Result1)/length(Result1);   % 正确分类率%-----------------------------------------------------------%max_Percent1=max(Percent1);%max_err%disp('输出预测中误差');%mPercent1=sqrt(Percent1'*Percent1/10);%merr% h1=svcplot(trnX,trnY,ker1,alpha1,bias1,aspect,mag,xaxis,yaxis,input); err=svcerror(trnX,trnY,tstX,tstY,ker1,alpha1,bias1);if(Percent1>bestPercent1)    t=4*t.*(ones(1,2)-t);    %t    xkk=xk;%     xk=a+(b-a).*t;    if(0<t<0.2)    xk=a+(b-a).*t.^0.5;    elseif(0.2<=t<0.8)       xk=a+(b-a).*t;    else       xk=a+(b-a).*t.^2.5;    end    bestPercent1=Percent1;    bestpredictedY1=predictedY1;    %h1=svcplot(trnX,trnY,ker1,alpha1,bias1,aspect,mag,xaxis,yaxis,input);   %bestPercent1=maxPercent1;   % bestmax_Percent1=max_Percent1;   % bestmPercent1=mPercent1;    besti=i;    besterr=err;    %best_t_computer=t_computer;else    t=4*t.*(ones(1,2)-t);    xk=a+(b-a).*t;%     if(0<t<0.2)%     xk=a+(b-a).*t.^0.5;%     elseif(0.2<=t<0.8)%        xk=a+(b-a).*t%     else%        xk=a+(b-a).*t.^2.5;%     endend%maxerrenddisp('输出最优预测最大正确率');bestPercent1% xkk(1)% xkk(2)%--------------------------------------------------------------------------%用粒子群算法进行细搜索Cbest=xkk(1);p1best=xkk(2);w1max=1.2;%表示惯性权重w2max=1.1;w1min=0.3;w2min=0.1;cmax=0.05;pmax=0.005;cc=1.5;%表示学习因子cp=1.5;% v=rand(1,2);%初始化粒子群速度% vc=0.05*v(1);% vp=0.005*v(2);bestj=0;jmax=5;for j=1:jmax   vc=cc*rand(1)*(xkk(1)-Cbest);   w1=w1max-j*(w1max-w1min)/jmax;   if abs(vc)<cmax       xkk(1)=w1*xkk(1)+vc;   else       xkk(1)=w1*xkk(1)+cmax;   end   vp=cp*rand(1)*(xkk(2)-p1best);   w2=w2max-j*(w1max-w2min)/jmax;   if abs(vp)<pmax       xkk(2)=w2*xkk(2)+vp;   else       xkk(2)=w2*xkk(2)+pmax;   end   C=xkk(1);   p1=xkk(2); %--------------------------------------------------- % 训练与测试(K型) [nsv1,alpha1,bias1] = svc(trnX,trnY,ker1,C);                        % 训练actfunc = 0;                                                    % 1 为实际输出,0 为取sign输出 predictedY1 = svcoutput(trnX,trnY,tstX,ker1,alpha1,bias1,actfunc);  % 测试%---------------------------------------------------% 结果统计Result1 = ~abs(predictedY1-tstY);               % 正确分类显示为1Percent1 = sum(Result1)/length(Result1);   % 正确分类率%-----------------------------------------------------------% h1=svcplot(trnX,trnY,ker1,alpha1,bias1,aspect,mag,xaxis,yaxis,input);err=svcerror(trnX,trnY,tstX,tstY,ker1,alpha1,bias1);% disp('输出预测正确分类');% max_Percent1=max(Percent1);% max_Percent1% disp('输出预测中正确分类');%mPercent1=sqrt(Percent1'*Percent1/10);if Percent1>bestPercent1     Cbest=xkk(1);     p1best=xkk(2);     bestpredictedY1=predictedY1;     bestPercent1=Percent1;     %maxPercent1=bestPercent1;     %bestmax_Percent1=max_Percent1;     %h1=svcplot(trnX,trnY,ker1,alpha1,bias1,aspect,mag,xaxis,yaxis,input);     besterr=err;     bestj=j; else     j=j+1; endend disp('输出是哪次循环'); besti bestj disp('输出选择的参数'); Cbest p1best disp('输出错误数'); besterr disp('输出某次最大正确率'); bestPercent1%  if bestPercent1>bpc%      bpc=bestPercent1;%  end% bpc(l)=bestPercent1;% fac(l,:)=par(l,:);% mbesterr(l)=besterr;% disp('输出每个个体的转换因子');% par(l,:)% %pause% end% bestper(num)=max(bpc);% mberr=min(mbesterr);% %---------------------------------------% % disp('输出每一代的个体的最优正确率');% % generind(num)=bpc;% % generind% disp('输出某代最大正确率');% bestper% % fac% bpc% %选择个体;% %---------------------------------------------------------------% pc=rand(1,6);%  for kk=1:6%     fpc=bpc/(sum(bpc));%     fbpc=cumsum(fpc,2);%     rst_num=min(find(pc(kk)<fbpc));%     pop(kk,:)=par(rst_num,:);%     %par(rst_num,:)=0;%  end%  disp('output pop');%  pop% %  pc% %  fbpc%  %pause;%  for kk1=1:6%     fpc=bpc/(sum(bpc));%     fbpc=cumsum(fpc,2);%     rst_num=min(find(pc(kk)<fbpc));%     %pop(kk,:)=par(rst_num,:);%     par(rst_num,:)=0;%  end% %以概率pj进行重组和交叉% %---------------------------------------------------------------------% pj1=rand(1);%  if pj1<pj%    mode=floor(rand(3,(n1-1))+0.5*ones(3,(n1-1)));%    mask=mode(1:3,:);%    newchromodd=pop(1:2:5,:).*mask+pop(2:2:6,:).*(~mask);%    newchromeven=pop(1:2:5,:).*(~mask)+pop(2:2:6,:).*mask;% %  else% %     break%  end%  par1=par(any(par'),:);%  %-------------------------------------------------------------------%  %----------------------------------------------------------------------%  [nn,ans]=size(par1);%  mm=zeros(1,nn);%  mm(:,1:4)=1;%  pslect=randperm(nn).*mm;%  bslect=ones(2,1)*pslect;%  mslect=bslect(:,any(bslect));%  eslect=mslect.*([1;0]*ones(1,4));%  fslect=eslect(any(eslect'),:);%  fmm=zeros(1,nn);%  fmm(:,[fslect])=1;%  par1=par1.*(ones((n1-1),1)*fmm)';%  par11=par1(any(par1'),:);%  par2=[newchromodd;newchromeven;par11];%  % %依概率pb进行基因组变异% %-------------------------------------------------------------------------% pb1=rand(1);% if pb1<pb%     n2=randint(10,1,(n1-1))+1;%     tmp=zeros(10,(n1-1));%     tmp(:,(n1-1))=1;%     par2=tmp+par2;%     par2=mod(par2,2);% % else% %     par=par2;% end% if pj1>=pj&pb1>=pb%     par=par;% else% par=par2;% end% disp('输出遗传进化代数');% num% par% %pause;% if bestper(num)>maxbestper&abs(bestper(num)-0.9198)>1e-4%     maxbestper=bestper(num);%     bestnum=num;%     bestfac=fac;%     bestbpc=bpc;%     minbesterr=mberr;% end% end% %maxbestper=max(bestper);% %--------------------------------------------------------------------------% %-------------------------------------------------------------------------t_computer = toc;% % disp('输出是哪次循环');% % besti% % bestj% % disp('输出选择的参数');% % Cbest% % p1best% %  disp('输出错误数');% %  besterr% %  disp('输出某次最大正确率');% %  bestPercent1%  disp('输出最大正确率');%  maxbestper%  disp('输出最大正确率的世代数');%  bestnum%  disp('输出最大正确率的选择因子');%  bestfac%  bestbpc%  disp('output number of min err');%  minbesterr fprintf('computing time is t_computer:\n'); t_computer% ------------------------------------------------------------%%save data maxbestper bestnum bestfac bestbpc minbesterr; %f1=figure;%actfunc = 0;%h1=svcplot(trnX,trnY,ker1,alpha2,bias2,aspect,mag,xaxis,yaxis,input);%err=svcerror(trnX,trnY,tstX,tstY,ker1,alpha2,bias2);%-----------------------------------------------------------------% % 训练与测试(高斯型) % % [nsv2,alpha2,bias2] = svc(trnX,trnY,ker2,C);                        % 训练% % actfunc = 0;                                                    % 1 为实际输出,0 为取sign输出 % predictedY2 = svcoutput(trnX,trnY,tstX,ker2,alpha2,bias2,actfunc);  % 测试% % %---------------------------------------------------% % 结果统计% % Result2 = ~abs(predictedY2-tstY)               % 正确分类显示为1% Percent2 = sum(Result2)/length(Result2)   % 正确分类率% %---------------------------------------------------------------% f2=figure;% h2=svcplot(trnX,trnY,ker2,alpha2,bias2,aspect,mag,xaxis,yaxis,input)% err2=svcerror(trnX,trnY,tstX,tstY,ker2,alpha2,bias2)

⌨️ 快捷键说明

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