• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

支撑向量机 SVM 学习笔记二 (Matlab代码)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

今天调试了一下非线性核的SVM  并粗略显示一下分界线

 

线性核  分界线

 

 

径向基核  分界线             可以看出非线性核可以拟合非线性曲线(对应 核空间中的线性曲线)

 

 

 

代码如下  还有部分小bug  例如有时候随机生成的数据 对应奇异矩阵  解二次规划 解不出来    此时可以重新运行

 

代码

Code

 

 

 

 1function result=CalcValueBySVM(svm, x)
 2
 3
 4result=svm.b;
 5
 6n=size(svm.y);
 7
 8for j=1:n
 9    result=result+ svm.a(j)*svm.y(j)*CalcKernel(svm.ker, x, svm.x(j,:));
10end
11
12
13

 

 

SVM_Test

 

 补充以前漏的,呵呵,刚刚调试出来的


代码
%---------------- author: feathersky----------------

function svm
=SVM_DivideTwoClass(ker, X,Y)

% 解二次优化方城
= length(Y);
 
%= (Y*Y\').*(X*X\'); % liner kernel
= (Y*Y\').*CalcKernel(ker,X,X); %  kernel
= -ones(n,1);
= [];
= [];
Aeq 
= Y\';
beq = 0;
lb 
= zeros(n,1);
ub 
= 1000*ones(n,1);
a0 
= zeros(n,1);
options 
= optimset;
options.LargeScale 
= \'off\';
options.Display 
= \'off\';
[a,fval,eXitflag,output,lambda] 
= quadprog(H,f,A,b,Aeq,beq,lb,ub,a0,options);
eXitflag

svm.ker
=ker;
svm.x
=X;
svm.y
=Y;
svm.a
=a;



% aLarge=find(a>0.01);    %找到第一个不等于0的a ,   
% j=aLarge(1);
% svm.b=Y(j)-CalcKernel(ker,X(j,:),w);


% ------------------------------------------------------------%%
% 求 b
epsilon 
= 1e-8% 如果小于此值则认为是0
i_sv 
= find(a>epsilon); % 支持向量下标
tmp 
= (Y.*a)\'*CalcKernel(ker,X,X(i_sv,:)); % 行向量
= 1./Y(i_sv)-tmp\';
= mean(b);
svm.b
=b
fprintf(
\'Construct function Y = sign(tmp+b):\')

% ------------------------------------------------------------%











 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap