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

📄 pso优化svm.txt

📁 一个PSO优化SVM参数的MATLAB程序及其举例。不过此程序必须在安装SVM工具箱的前提下才可运行。
💻 TXT
字号:
%%####################################################################
%%#### Particle swarm optimization
%%#### With linkage operator
%%#### Deepak devicharan july 2003
%%####################################################################

%%## to apply this to different equations do the following
%%## generate initial particles in a search space close to actual soln
%%## fool around with no of iterations, no of particles, learning rates

%%## for a truly generic PSO do the following
%%## increase the number of particles , increase the variance
%%## i.e let the particles cover a larger area of the search space
%%## then fool around as always with the above thins


%declare the parameters of the optimization
clc
clear
close all
tic

%粒子群算法参数设定

max_iterations  = 100;
no_of_particles = 20;
dimensions      = 2;

%delta_min       = -0.003;
%delta_max       = 0.003;

c1 = 1.3;
c2 = 1.3;

%initialise the particles and teir velocity components

for count_x = 1:no_of_particles
    for count_y = 1:dimensions
        particle_position(count_x,1) = rand*10;
        particle_position(count_x,2) = rand*100000;
        particle_velocity(count_x,count_y) = rand*5000;
        p_best(count_x,count_y) = particle_position(count_x,count_y);
    end
end

%initialize the p_best_fitness array
for count = 1:no_of_particles
    p_best_fitness(count) = -1000;
end


%particle_position
%particle_velocity

%main particle swrm routine
for count = 1:max_iterations
    
    %find the fitness of each particle
    %change fitness function as per equation requiresd and dimensions
    for count_x = 1:no_of_particles
        x = particle_position(count_x,1);
        y = particle_position(count_x,2);
%---------------------------------------------------
% 输入训练样本与测试样本
% 特别注意:此工具箱用于分类时,只能处理2类分类,且目标值必须为 1 或 -1。
% 参数设置

        trnX = [-0.40606	0.58459                            %训练样本,每一行为一个样本    
                -0.35207	0.57195
                -0.46003	0.5737
                 0.44325	0.16507
                 0.58285	0.18291
                 0.50493	0.12035
                -0.49784	0.11095
               -0.011431	-0.059483
                -0.27945	-0.049187
                 0.58117	-0.007236
                 0.49886	0.079836
                 0.53641	0.043784
                -0.32308	-0.52176
                -0.27769	-0.44802
                -0.31545	-0.49497
                -0.16075	-0.22226
                0.045548	-0.22545
                0.057098	-0.29869];                            
        trnY =[-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;1;1;];   %训练目标,列向量
        tstX = [-0.0083422 -0.25749];                                      %测试样本,一行为一个样本
        tstY = [1];                                                    %测试目标,列向量

        ker = 'rbf';        % 核函数 k = exp(-(u-v)*(u-v)'/(2*p1^2))
        global p1 ;
        p1 = x;             % p1 is width of rbfs (sigma)
        C = y;             % 折衷系数

%---------------------------------------------------
% 训练与测试

        [nsv,alpha,bias] = svc(trnX,trnY,ker,C);                        % 训练

        actfunc = 0;                                                    % 1 为实际输出,0 为取sign输出 
        predictedY = svcoutput(trnX,trnY,tstX,ker,alpha,bias,actfunc);  % 测试

%---------------------------------------------------
% 结果统计

        Result = ~abs(predictedY-tstY)               % 正确分类显示为1
        Percent = sum(Result)/length(Result)   % 正确分类率
        soln = 1-Percent
        
        %x = particle_position(count_x,1);
        %y = particle_position(count_x,2);
        %z = particle_position(count_x,3);
        %soln = x^2 - 3*y*x + z;
        
        %x = particle_position(count_x); 
        %soln = x^2-2*x+1;
        
       % x = particle_position(count_x);
   % soln = x-7;
        
        if soln~=0 
            current_fitness(count_x) = 1/abs(soln)+0.0001;
        else
            current_fitness(count_x) =1000;
        end
    end
    
    %decide on p_best etc for each particle
    for count_x = 1:no_of_particles
        if current_fitness(count_x) > p_best_fitness(count_x)
            p_best_fitness(count_x) = current_fitness(count_x);
            for count_y = 1:dimensions
                p_best(count_x,count_y) = particle_position(count_x,count_y);
            end
        end
    end
        
    %decide on the global best among all the particles
    [g_best_val,g_best_index] = max(current_fitness);
    
    %g_best contains the position of teh global best
    for count_y = 1:dimensions
        g_best(count_y) = particle_position(g_best_index,count_y);      
    end

    %update the position and velocity compponents
    for count_x = 1:no_of_particles
        for count_y = 1:dimensions
            p_current(count_y) = particle_position(count_x,count_y);
        end

        for count_y = 1:dimensions
            particle_velocity(count_y) = particle_velocity(count_y) +  c1*rand*(p_best(count_y)-p_current(count_y)) + c2*rand*(g_best(count_y)-p_current(count_y));
            particle_positon(count_x,count_y) = p_current(count_y) +particle_velocity(count_y);
        end
    end
                                 
              
end

g_best        
current_fitness(g_best_index)
toc
         

















⌨️ 快捷键说明

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