Halcom 发表于 2019-8-8 23:05:36

11-PSO优化的SVM的多分类问题

SVM为二分类表现优异,如何多分类呢?本视频进行了细致讲解:
百度网盘视频链接:https://pan.baidu.com/s/1zLwBypanMv7PgXCAjmAPYw 提取码:xeir
录制的视频是算法底层原理讲解,底层代码实现,方便大家真正掌握算法实质,开发出更加出色的算法。录制视频的初衷是:避免读者朋友利用大把时间学习已有常见算法,本系列视频旨在让读者朋友快速深入了解这些常见算法原理,有更多的时间去研究更加高大上算法(价值)。

具体链接在halcom.cn论坛,联系人QQ:3283892722
该论坛是一个学习交流平台,我会逐一的和大家分享学习。
欢迎大家录制视频,并提交给我,我来设置视频,你可在论坛进行打赏分享。
视频专用播放器:http://halcom.cn/forum.php?mod=viewthread&tid=258&extra=page%3D1
主程序:
clc,clear,close all
warning off
tic
load('traffic_double_10.mat')
%% 构造训练样本和测试样本
train_data =[];
train_output_data = [];
test_data=[];
test_output_data=[];
for i=1:10:length(traffic_label)
    train_data =;
    train_output_data =;
    test_data =;
    test_output_data =;
end
%% 归一化
for i=1:size(train_data,2)% 样本归一化
    minmax(i,1) = min(train_data(:,i));
    minmax(i,2) = max(train_data(:,i));
    if isequal(minmax(i,2),minmax(i,1))
      train_data(:,i) = ones(size(train_data,1),1);
      test_data(:,i) = ones(size(test_data,1),1);
    else
      train_data(:,i) = (minmax(i,2)-train_data(:,i))./(minmax(i,2)-minmax(i,1));
      test_data(:,i) = (minmax(i,2)-test_data(:,i))./(minmax(i,2)-minmax(i,1));
    end
end

%% 粒子群PSO算法参数设置
maxgen = 10;    % 最大迭代次数
sizepop = 5;    % 种群数量
Vmax = 1;       % 粒子速度上限
Vmin = -1;      % 粒子速度下限
c1 = 1.4995;    % 学习因子1
c2 = 1.4995;    % 学习因子2
% 变量坐标取值范围
nvar = 2;                      % 未知量数量
popmin1 = 0.1;   popmax1 = 2;% SVM惩罚系数C
popmin2 = 0.1;   popmax2 = 2;% SVM径向基函数基宽sigma

%% 初始化粒子群PSO种群位置
pop=[];
for i=1:sizepop
    pop1.C = unifrnd(popmin1,popmax1,1,1);      % 均匀分布解
    pop1.sigma = unifrnd(popmin2,popmax2,1,1);% 均匀分布解
    pop = ;
    % 适应度函数
    fitness(i) = fun2( pop(i,:),train_data,train_output_data , test_data, test_output_data);
end
clear pop1

V = Vmax*rands(sizepop,2);         % 初始化速度
= max(fitness);    % 亮度最高的保留
zbest = pop(bR,:);               % 全局最佳
fitnesszbest = bestfitness;      % 全局最佳适应度值
gbest = pop;                     % 个体最佳
fitnessgbest = fitness;            % 个体最佳适应度值
trace = zbest;                     % 记录最优的种群

%% 粒子群PSO算法迭代寻优
for i=1:maxgen
    disp(['Iteration ' num2str(i)]);
    % 计算适应度值
    for j=1:sizepop
      % 速度更新
      V(j,:) = V(j,:) + c1*rand*( - ) +...
            c2*rand*( - );
      V(j,find(V(j,:)>Vmax))=Vmax;% 上限
      V(j,find(V(j,:)<Vmin))=Vmin;% 下限
      % 种群更新
      pop(j).C = pop(j).C + 0.5*V(j,1);
      pop(j).sigma = pop(j).sigma + 0.5*V(j,2);
      % pop个体取值范围约束
      if pop(j).C > popmax1   % 上限
            pop(j).C = popmax1 ;
      elseif pop(j).C < popmin1 % 下限
            pop(j).C = popmin1;
      end
      if pop(j).sigma > popmax2   % 上限
            pop(j).sigma = popmax2 ;
      elseif pop(j).sigma < popmin2 % 下限
            pop(j).sigma = popmin2;
      end
      fitness(j) = fun2( pop(j,:) ,train_data,train_output_data, test_data, test_output_data ); % 计算适应度值
      % 个体最优更新
      if fitness(j) > fitnessgbest(j)
            gbest(j,:) = pop(j,:);
            fitnessgbest(j) = fitness(j);
      end
      % 群体最优更新
      if fitness(j) > fitnesszbest
            zbest = pop(j,:);
            fitnesszbest = fitness(j);
      end
    end
   
    trace = ;         % 记录最优的种群
    fitness_iter(i) = fitnesszbest;% 最优适应度值
end
time = toc;
disp(['CPU计算时间 =' num2str(time)])
% save PSO_iter_result.mat fitness_iter trace zbest gbest train_data train_output_data data0 data test_data test_output_data minmax
%% 结果显示
figure(1),
plot(fitness_iter,'b.-','linewidth',2);grid on;
xlabel('迭代次数');ylabel('适应度值');axis tight;

% 计算适应度值
= fun_predict( zbest,train_data,train_output_data,test_data );
disp(['最优惩罚因子C =' num2str(zbest.C)])
disp(['最优径向基函数基宽sigma =' num2str(zbest.sigma)])

figure(2)
plot(train_output_data,'ro-')
hold on
plot(predict_result{1},'bo-')
legend('训练样本实际分类标签','训练样本预测分类标签')

figure(3)
plot(test_output_data,'ro-')
hold on
plot(predict_result{2},'bo-')
legend('测试样本实际分类标签','测试样本预测分类标签')适应度函数如下:**** Hidden Message *****








mzch 发表于 2019-8-20 15:57:27

谢谢楼主分享!

xyb099221 发表于 2019-10-4 14:01:17

很好,对我的帮助很大
,感谢博主

xyb099221 发表于 2019-10-4 14:47:31

没有数据么

captain0415 发表于 2020-1-14 20:10:22

楼主太好了。谢谢!

wal1985 发表于 2020-1-22 19:20:28

非常好的代码

captain0415 发表于 2020-2-15 15:55:53

楼主 不好意思为什么视频看不了?:'(

fly153463 发表于 2020-2-28 04:09:39

感谢分享,好好学习一下

qq875687383 发表于 2020-6-30 14:08:37

matlab可读性不太好,感谢楼主耐心注释

随便叫什么都ok 发表于 2020-7-5 13:03:48

谢谢分享~学习学习
页: [1] 2
查看完整版本: 11-PSO优化的SVM的多分类问题