最近在学习svm算法,借此文章记录自己的学习过程,在学习很多处借鉴了z老师的讲义和李航的统计,若有不足的地方,请海涵;svm算法通俗的理解在二维上,就是找一分割线把两类分开,问题是如下图三条颜色都可以把点和星划开,但哪条线是最优的呢,这就是我们要考虑的问题;

首先我们先假设一条直线为 W•X+b =0 为最优的分割线,把两类分开如下图所示,那我们就要解决的是怎么获取这条最优直线呢?及W 和 b 的值;在SVM中最优分割面(超平面)就是:能使支持向量和超平面最小距离的最大值;

我们的目标是寻找一个超平面,使得离超平面比较近的点能有更大的间距。也就是我们不考虑所有的点都必须远离超平面,我们关心求得的超平面能够让所有点中离它最近的点具有最大间距。

如上面假设蓝色的星星类有5个样本,并设定此类样本标记为Y =1,紫色圈类有5个样本,并设定此类标记为 Y =-1,共 T ={(X₁ ,Y₁) , (X₂,Y₂) (X₃,Y₃) .........} 10个样本,超平面(分割线)为wx+b=0;  样本点到超平面的几何距离为:

此处要说明一下:函数距离和几何距离的关系;定义上把 样本| w▪x₁+b|的距离叫做函数距离,而上面公式为几何距离,你会发现当w 和b 同倍数增加时候,函数距离也会通倍数增加;简单个例子就是,样本 X₁ 到 2wX₁+2b =0的函数距离是wX₁ +b =0的函数距离的 2倍;而几何矩阵不变;

下面我们就要谈谈怎么获取超平面了?!

超平面就是满足支持向量到其最小距离最大,及是求:max [支持向量到超平面的最小距离] ;那只要算出支持向量到超平面的距离就可以了吧 ,而支持向量到超平面的最小距离可以表示如下公式:

故最终优化的的公式为:

根据函数距离和几何距离可以得知,w和b增加时候,几何距离不变,故怎能通过同倍数增加w和 b使的支持向量(距离超平面最近的样本点)上样本代入 y(w*x+b) =1,而不影响上面公式的优化,样本点距离如下:如上图其r1函数距离为1,k1函数距离为1,而其它

样本点的函数距离大于1,及是:y(w•x+b)>=1,把此条件代入上面优化公式候,可以获取新的优化公式1-3:

公式1-3见下方:优化最大化分数,转化为优化最小化分母,为了优化方便转化为公式1-4

为了优化上面公式,使用拉格朗日公式和KTT条件优化公式转化为:

对于上面的优化公式在此说明一下:比如我们的目标问题是 。可以构造函数:

此时 与 是等价的。因为 ,所以只有在 的情况下

才能取得最大值,因此我们的目标函数可以写为。如果用对偶表达式:,

由于我们的优化是满足强对偶的(强对偶就是说对偶式子的最优值是等于原问题的最优值的),所以在取得最优值 的条件下,它满足 :

结合上面的一度的对偶说明故我们的优化函数如下面,其中a >0

现在的优化方案到上面了,先求最小值,对 w 和 b 分别求偏导可以获取如下公式:

把上式获取的参数代入公式优化max值:

化解到最后一步,就可以获取最优的a值:

以上就可以获取超平面!

但在正常情况下可能存在一些特异点,将这些特异点去掉后,剩下的大部分点都能线性可分的,有些点线性不可以分,意味着此点的函数距离不是大于等于1,而是小于1的,为了解决这个问题,我们引进了松弛变量 ε>=0; 这样约束条件就会变成为:

故原先的优化函数变为:

对加入松弛变量后有几点说明如下图所以;距离小于1的样本点离超平面的距离为d ,在绿线和超平面之间的样本点都是由损失的,

其损失变量和距离d 的关系,可以看出 ξ = 1-d , 当d >1的时候会发现ξ =0,当 d<1 的时候 ξ = 1-d ;故可以画出损失函数图,如下图1-7;样式就像翻书一样,我们把这个损失函数叫做 hinge损失;

下面我们简单的就来讨论一下核函数:核函数的作用其实很简单就是把低维映射到高维中,便于分类。核函数有高斯核等,下面就直接上图看参数对模型的影响,从下图可以了解,当C变化时候,容错变小,泛化能力变小;当选择高斯核函数的时候,随时R参数调大,准确高提高,最终有过拟合风险;

