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

Hello Mat

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1438|回复: 6

12-蝙蝠算法BA优化的SVM支持向量机

[复制链接]

786

主题

928

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
30078
发表于 2019-8-11 12:47:30 | 显示全部楼层 |阅读模式
12-蝙蝠算法BA优化的SVM支持向量机
百度网盘视频链接:链接:https://pan.baidu.com/s/1yUwEnSTlLi34l-8_F_jVmA 提取码:fapv

录制的视频是算法底层原理讲解,底层代码实现,方便大家真正掌握算法实质,开发出更加出色的算法。录制视频的初衷是:避免读者朋友利用大把时间学习已有常见算法,本系列视频旨在让读者朋友快速深入了解这些常见算法原理,有更多的时间去研究更加高大上算法(价值)。

具体链接在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. %% 添加函数文件路径
  4. addpath(genpath('libsvm-3.21'));
  5. % BA算法参数
  6. maxiter = 20;  % 迭代次数
  7. sizepop = 10;  % 种群数量
  8. % 频率范围
  9. % popmin1 = -1;  popmax1 = 1; % x1  频率
  10. % popmin2 = -1;  popmax2 = 1; % x2  频率
  11. % 变量坐标取值范围
  12. nvar = 2;                      % 未知量数量
  13. popmin1 = 0.01;   popmax1 = 2;    % SVM惩罚系数C
  14. popmin2 = 0.01;   popmax2 = 2;    % SVM径向基函数基宽sigma

  15. Qmin = 0.1;    % 最小频率
  16. Qmax = 0.5;    % 最大频率

  17. A = 0.1;          % 音量 (不变或者减小)
  18. impluse = 0.85;   % 脉冲率 (不变或增加)

  19. Vmin = -1; % 最小速度
  20. Vmax = 1;  % 最大速度
  21. %% 构造训练样本和测试样本
  22. load('traffic_double_10.mat')
  23. train_data =[];
  24. train_output_data = [];
  25. test_data=[];
  26. test_output_data=[];
  27. for i=1:10:length(traffic_label)
  28.     train_data =[train_data; traffic(i:i+7,:)];
  29.     train_output_data =[train_output_data; traffic_label(i:i+7,:)];
  30.     test_data =[test_data; traffic(i+8:i+9,:)];
  31.     test_output_data =[test_output_data; traffic_label(i+8:i+9,:)];
  32. end
  33. % 归一化
  34. for i=1:size(train_data,2)  % 样本归一化
  35.     minmax(i,1) = min(train_data(:,i));
  36.     minmax(i,2) = max(train_data(:,i));
  37.     if isequal(minmax(i,2),minmax(i,1))
  38.         train_data(:,i) = ones(size(train_data,1),1);
  39.         test_data(:,i) = ones(size(test_data,1),1);
  40.     else
  41.         train_data(:,i) = (minmax(i,2)-train_data(:,i))./(minmax(i,2)-minmax(i,1));
  42.         test_data(:,i) = (minmax(i,2)-test_data(:,i))./(minmax(i,2)-minmax(i,1));
  43.     end
  44. end
  45. %% 初始化种群
  46. pop=[];
  47. for i=1:sizepop
  48.     pop1.C = unifrnd(popmin1,popmax1,1,1);      % 均匀分布解
  49.     pop1.sigma = unifrnd(popmin2,popmax2,1,1);  % 均匀分布解
  50.     pop = [pop; pop1];
  51.     fitness(i) = fun_libsvm321( pop(i,:),train_data,train_output_data,test_output_data, test_data );
  52.     V(i,1)=0;
  53.     V(i,2)=0;
  54. end
  55. clear pop1
  56. % 记录一组最优值
  57. [bestfitness,bestindex]=max(fitness);
  58. zbest=pop(bestindex,:);   % 全局最佳
  59. fitnesszbest=bestfitness; % 全局最佳适应度值
  60. %% 迭代寻优
  61. for i=1:maxiter
  62.     for j=1:sizepop
  63.         Q = Qmin + (Qmax-Qmin)*rand(1,nvar);
  64.         V(j,1) = V(j,1) + (pop(j,:).C-zbest.C)*Q(1);
  65.         V(j,2) = V(j,2) + (pop(j,:).sigma-zbest.sigma)*Q(2);
  66.         % V--x1
  67.         if V(j,1)>Vmax
  68.             V(j,1)=Vmax;
  69.         end
  70.         if V(j,1)<Vmin
  71.             V(j,1)=Vmin;
  72.         end
  73.         % V--x2
  74.         if V(j,2)>Vmax
  75.             V(j,2)=Vmax;
  76.         end
  77.         if V(j,2)<Vmin
  78.             V(j,2)=Vmin;
  79.         end
  80.         
  81.         % 种群的位置更新
  82.         pop(j).C = pop(j).C + 0.5*V(j,1);
  83.         pop(j).sigma = pop(j).sigma + 0.5*V(j,2);
  84.         
  85.         % 脉冲率
  86.         if rand>impluse
  87.             pop(j).C = zbest.C + A * randn(1);
  88.             pop(j).sigma = zbest.sigma + A * randn(1);
  89.         end
  90.         
  91.         % pop个体取值范围约束  
  92.         if pop(j).C > popmax1     % 上限
  93.             pop(j).C = popmax1 ;
  94.         elseif pop(j).C < popmin1 % 下限
  95.             pop(j).C = popmin1;
  96.         end
  97.         if pop(j).sigma > popmax2     % 上限
  98.             pop(j).sigma = popmax2 ;
  99.         elseif pop(j).sigma < popmin2 % 下限
  100.             pop(j).sigma = popmin2;
  101.         end
  102.         
  103.         % 适应度更新
  104.         fitness(j) = fun_libsvm321( pop(j,:) ,train_data,train_output_data,test_output_data, test_data ); % 计算适应度值
  105.         
  106.         % 比较个体,找出全局最优
  107.         if fitness(j)>bestfitness
  108.             bestfitness = fitness(j);
  109.             zbest =  pop(j,:);
  110.         end
  111.         
  112.     end
  113.     fitness_iter(i) = bestfitness;
  114. end
  115. disp('最优解')
  116. disp(zbest)
  117. fprintf('\n')

  118. figure('color',[1,1,1])
  119. plot(fitness_iter,'ro-','linewidth',2)

  120. % 计算适应度值
  121. clc;fprintf('\n');
  122. disp(['最优惩罚因子C =  ' num2str(zbest.C)])
  123. disp(['最优径向基函数基宽sigma =  ' num2str(zbest.sigma)])

  124. % SVM向量机训练模型,'libsvm-3.21'
  125. libsvm_options = ['-c ', num2str(zbest.C), ' -g ',num2str(zbest.sigma), ' -q '];
  126. models = svmtrain(train_output_data,train_data,libsvm_options);

  127. [train_pred_class, train_acc, p] = svmpredict(train_output_data, train_data, models);
  128. figure(3),
  129. plot(train_output_data,'r.-','linewidth',2);axis tight;hold on
  130. plot(train_pred_class,'b.-','linewidth',2);axis tight;
  131. legend('原始训练样本','训练样本预测值');hold off;
  132. title(['训练样本预测精度  ',num2str(train_acc(1)),'%'])

  133. % SVM向量机训练模型,'libsvm-3.21'
  134. [test_pred_class, test_acc, p] = svmpredict(test_output_data, test_data, models);
  135. figure(4),
  136. plot(test_output_data,'r.-','linewidth',2);axis tight;hold on
  137. plot(test_pred_class,'b.-','linewidth',2);axis tight;
  138. legend('原始测试样本','测试样本预测值');hold off;
  139. title(['测试样本预测精度  ',num2str(test_acc(1)),'%'])


  140. rmpath(genpath('libsvm-3.21'));
复制代码
适应度函数:
游客,如果您要查看本帖隐藏内容请回复



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

使用道具 举报

0

主题

32

帖子

101

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

17

帖子

89

积分

注册会员

Rank: 2

积分
89
发表于 2019-10-22 19:15:26 | 显示全部楼层
我觉得代码还可以,就是为什么不告诉数据呢
回复 支持 反对

使用道具 举报

786

主题

928

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
30078
 楼主| 发表于 2019-10-24 19:18:20 | 显示全部楼层
xyb099221 发表于 2019-10-22 19:15
我觉得代码还可以,就是为什么不告诉数据呢

随便一个数据就可以啊
算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复 支持 反对

使用道具 举报

0

主题

11

帖子

137

积分

注册会员

Rank: 2

积分
137
发表于 2019-12-27 22:32:02 | 显示全部楼层
楼主好给力,谢谢,请问数据在哪可以下载
回复 支持 反对

使用道具 举报

0

主题

11

帖子

137

积分

注册会员

Rank: 2

积分
137
发表于 2020-1-3 11:22:04 | 显示全部楼层
你好楼主,请问一下fun_libsvm321.m文件在哪里?否则程序无法运行
回复 支持 反对

使用道具 举报

0

主题

10

帖子

46

积分

新手上路

Rank: 1

积分
46
发表于 2020-1-8 22:06:00 | 显示全部楼层
谢谢分享,好好学习!
回复 支持 反对

使用道具 举报

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

本版积分规则

Python|Opencv|MATLAB|Halcom.cn  

GMT+8, 2020-1-25 10:39 , Processed in 0.116738 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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