qpsoSVMcgForClass.zip

  • dsdfdasd
    了解作者
  • matlab
    开发工具
  • 1KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 3
    下载次数
  • 2020-12-23 14:57
    上传日期
利用量子粒子群优化svm参数得到高精度svm模型
qpsoSVMcgForClass.zip
  • qpsoSVMcgForClass.m
    5.2KB
内容介绍
function [bestCVaccuarcy,bestc,bestg,qpso_option] = qpsoSVMcgForClass(train_label,train,qpso_option) % psoSVMcgForClass % 参数初始化 if nargin == 2 qpso_option = struct('c1',3,'c2',3,'maxgen',100,'sizepop',20, ... 'k',0.6,'wV',1,'wP',1,'v',5,'beta ',1,... 'popcmax',10^2,'popcmin',10^(-1),'popgmax',10,'popgmin',10^(-2)); end % c1:初始为1.5,pso参数局部搜索能力 % c2:初始为1.7,pso参数全局搜索能力 % maxgen:初始为200,最大进化数量 % sizepop:初始为20,种群最大数量 % k:初始为0.6(k belongs to [0.1,1.0]),速率和x的关系(V = kX) % wV:初始为1(wV best belongs to [0.8,1.2]),速率更新公式中速度前面的弹性系数 % wP:初始为1,种群更新公式中速度前面的弹性系数 % v:初始为3,SVM Cross Validation参数 % qpopcmax:初始为100,SVM 参数c的变化的最大值. % qpopcmin:初始为0.1,SVM 参数c的变化的最小值. % qpopgmax:初始为1000,SVM 参数g的变化的最大值. % qpopgmin:初始为0.01,SVM 参数g的变化的最小值. Vcmax = qpso_option.k*qpso_option.popcmax; Vcmin = -Vcmax ; Vgmax = qpso_option.k*qpso_option.popgmax; Vgmin = -Vgmax ; eps = 10^(-3); % 产生初始粒子和速度 for i=1:qpso_option.sizepop % 随机产生种群和速度 pop(i,1) = (qpso_option.popcmax-qpso_option.popcmin)*rand+qpso_option.popcmin; pop(i,2) = (qpso_option.popgmax-qpso_option.popgmin)*rand+qpso_option.popgmin; V(i,1)=Vcmax*rands(1,1); V(i,2)=Vgmax*rands(1,1); % 计算初始适应度 cmd = ['-v ',num2str(qpso_option.v),' -c ',num2str( pop(i,1) ),' -g ',num2str( pop(i,2) )]; fitness(i) = svmtrain(train_label, train, cmd); fitness(i) = -fitness(i); end % 找极值和极值点 [global_fitness bestindex]=min(fitness); % 全局极值 local_fitness=fitness; % 个体极值初始化 global_x=pop(bestindex,:); % 全局极值点 local_x=pop; % 个体极值点初始化 % 每一代种群的平均适应度 avgfitness_gen = zeros(1,qpso_option.maxgen); % 迭代寻优 for i=1:qpso_option.maxgen for j=1:qpso_option.sizepop %速度更新 mbest= mean(local_x); ra= rand; u=rand(1,2); V(j,:)=ra.*local_x(j,:)+(1-ra).*global_x+((-1).^ceil(0.5+rand(1,2))).*qpso_option.beta.*(mbest-V(j,:)).*(-log(u)); % V(j,:) = pso_option.wV*V(j,:) + pso_option.c1*rand*(local_x(j,:) - pop(j,:)) + pso_option.c2*rand*(global_x - pop(j,:)); if V(j,1) > Vcmax V(j,1) = Vcmax; end if V(j,1) < Vcmin V(j,1) = Vcmin; end if V(j,2) > Vgmax V(j,2) = Vgmax; end if V(j,2) < Vgmin V(j,2) = Vgmin; end %种群更新 pop(j,:)=pop(j,:) + qpso_option.wP*V(j,:); if pop(j,1) > qpso_option.popcmax pop(j,1) = qpso_option.popcmax; end if pop(j,1) < qpso_option.popcmin pop(j,1) = qpso_option.popcmin; end if pop(j,2) > qpso_option.popgmax pop(j,2) = qpso_option.popgmax; end if pop(j,2) < qpso_option.popgmin pop(j,2) = qpso_option.popgmin; end % 自适应粒子变异 if rand>0.5 k=ceil(2*rand); if k == 1 pop(j,k) = (20-1)*rand+1; end if k == 2 pop(j,k) = (qpso_option.popgmax-qpso_option.popgmin)*rand + qpso_option.popgmin; end end %适应度值 cmd = ['-v ',num2str(qpso_option.v),' -c ',num2str( pop(j,1) ),' -g ',num2str( pop(j,2) )]; fitness(j) = svmtrain(train_label, train, cmd); fitness(j) = -fitness(j); cmd_temp = ['-c ',num2str( pop(j,1) ),' -g ',num2str( pop(j,2) )]; model = svmtrain(train_label, train, cmd_temp); if fitness(j) >= -65 continue; end %个体最优更新 if fitness(j) < local_fitness(j) local_x(j,:) = pop(j,:); local_fitness(j) = fitness(j); end if abs( fitness(j)-local_fitness(j) )<=eps && pop(j,1) < local_x(j,1) local_x(j,:) = pop(j,:); local_fitness(j) = fitness(j); end %群体最优更新 if fitness(j) < global_fitness global_x = pop(j,:); global_fitness = fitness(j); end if abs( fitness(j)-global_fitness )<=eps && pop(j,1) < global_x(1) global_x = pop(j,:); global_fitness = fitness(j); end end fit_gen(i) = global_fitness; avgfitness_gen(i) = sum(fitness)/qpso_option.sizepop; end % 结果分析 % figure; % hold on; % plot(-fit_gen,'r*-','LineWidth',1.5); % plot(-avgfitness_gen,'o-','LineWidth',1.5); % legend('最佳适应度','平均适应度',3); % xlabel('进化代数','FontSize',12); % ylabel('适应度','FontSize',12); % grid on; bestc = global_x(1); bestg = global_x(2); bestCVaccuarcy = -fit_gen(qpso_option.maxgen); line1 = '适应度曲线Accuracy[PSOmethod]'; line2 = ['(参数c1=',num2str(qpso_option.c1), ... ',c2=',num2str(qpso_option.c2),',终止代数=', ... num2str(qpso_option.maxgen),',种群数量pop=', ... num2str(qpso_option.sizepop),')']; line3 = ['Best c=',num2str(bestc),' g=',num2str(bestg), ... ' CVAccuracy=',num2str(bestCVaccuarcy),'%']; title({line1;line2;line3},'FontSize',12);
评论
    相关推荐
    • qpso.rar
      量子粒子群算法应用。对三个水听器的位置定位,在假设水听器位置已知情况下,以及其他方法估计得到的时延,通过量子粒子群算法计算,验证量子粒子群算法的计算精度。
    • QPSO.zip
      量子粒子群优化算法(QPSO)是一种比较新的基于粒子群优化算法的改进算法,虽然它的性能比其他的粒子群算法要好,但还是存在不足。
    • qpso.rar
      量子粒子群算法:因为粒子的位置和速度在量子空间中不能一起确定,所以用波函数表示粒子位置,通过蒙特卡罗方法求出粒子位置。gbest求解通过平均最好位置mbest得到。mbest是所有个体平均最优,通过它来求解粒子出现...
    • 量子粒子群优化算法训练小波神经.rar
      在网络异常检测中,为了提高对异常状态的检测率,降低对正常状态...利用量子粒子群优化算法(QPSO)训练小波神经网络,将小波神经网络(WNN)中的参数组合作为优化算法中的一个粒子,在全局空间中搜索具有最优适应值的参数向量
    • 粒子群算法.zip
      量子粒子群算法与基础粒子群算法matlab程序,里面包含注释及matlab程序,可以运行。其中pdf文件为量子粒子群算法讲解
    • 基于量子行为优化的粒子群算法.rar
      基于量子行为的粒子群优化算法,用于求解复杂优化问题。
    • 适用量子粒子群算法.zip
      适用量子粒子群算法获得所需的最优值,可以依概率收敛到全局最优,能有效求解复杂优化问题
    • qpso.rar
      基于量子行为的粒子群算法的MATLAB的源程序,已测试可以用
    • QPSO.zip
      标准量子粒子群算法,非常适合做算法研究的学习。
    • qpopper2.53.tar.Z
      pop3 server