请选择 进入手机版 | 继续访问电脑版

Hello Mat

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 479|回复: 3

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

[复制链接]

754

主题

893

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

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

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

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

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

  56. %% 粒子群PSO算法迭代寻优
  57. for i=1:maxgen
  58.     disp(['Iteration ' num2str(i)]);
  59.     % 计算适应度值
  60.     for j=1:sizepop
  61.         % 速度更新
  62.         V(j,:) = V(j,:) + c1*rand*([gbest(j).C,gbest(j).sigma] - [pop(j).C,pop(j).sigma] ) +...
  63.             c2*rand*([zbest.C,zbest.sigma] - [pop(j).C,pop(j).sigma] );
  64.         V(j,find(V(j,:)>Vmax))=Vmax;  % 上限
  65.         V(j,find(V(j,:)<Vmin))=Vmin;  % 下限
  66.         % 种群更新
  67.         pop(j).C = pop(j).C + 0.5*V(j,1);
  68.         pop(j).sigma = pop(j).sigma + 0.5*V(j,2);
  69.         % pop个体取值范围约束  
  70.         if pop(j).C > popmax1     % 上限
  71.             pop(j).C = popmax1 ;
  72.         elseif pop(j).C < popmin1 % 下限
  73.             pop(j).C = popmin1;
  74.         end
  75.         if pop(j).sigma > popmax2     % 上限
  76.             pop(j).sigma = popmax2 ;
  77.         elseif pop(j).sigma < popmin2 % 下限
  78.             pop(j).sigma = popmin2;
  79.         end
  80.         fitness(j) = fun2( pop(j,:) ,train_data,train_output_data, test_data, test_output_data ); % 计算适应度值
  81.         % 个体最优更新
  82.         if fitness(j) > fitnessgbest(j)
  83.             gbest(j,:) = pop(j,:);
  84.             fitnessgbest(j) = fitness(j);
  85.         end
  86.         % 群体最优更新
  87.         if fitness(j) > fitnesszbest
  88.             zbest = pop(j,:);
  89.             fitnesszbest = fitness(j);
  90.         end  
  91.     end
  92.    
  93.     trace = [trace,zbest];           % 记录最优的种群
  94.     fitness_iter(i) = fitnesszbest;  % 最优适应度值
  95. end
  96. time = toc;
  97. disp(['CPU计算时间 =  ' num2str(time)])
  98. % save PSO_iter_result.mat fitness_iter trace zbest gbest train_data train_output_data data0 data test_data test_output_data minmax
  99. %% 结果显示
  100. figure(1),
  101. plot(fitness_iter,'b.-','linewidth',2);grid on;
  102. xlabel('迭代次数');ylabel('适应度值');axis tight;

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

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

  112. figure(3)
  113. plot(test_output_data,'ro-')
  114. hold on
  115. plot(predict_result{2},'bo-')
  116. legend('测试样本实际分类标签','测试样本预测分类标签')
复制代码
适应度函数如下:
游客,如果您要查看本帖隐藏内容请回复









算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复

使用道具 举报

0

主题

32

帖子

101

积分

注册会员

Rank: 2

积分
101
发表于 2019-8-20 15:57:27 | 显示全部楼层
谢谢楼主分享!
回复 支持 反对

使用道具 举报

0

主题

14

帖子

65

积分

注册会员

Rank: 2

积分
65
发表于 2019-10-4 14:01:17 | 显示全部楼层
很好,对我的帮助很大
,感谢博主
回复 支持 反对

使用道具 举报

0

主题

14

帖子

65

积分

注册会员

Rank: 2

积分
65
发表于 2019-10-4 14:47:31 | 显示全部楼层
没有数据么
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


Python|Opencv|MATLAB|Halcom.cn  

GMT+8, 2019-10-19 18:28 , Processed in 0.090119 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表