📄 quick_pso_svm2.asv
字号:
clc
clear
close all
tic
%---------------------------------------------------
load cancer_input;
load cancer_output;
load best;
%num = 0; %%控制迭代次数
%num_svm = 0; %%计算支持向量总数
%%---------------------------------------------------
%%将训练样本分成2的整数倍份。
%%前一份作为训练样本,后一分作为训练样本,分别进行PSO优化
%%找出支持向量
%for n = 1:13
%while num < 12 & Percent < 0.9
%num = num+1;
%max_iterations = 10;
%no_of_particles = 20;
%dimensions = 2;
%delta_min = -0.003;
%delta_max = 0.003;
c1 = 1.3;
c2 = 1.3;
%---------------------------------------------------
% 产生总体测试样本
TestX = cancer_input(301:367,:)
for i = 1:67
TestY(i) = cancer_output(300+i) - 3;
end
%---------------------------------------------------
%initialise the particles and teir velocity components
%for count_x = 1:no_of_particles
% for count_y = 1:dimensions
% particle_position(count_x,count_y) = rand*10;
% particle_velocity(count_x,count_y) = rand*1000;
% 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
for n = 1:3
Percent = 0;
%---------------------------------------------------
% 产生训练样本与测试样本
% 特别注意:此工具箱用于分类时,只能处理2类分类,且目标值必须为 1 或 -1。
for i = 1:100
for j = 1:9
n1(j,i) = cancer_input(n*100+i,j);
end
end
for i = 1:100
x1(i) = cancer_output(n*100+i)-3;
end
xn_train = n1; % 训练样本,每一列为一个样本
dn_train = x1; % 训练目标,行向量
xn_test = TestX; % 测试样本,每一列为一个样本
dn_test = TestY; % 测试目标,行向量
%---------------------------------------------------
% 参数设置
trnX = xn_train';
trnY = dn_train';
tstX = xn_test';
tstY = dn_test';
ker = 'rbf'; % 核函数 k = exp(-(u-v)*(u-v)'/(2*p1^2))
global p1 ;
p1 = best(n,1); % p1 is width of rbfs (sigma)
C = best(n,2); % 折衷系数
%---------------------------------------------------
% 训练与测试
[nsv,alpha,bias] = svc(trnX,trnY,ker,C); % 训练
actfunc = 0; % 1 为实际输出,0 为取sign输出
PredictedY(:,n) = svcoutput(trnX,trnY,TestX,ker,alpha,bias,actfunc); % 测试
%---------------------------------------------------
% 结果统计
Result = ~abs(PredictedY(:,n)-tstY) % 正确分类显示为1
PercentY(n) = sum(Result)/length(Result) % 正确分类率
soln = 1-Percent
%-----------------------------------------------------
actfunc = 1;
PredictedY2(:,n) = svcoutput(trnX,trnY,TestX,ker,alpha,bias,actfunc)
%-----------------------------------------------------
end
%------------------------
%加权输出
p_max = max(PercentY);
p_min = min(PercentY);
for i = 1:67
predicted_Y(i) = 0;
end
for i = 1:3
P(i) = (PercentY(i)-p_min)/(p_max-p_min);
PredictedY3(:,i) = PredictedY2(:,i)*P(i) ;
end
for n = 1:3
for i = 1:67
predicted_Y(i) = predicted_Y(i)+PredictedY3(i,n);
end
end
predicted_Y2 = sign(predicted_Y);
Result = ~abs(predicted_Y2-TestY) % 正确分类显示为1
Percent = sum(Result)/length(Result) % 正确分类率
t=toc;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -