支持向量机——SVM算法及例子(代码)

本文详细介绍了支持向量机的基本概念、核心技巧及其在监督学习中的应用,通过理论与实例结合的方式,阐述了如何构建和支持向量机模型。包括线性可分、线性和非线性模型的构建过程,以及核函数的引入和应用。并通过MATLAB代码实现实验,展示如何通过求解二次规划问题得到最优解。

终于拖到最后一天交机器学习作业,选择了SVM算法,之前一直听说过,现在终于有了初步的了解,顺便post到这里分享一下,不足地方请大家指出

本文内容有来自《统计学习算法》(李航 著)第7章——支持向量机

同时也看了Stanford机器学习公开课

概要

支持向量机属于监督学习,是一种二类分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,支持向量机包括核心技巧,这使它成为实质上的非线性分类器。支持向量机的学习策略是间隔最大化,可形式化为一个求解凸二次规划的问题。

支持向量机学习方法包含构建由简至繁的模型:线性可分支持向量机、线性支持向量机及非线性支持向量机。简单模型是复杂模型的基础,也是复杂模型的特殊情况。当训练数据线性可分时,通过硬间隔最大化,学习一个线性的分类器,即线性可分支持向量机,又称为硬间隔支持向量机;当训练数据线性近似可分时,通过软间隔最大化,可学习一个线性的分类器,即线性支持向量机,又称为软间隔支持向量机;当训练数据线性不可分时,通过使用核及软间隔最大化,学习非线性支持向量机。

预备知识

函数间隔和几何间隔


KKT条件


线性可分支持向量机与硬间隔最大化

线性可分支持向量机


间隔最大化

支持向量和间隔边界


学习的对偶算法



线性支持向量机与软间隔最大化


非线性支持向量机与核函数

非线性支持向量机



核函数定义


Mercer定理


常用的核函数


实验

下面使用matlab构造一个线性可分训练数据集,利用线性支持向量机学习算法,通过求解目标函数的对偶问题得到最优解并计算分离超平面。

代码如下:

[plain]  view plain  copy
  1. clear all  
  2. %构造两类训练数据集  
  3. n = 60;  
  4. randn('state',6);  
  5. x1 = randn(n,2);    %2行N列矩阵  
  6. y1 = ones(n,1);       %1*N个1  
  7. x2 = 5+randn(n,2);   %2*N矩阵  
  8. y2 = -ones(n,1);      %1*N个-1  
  9.   
  10. figure;  
  11. plot(x1(:,1),x1(:,2),'bx',x2(:,1),x2(:,2),'k.');  
  12. hold on;  
  13. X = [x1;x2]; % 训练样本  
  14. Y = [y1;y2]; % 训练目标,n×1的矩阵,n为样本个数,值为+1或-1  
  15.   
  16. tic  
  17. %解二次优化方程  
  18. n = length(Y);  
  19. H = (Y*Y').*(X*X'); % liner kernel  
  20. f = -ones(n,1);  
  21. A = [];  
  22. b = [];  
  23. Aeq = Y';  
  24. beq = 0;  
  25. lb = zeros(n,1);  
  26. ub = 100*ones(n,1);  
  27. a0 = zeros(n,1);  
  28. options = optimset;  
  29. options.LargeScale = 'off';  
  30. options.Display = 'off';  
  31. [a,fval,eXitflag,output,lambda]= quadprog(H,f,A,b,Aeq,beq,lb,ub,a0,options);  
  32. eXitflag  
  33. time=toc  
  34.    
  35. %以下是分类平面:  
  36. Y2=a.*Y;  
  37.  W(1)=sum(Y2.*(X(:,1)));  
  38.  W(2)=sum(Y2.*(X(:,2)));  
  39.    
  40. aLarge=find(a>0.1);  
  41. j=aLarge(1);  
  42.    
  43. S(:,1)=Y.*a.*X(:,1);  
  44. S(:,2)=Y.*a.*X(:,2);  
  45.    
  46. S2=S*(X(j,:)');  
  47.    
  48. b=Y(j)-sum(S2);  
  49.    
  50.  xx1=min(X):0.1:max(X);  
  51.  xx2=-(W(1)*xx1+b)/W(2);  
  52.  plot(xx1,xx2);  

实验结果如下图所示:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值