📄 pso优化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 + -