Matlab 实现线性svm两类和多类分类器

线性分类和SVM原理

网上有很多写的好的博客讲解线性分类和SVM,本人讲解能力差,就给个链接。
http://blog.youkuaiyun.com/mm_bit/article/details/46988925

SVM实现代码

训练svm分类器实际上是解二次规划问题,matlab里用到的是quadprog函数,其使用用法可参见matlab官方文档:
http://cn.mathworks.com/help/optim/ug/quadprog.html
或者不想读英文文档的人可以看别人写的博客:
http://blog.youkuaiyun.com/jbb0523/article/details/50598641
会使用quadprog函数基本上就会写svm分类器了,这里贴上源码:
svmTrain.m

function [ svm ] = svmTrain( trainData,trainLabel,kertype,C )
options=optimset;
options.LargerScale='off';
options.Display='off';

n=length(trainLabel);
H=(trainLabel'*trainLabel).*kernel(trainData,trainData,kertype);
f=-ones(n,1);
A=[];
b=[];
Aeq=trainLabel;
beq=0;
lb=zeros(n,1);
ub=C*ones(n,1);
a0=zeros(n,1);
[a,fval,eXitflag,output,lambda]=quadprog(H,f,A,b,Aeq,beq,lb,ub,a0,options);
epsilon=1e-8;
sv_label=find(abs(a)>epsilon);
svm.a=a(sv_label);
svm.Xsv=trainData(:,sv_label);
svm.Ysv=trainLabel(sv_label);
svm.svnum=length(sv_label);
end

kernel.m(更新)

function K = kernel( X,Y,type )
switch type
    case 'linear'
        K=X'*Y;
    case 'rbf'
        delta=5;
        delta=delta*delta;
        XX=sum(X'.*X',2);
        YY=sum(Y'.*Y',2);
        XY=X'.*Y;
        K=abs(repmat(XX,[1 size(YY,1)])+repmat
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值