目录

Support Vector Machine (1) : 简单SVM原理

Support Vector Machine (2) : Sequential Minimal Optimization

Support Vector Machine (3) : 再谈泛化误差(Generalization Error)

Support Vector Machine Python 代码实现

       Support Vector Machine(1) : 简单SVM原理 

1. background

  对一个二值的分类问题,perceptron algorithm 也能找到一个能完全分离样本的超平面。但是这个超平面与参数初始化的值和优化过程有关,并不能找到一个最好的解。

  SVM使用margin的概念来实现找到一个最好的解,即达到一个最小generalization error(泛化误差)。泛化误差简单来说就是衡量从有限训练集训练得到的模型对实际问题的拟合程度。

2. 原理

  首先我们要定义我们需要解决的问题:对于一个可分离的二元类数据集,我们要找出一个超平面,使得generalizaion error 最小。

  然后,我们需要小小的跳一步,这个最小问题通过统计学习理论,可以转化为使得margin最大的时候就是最优解这样一个等价条件,Margin就是下面这个东西:

        

  这其中是如何转化的这个问题就已经超出我们范围之外,这里我们就把它当做一个已知的东西来使用。

  然后我们定义一个prediction function:

        y(x) = WTx + b

  其中 W 和 b 是这个model的参数。如果我们已经得到一个model的参数,那么对于一个待预测的样本x, 先计算其y(x)的值,如果y(x)大于零,则将其判为1;反之则判为-1 。那么可以看到,model的decision boundary 其实就是 WTx + b = 0 确定的平面。那么由我们上面对数据集的假设,应该是存在这么一个平面能将两类点完全分离。就如下图所示。

      

  那么问题来了,我们可以从下图看出,这样的平面不止一个:

      

        (图片来自网络,侵删)

  那么哪个平面是最好的呢?那么这里就可以用到最开始由统计学习理论得到的一个等价条件,即使得margin最大的为最优解。现在的问题就是如何将margin表示出来,很明显我们可以用点到直线之间的距离公式来表示。任意一个点到分离平面的距离为|y(x)| / $||\mathbf{w}||$ ,其中$||\mathbf{w}||$暂时我们就当做其欧式平面内的长度。这里我们使用一点小技巧,假设x的标签为t $\epsilon$ {1,-1}。那么如果点在平面上方,则y(x)>0,t=1. |y(x)| = t·y(x);如果点在平面下方(这里的上方下方并不严格),则y(x) < 0,t=-1, |y(x)| = t·y(x) 。那距离公式就可以写为:

           t·y(x) / $||\mathbf{w}||$

  那么margin就是所有点到平面距离中最小的那个,即 min { tn·y(xn) / $||\mathbf{w}||$ }, 那么我们的问题就变为:

          

  其中 Φ(x) 就是 x 。回到距离公式,如果我们把 W 和 b 变为 kW 和 kb,那么公式的结果不会变(可以自己验证)。那么如果到平面最近的点的 |y(x)| 为 k, 那么我们可以利用这个性质使得其值为1 。那么这样就得到在其他博客中经常看到的条件中的 1 的由来:

          $t_ny(\mathbf{x}) \geqslant 1$  

  那么如果我们想要解决上面提到的maximize 问题,其实就是使得1 / ||W|| 最小(因为由上面归一化之后,min { tn·y(xn) / ||W|| } 就是 1),那么为了方便,我们优化目标变为使得||W|| 最小。那么定义Lost function:

          $L = 1/2 ||\mathbf{w}||$     $t_ny(\mathbf{x}) \geqslant 1$         

  那么之后就是使用KKT条件将上述问题转化为其的dual representation。KTT条件描述如下:

  假设在某些限制下最小化一个函数f(x),这些限制有等式$h_i(x) = 0$ ( i = 1,2,...,n),也有不等式$g_i(x) <= 0$ ( i = 1,2,...,m)。那么这个最优化问题可以转化为一个对偶问题:

          $\nabla L^{*} = 0$  where  $L^{*} = f(x) + \sum_i\mu_ig_i(x) + \sum_j\lambda_jh_j(x)$

  其中$\mu$满足:

          $\mu_i \geqslant 0$

          $\mu_ig_i(x) = 0$  

  对于SVM中涉及到的最优化问题:

          $L^{*}(\mathbf{w},b,\mathbf{a}) = 1/2 ||\mathbf{w}||^2 - \sum_{n}a_n\{t_n(\mathbf{w}^Tx+b)-1\}$ 

  那么由 $\nabla L^{*} = 0$ 可得 $\mathbf{w} = \sum_na_nt_nx_n$ 和 $\sum_na_nt_n = 0$(分别$\mathbf{w}$和b求导)。把这两个等式代入$L^{*}(\mathbf{w},b,\mathbf{a})$ 得到:

          $L^{*}(\mathbf{a}) = \sum_na_n - 1/2 \sum_n\sum_ma_na_mt_nt_mK(x_n,x_m)$     (1)

  其中用$K(x_n,x_m)$表示两个向量相乘,这个表示也方便后面核函数方法的扩展;$\mathbf{a} 和 \mathbf{t}$ 满足:

          $a_n \geqslant 0$ for n = 1,2,...,N   (2)

          $\sum_na_nt_n = 0$   (3)

  那么式(1),(2),(3) 就是对偶问题的完整描述了。

  有一点我想指出,就是在使用KKT条件时,有一个限制是 an(  tn·y(xn) -1 ) = 0 。但是在dual representation的限制中并没有这个限制。这是因为这个限制太严格了,对解dual representation 并没有帮助。我们也可以看一下这个限制,如果数据n是所有点到平面中距离最小的一个,那么an 就可以不为零;如果不是,那么an就一定要为零。那么由KKT条件,n = 0 的点对其都没有贡献。那么只有到平面距离最小的点才对其有贡献,这也是support vector machine的由来,即只有这些点是support vectors。所以SVM的解仅依赖于一小部分数据,这也是其sparse solution的由来。 

  这里我们假设数据集完全可分离,那么如果数据集不完全可分离时,引入一个slack variables ,即soft SVM,也可以完成。此时只需要把对偶问题中$a_n \geqslant 0$ 改为 $ C \geqslant a_n \geqslant 0$ 即可。

  同时SVM也可以实现regression的问题。如果能掌握最简单的SVM,这些扩展问题看起来也不会有多大问题。        

Support Vector Machine (1) : 简单SVM原理的更多相关文章

  1. Support Vector Machine (3) : 再谈泛化误差(Generalization Error)

    目录 Support Vector Machine (1) : 简单SVM原理 Support Vector Machine (2) : Sequential Minimal Optimization ...

  2. Support Vector Machine (2) : Sequential Minimal Optimization

    目录 Support Vector Machine (1) : 简单SVM原理 Support Vector Machine (2) : Sequential Minimal Optimization ...

  3. 支持向量机(Support Vector Machine,SVM)—— 线性SVM

      支持向量机(Support Vector Machine,简称 SVM)于 1995 年正式发表,由于其在文本分类任务中的卓越性能,很快就成为机器学习的主流技术.尽管现在 Deep Learnin ...

  4. A glimpse of Support Vector Machine

    支持向量机(support vector machine, 以下简称svm)是机器学习里的重要方法,特别适用于中小型样本.非线性.高维的分类和回归问题.本篇希望在正篇提供一个svm的简明阐述,附录则提 ...

  5. 机器学习算法 --- SVM (Support Vector Machine)

    一.SVM的简介 SVM(Support Vector Machine,中文名:支持向量机),是一种非常常用的机器学习分类算法,也是在传统机器学习(在以神经网络为主的深度学习出现以前)中一种非常牛X的 ...

  6. 支持向量机SVM(Support Vector Machine)

    支持向量机(Support Vector Machine)是一种监督式的机器学习方法(supervised machine learning),一般用于二类问题(binary classificati ...

  7. Support Vector Machine(2):Lagrange Duality求解线性可分SVM的最佳边界

    在上篇文章<Support Vector Machine(1):线性可分集的决策边界>中,我们最后得到,求SVM最佳Margin的问题,转化为了如下形式: 到这一步后,我个人又花了很长的时 ...

  8. 支持向量机 support vector machine

    SVM(support Vector machine) (1) SVM(Support Vector Machine)是从瓦普尼克(Vapnik)的统计学习理论发展而来的,主要针对小样本数据进行学习. ...

  9. 机器学习之支持向量机(Support Vector Machine)

    转载请注明出处:http://www.cnblogs.com/Peyton-Li/ 支持向量机 支持向量机(support vector machines,SVMs)是一种二类分类模型.它的基本模型是 ...

随机推荐

  1. iOS-硬件声音 ,振动,提示警告

    为了引起用户注意发出警告的时候,常常伴随有提示音震动等.系统声音服务提供了一个接口,用于播放不超过30秒的声音文件,他支持的格式有CAF,AIF,WAV. iOS使用该API支持3种不同的通知: 声音 ...

  2. date_default_timezone_set()设置时区

    <?php echo function_exists(date_default_timezone_set)."<br>";//在这他总是返回1,这函数是判断这里面 ...

  3. Scrollview 嵌套 RecyclerView 及在Android 5.1版本滑动时 惯性消失问题

    标签:scrollview   android   滑动   嵌套 scrollview 嵌套recyclerview 时,recyclerview不显示,这就需要我们自己计算recyclerview ...

  4. PHP和Golang使用Thrift1和Thrift2访问Hbase0.96.2(ubuntu12.04)

    目录: 一.Thrift1和Thrift2的简要介绍 1) 写在前面 2) Thrift1和Thrift2的区别  二.Thrift0.9.2的安装 1) 安装依赖插件 2) Thrift0.9.2的 ...

  5. 【linux】三十分钟学会AWK

    本文大部分内容翻译自我开始学习AWK时看到的一篇英文文章 AWK Tutorial ,觉得对AWK入门非常有帮助,所以对其进行了粗略的翻译,并对其中部分内容进行了删减或者补充,希望能为对AWK感兴趣的 ...

  6. oracle case when 在查询时候的用法。

    select count(1), features_level from (SELECT i.features_level, i.features, T.BASEAMINE_ID, T.COLUMN_ ...

  7. phoenix创建二级索引

    create table user (id varchar primary key, firstname varchar, lastname varchar); create index user_i ...

  8. iPhone SlideShow

    If you found any question when you use the Slideshow, don't hesitate to leave a message please.

  9. Python paramiko 模块

    paramiko模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: import paramiko # 创建SSH对象 ssh ...

  10. coderforces719b

    题目大意:给定一个字符串,这个字符串中只有“r”和"b"组成,每次操作只能交换两个字符的位置或者将一个字符由"r"变"b"(或由" ...