在matlab环境下实现支持向量机算法

作者:faaronzheng 转载请注明出处!
关于支持向量机的理论部分我就不进行介绍了,网上有很多关于支持向量机的讲解。如: 支持向量机通俗导论(理解SVM的三层境界)有兴趣的可以自行查找一下。这里我主要介绍一下如何在matlab环境下自己实现支持向量机算法。

需要用到的工具:matlab,cvx工具包
首先需要配置一下cvx的环境。cvx的配置和具体语法请参考 CVX Users’ Guide。cvx工具包和手册
接下来我们直接从最后推导出的对偶形式入手(不清楚为什么是这个形式及各个符号意思的还请参考理论部分)
这里写图片描述

function arf=getArf(xapp1,xapp2,C,eveSigma)   
format long;
data=[xapp1;xapp2];
K=CreateKernelMatrix(data,data,eveSigma);      %构造核矩阵
label1=ones(size(xapp1,1),1);
label2=ones(size(xapp2,1),1);
label2(:,1)=2;
label=[label1;label2];
n=size(data,1);
vecone=ones(n,1);
cvx_begin                                     %用cvx优化目标函数
variable arf(n);
expression part1;
expression part2;
part1=vecone'*arf; 
part2=quad_form(arf,label'*K*label);
max part1-1/2*part2;
subject to                                    %约束条件
for i=1:n
    arf(i)>=0;
    arf(i)<=C;
end
arf'*label==0;
cvx_end                        

end
上面这段代码的主要目的是获得拉格朗日乘子α。一定有人想问知道α有什么用呢?这是因为超平面都可以用α来表示。

这里写图片描述
拉格朗日乘子α不为零的即为支持向量。这样就可以求出w和b了。将w和b求出后我们就可以得到超平面。有了超平面就可以进行分类啦!

PS.上面代码中构造核矩阵的代码我是参考的SimpleMKL中的代码。具体可以参考Code部分

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值