• 大小: 6KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-06-14
  • 语言: Matlab
  • 标签:

资源简介

给出了最小二乘支持向量机在matlab中的仿真程序

资源截图

代码片段和文件信息

function [bestCVaccuarcybestcbestgpso_option] = psoLSSVMcgForClass(trainsettrainset_labelYcpso_option)
% psoLSSVMcgForClass 
%by Tangxiaobiao  QQ 444646122 blog.sina.com.cn/lssvm
% 2010.05.31

%% 参数初始化
if nargin == 3
    pso_option = struct(‘c1‘1.5‘c2‘1.7‘maxgen‘200‘sizepop‘20 ...
        ‘k‘0.6‘wV‘1‘wP‘1‘v‘5 ...
        ‘popcmax‘10^2‘popcmin‘10^(-1)‘popgmax‘10^3‘popgmin‘10^(-2));
end
% c1:初始为1.5pso参数局部搜索能力
% c2:初始为1.7pso参数全局搜索能力
% maxgen:初始为200最大进化数量
% sizepop:初始为20种群最大数量
% k:初始为0.6(k belongs to [0.11.0])速率和x的关系(V = kX)
% wV:初始为1(wV best belongs to [0.81.2])速率更新公式中速度前面的弹性系数
% wP:初始为1种群更新公式中速度前面的弹性系数
% v:初始为3SVM Cross Validation参数
% popcmax:初始为100SVM 参数c的变化的最大值.
% popcmin:初始为0.1SVM 参数c的变化的最小值.
% popgmax:初始为1000SVM 参数g的变化的最大值.
% popgmin:初始为0.01SVM 参数c的变化的最小值.
Yc=Yc;
Vcmax = pso_option.k*pso_option.popcmax;
Vcmin = -Vcmax ;
Vgmax = pso_option.k*pso_option.popgmax;
Vgmin = -Vgmax ;

eps = 10^(-3);
[Yccodebookold_codebook] = code(trainset_label‘code_MOC‘);
%% 产生初始粒子和速度
for i=1:pso_option.sizepop
    
    % 随机产生种群和速度
    pop(i1) = (pso_option.popcmax-pso_option.popcmin)*rand+pso_option.popcmin;
    pop(i2) = (pso_option.popgmax-pso_option.popgmin)*rand+pso_option.popgmin;
    V(i1)=Vcmax*rands(1);
    V(i2)=Vgmax*rands(1);
    
    % 计算初始适应度
     gam=pop(i1);sig2=pop(i2);
     model=initlssvm(trainsetYc‘c‘gamsig2‘RBF_kernel‘);
     model=trainlssvm(model);
     Yd0=simlssvm(modeltrainset);
     predict_label = code(Yd0old_codebook[]codebook);%解码分类结果
     testnum=size(trainset_label1);
     right=sum(trainset_label==predict_label);
     n = sum(sum(trainset_label~=predict_label));
     fitness(i) = (1-n/prod(size(trainset_label)))*100;
    fitness(i) = -fitness(i);
end

% 找极值和极值点
[global_fitness bestindex]=min(fitness); % 全局极值
local_fitness=fitness;   % 个体极值初始化

global_x=pop(bestindex:);   % 全局极值点
local_x=pop;    % 个体极值点初始化

% 每一代种群的平均适应度
avgfitness_gen = zeros(1pso_option.maxgen);

%% 迭代寻优
for i=1:pso_option.maxgen
    
    for j=1:pso_option.sizepop
        
        %速度更新
        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(j1) > Vcmax
            V(j1) = Vcmax;
        end
        if V(j1) < Vcmin
            V(j1) = Vcmin;
        end
        if V(j2) > Vgmax
            V(j2) = Vgmax;
        end
        if V(j2) < Vgmin
            V(j2) = Vgmin;
        end
        
        %种群更新
        pop(j:)=pop(j:) + pso_option.wP*V(j:);
        if pop(j1) > pso_option.popcmax
            pop(j1) = pso_option.popcmax;
        end
        if pop(j1) < pso_option.popcmin
           

评论

共有 条评论