tic % 计时器
%% 清空环境变量
close all
clear
clc
%format compactload('ISSL-Isomap.mat')
%  load CMPE原始
%  mappedX=X;
%% 数据提取
zc=mappedX(1:60,:);%特征输入
lie=mappedX(61:120,:);
mo=mappedX(121:180,:);
que=mappedX(181:240,:);
duan=mappedX(241:300,:);
mm=size(zc,1);
nn=20;a=ones(mm,1);%行为总体样本数
b=2*ones(mm,1);
c=3*ones(mm,1);
d=4*ones(mm,1);
f=5*ones(mm,1);n1=randperm(size(zc,1));
n2=randperm(size(lie,1));
n3=randperm(size(mo,1));
n4=randperm(size(que,1));
n5=randperm(size(duan,1));train_wine = [zc(n1(1:nn),:);lie(n2(1:nn),:);mo(n3(1:nn),:);que(n4(1:nn),:);duan(n5(1:nn),:)];
% 相应的训练集的标签也要分离出来
train_wine_labels = [a(1:nn,:);b(1:nn,:);c(1:nn,:);d(1:nn,:);f(1:nn,:)];
% 将第一类的31-59,第二类的96-130,第三类的154-178做为测试集
test_wine = [zc(n1((nn+1):mm),:);lie(n2((nn+1):mm),:);mo(n3((nn+1):mm),:);que(n4((nn+1):mm),:);duan(n5((nn+1):mm),:)];
% 相应的测试集的标签也要分离出来
test_wine_labels = [a((nn+1):mm,:);b((nn+1):mm,:);c((nn+1):mm,:);d((nn+1):mm,:);f((nn+1):mm,:)];
%% 数据预处理
% 数据预处理,将训练集和测试集归一化到[0,1]区间
[mtrain,ntrain] = size(train_wine);
[mtest,ntest] = size(test_wine);dataset = [train_wine;test_wine];
% mapminmax为MATLAB自带的归一化函数
[dataset_scale,ps] = mapminmax(dataset',0,1);
dataset_scale = dataset_scale';train_wine = dataset_scale(1:mtrain,:);
test_wine = dataset_scale( (mtrain+1):(mtrain+mtest),: );%% Default parameters 默认参数n=10;      % Population size, typically10 to 40
N_gen=150;  % Number of generations
A=0.5;      % Loudness  (constant or decreasing)
r=0.5;      % Pulse rate (constant or decreasing)
% This frequency range determines the scalings
% You should change these values if necessary
Qmin=0;         % Frequency minimum
Qmax=2;         % Frequency maximum
% Iteration parameters
N_iter=0;       % Total number of function evaluations   %这是什么意思???
% Dimension of the search variables
d=2;           % Number of dimensions
% Lower limit/bounds/ a vector
Lb=[0.01,0.01]; % 参数取值下界
Ub=[100,100]; % 参数取值上界
% Initializing arrays
Q=zeros(n,1);   % Frequency
v=zeros(n,d);   % Velocities
% Initialize the population/solutions% Output/display
disp(['Number of evaluations: ',num2str(N_iter)]);
disp(['Best =',num2str(best),' fmin=',num2str(fmin)]);%% 利用最佳的参数进行SVM网络训练
cmd_gwosvm = ['-c ',num2str(best(:,1)),' -g ',num2str(best(:,2))];
model_gwosvm = svmtrain(train_wine_labels,train_wine,cmd_gwosvm);
%% SVM网络预测
[predict_label] = svmpredict(test_wine_labels,test_wine,model_gwosvm);
total = length(test_wine_labels);% 打印测试集分类准确率
right = length(find(predict_label == test_wine_labels));
Accuracy=right/total;
% disp('打印测试集分类准确率');
% str = sprintf( 'Accuracy = %g%% (%d/%d)',accuracy(1),right,total);
% disp(str);
%% 结果分析
% 测试集的实际分类和预测分类图
figure;
hold on;
plot(test_wine_labels,'o');
plot(predict_label,'r*');
xlabel('测试集样本','FontSize',12);
ylabel('类别标签','FontSize',12);
legend('实际测试集分类','预测测试集分类');
title('测试集的实际分类和预测分类图','FontSize',12);
grid on
snapnowfigure
plot(1:N_gen,AAA);

【SVM预测】基于蝙蝠算法改进SVM实现数据分类相关推荐

  1. 【lssvm预测模型】基于蝙蝠算法改进的最小二乘支持向量机lssvm预测

    1 简介 为了提高短期电力负荷预测结果的准确性,该文提出了蝙蝠算法优化最小二乘支持向量机(BA-LSSVM)的方法.该方法利用蝙蝠算法对最小二乘支持向量机的核函数参数进行优化,并用优化后的参数建立短期 ...

  2. 【预测模型】基于布谷鸟算法改进SVM实现预测matlab代码

    1 简介 支持向量机(Support Vector Machine,SVM) 是 Vapnik 等人于 1995 年提出的一种基于统计学习理论的新型机器学习方法,它能较好地解决小样本.非线性等实际问题 ...

  3. 【预测模型-ELM预测】基于蝙蝠算法优化极限学习机预测matlab代码

    1 简介 针对变压器故障的特征,结合变压器油中气体分析法以及三比值法.提出了基于蝙蝠算法改进极限学习机的故障诊断方法.由于输入层与隐含层的权值和阈值是随机产生.传统的极限学习机可能会使隐含层节点过多, ...

  4. ML之SVM:基于Js代码利用SVM算法的实现根据Kaggle数据集预测泰坦尼克号生存人员

    ML之SVM:基于Js代码利用SVM算法的实现根据Kaggle数据集预测泰坦尼克号生存人员 目录 实验数据 设计思路​ 实现代码(部分代码) 实验数据 设计思路 实现代码(部分代码) /**js代码实 ...

  5. 【回归预测-FNN预测】基于蝙蝠算法优化前馈网络实现数据回归预测附Matlab代码

    1 内容介绍 强大的非线性映射能力使得人工神经网络越来越多地应用于数值预测.工程控制中,但神经网络在学习过程中,不可避免的存在着全局搜索能力差.容易跳入局部最优等不足,因而用神经网络技术预测的数据并不 ...

  6. 基于蝙蝠算法优化BP神经网络的数据分类算法及其MATLAB实现-附代码

    基于蝙蝠算法优化BP神经网络的数据分类算法及其MATLAB实现-附代码 文章目录 基于蝙蝠算法优化BP神经网络的数据分类算法及其MATLAB实现-附代码 1 蝙蝠算法与BP神经网络分类模型 1.1 蝙 ...

  7. 基于麻雀算法改进的无线传感器网络Dv-hop定位算法 - 附代码

    基于麻雀算法改进的无线传感器网络Dv-hop定位算法 文章目录 基于麻雀算法改进的无线传感器网络Dv-hop定位算法 1.DV-Hop算法原理 2.麻雀算法改进DV-Hop算法原理 3.算法测试 4. ...

  8. 基于蜣螂算法改进的随机森林回归算法 - 附代码

    基于蜣螂算法改进的随机森林回归算法 - 附代码 文章目录 基于蜣螂算法改进的随机森林回归算法 - 附代码 1.数据集 2.RF模型 3.基于蜣螂算法优化的RF 4.测试结果 5.Matlab代码 6. ...

  9. 基于灰狼算法优化支持向量机的数据分类算法及其MATLAB实现-附代码

    基于灰狼算法优化支持向量机的数据分类算法及其MATLAB实现-附代码 文章目录 基于灰狼算法优化支持向量机的数据分类算法及其MATLAB实现-附代码 1 GWO-SVM 模型 1.1 灰狼优化器GWO ...

  10. 【SVM预测】基于哈里斯鹰算法改进SVM实现数据回归预测Matlab代码

    1 简介 支持向量机 (Support Vector Machines, SVM) 是一种应用广泛的机器学习方法, 具有理论知识清晰完备,适应性和泛化能力良好的优点, 核心思想是在特征空间中寻找到一个 ...

最新文章

  1. 深度学习——Xavier初始化方法
  2. linux avahi-daemon进程 网络服务 简介
  3. 【SSM框架系列】Mybatis映射配置文件与核心配置文件深入
  4. ASP.NET Core MVC 视图
  5. navicat for mysql 数据库备份与还原
  6. tmp ubuntu 自动删除吗_tmp 目录文件被自动清理问题的调查
  7. C++中公有继承、保护继承、私有继承
  8. iOS平台经典游戏《合金弹头X》上架 售价25元
  9. 使用decode函数
  10. IOS6初始化后设置UIScrollview的位置
  11. python闭包的应用场景_Python闭包函数定义与用法分析
  12. new delete 来申请动态二维数组空间
  13. adb连接手机显示:List of devices attached
  14. 海信电视root后误删软件无法进入主页键解决办法
  15. 计算机主板CPU接口最多支持,CPU供电接口
  16. 怎么查看电脑是不是禁ping_电脑ping怎么打开怎么检测网络连接是否正常 ping网络教程...
  17. 脑机接口取得重大突破
  18. python用正则写银行系统_python使用正则表达式(Regular Expression)方法超详细
  19. js:nodejs简单的Http服务器搭建
  20. dss nginx 403 forbidden

热门文章

  1. php前台切图,php网页切图/js切图
  2. 韦东山Linux嵌入式学习——硬件复习
  3. CCF推荐国际学术会议与学术期刊
  4. C++,error c2662 cannot convert 'this' pointer from 'const A' to 'A '
  5. Unity播放序列帧,功能丰富
  6. SQL注入(SQL注入(SQLi)攻击)攻击-脱库
  7. c语言作业班级管理系统,班级信息管理系统(C语言)
  8. 02. Win32 API简介
  9. Alex 的 Hadoop 菜鸟教程: 第4课 Hadoop 安装教程 - HA方式 (2台服务器)
  10. oracle weblogic 补丁,Oralce weblogic 补丁下载方法