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

📄 quick_pso_svm2.asv

📁 利用PSO优化SVM
💻 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 + -