线性SVM算法的一般过程

线性SVM的推导

超平面方程

SVM是用来分类的。给定一系列输入数据(n维向量),需要找到一个切分界线(n-1维的超平面),这里假定数据是线性可分的。比如,二维数据的超平面是直线,三维数据的超平面是二维平面。以二维数据为例:

二维平面的直线一般式:\(Ax+By+C=0\),可以写成向量的形式:
\[
\pmatrix {A \ B}\pmatrix {x\\y}+C=0
\]
令\(\vec w=\pmatrix {A\\B}\),\(\vec x=\pmatrix{x\\y}\),\(b=C\),则有:
\[
\vec w^T \vec x + b = 0
\]
这里的向量都是列向量。懂线性代数学的请无视~
将上述公式中向量的维度推广到n维,就得到n维数据的超平面。直观理解就是两个类别的分界。

functional margin

functional margin直译是:函数间距。听起来抽象~
在前面定义的超平面公式基础上,设\(f(\vec x)=\vec w^T \vec x + b\),则:
\[
f(\vec x)表示\begin{cases}
超平面左侧的数据点, &f(\vec x)>0\cr 超平面上的数据点, &f(\vec x)=0 \cr 超平面右侧的数据点, &f(\vec x)<0\end{cases}
\]
超平面上的点显然是几乎没有的,暂不考虑,剩余的就是两个类别各自的数据点了,分居在超平面两侧。按惯例用\(y_i\)表示第\(i\)个类别,这里取:
\[
y=sign(f(\vec x))=\begin{cases}1, \ \ \ \ \ f(\vec x)<0 \cr -1, \ f(\vec x)>0 \end{cases}
\]
这里用1和-1而不是0和-1,是为了后续推导方便。\(sign(x)\)是取符号函数。

好了,终于可以定义functional margin了:
\[
\hat \gamma = y(\vec w^T\vec x + b) = yf(\vec x) = sign(f(\vec x))f(\vec x)=|f(\vec x)|
\]
用\(f(\vec x)\)和它的符号相乘,得到的结果始终是正的:\(\forall \vec x, \hat \gamma > 0\)。

geometrical margin

geometrical margin直译为几何距离,也就是点到超平面的距离,也就是点到直线距离再乘以1或者-1。1和-1分别对应两个分类,也就是分类标签\(y\)的取值。前面对于\(y\)值的设定就是为此处考虑的。

如图,\(\vec x_0\)是超平面上一点,\(\vec x\)是任意一个点。这两个点都是n维向量,先试着计算它们的距离\(\gamma\):
\[
\gamma=d(\vec x, \vec x_0)=||\vec x - \vec x_0|| \\
=\frac{\vec x - \vec x_0}{\vec e} \\
=\frac{\vec x - \vec x_0}{\frac{\vec w}{||\vec w||}} \\
=>...
\]
这里的问题在于,使用了向量除法,其中\(\vec e\)表示和\(\vec x - \vec x_0\)同方向的单位向量,虽然类似定比分点的公式,但是还是不严格。好在只要稍微转换下书写形式,把除法写成乘法,就OK了:
\[
\vec x-\vec x_0 = \gamma \vec e =\gamma \frac{\vec w}{||\vec w||} \\左乘\vec w^T:
\vec w^T(\vec x-\vec x_0)=\gamma \frac{\vec w^T \vec w}{||\vec w||} \\
考虑f(\vec x_0)=0,f(\vec x)=\vec w^T\vec x,且\frac{\vec w^T \vec w}{||\vec w||}=||\vec w|| \\因此有:
\gamma=\frac{f(\vec x)}{||\vec w||}
\]
需要指出的是:这里的\(\vec x\)不一定处在\(\vec w\)所指向的一侧,它也许在相反一侧,因而\(\gamma\)可正可负,所以需要定义一个始终是正值的几何距离,即:根据functional margin来定义geometrical margin:
\[
\hat \gamma=yf(\vec x) \\
\gamma=\frac{f(\vec x)}{||\vec w||} \\
=>\tilde \gamma=y\gamma = \frac{\hat \gamma}{||\vec w||}
\]
注意!这里出现了新变量\(\tilde \gamma\),是geometrical margin;\(\hat \gamma\)则表示functional margin;\(\gamma\)则表示向量\(\vec x\)和\(\vec x_0\)之间的距离。显然,\(\tilde \gamma\)和\(\hat \gamma\)只相差一个缩放因子\(||\vec w||\),而且他们都是大于0的值。

最大化几何距离\(\tilde \gamma\)

前面引入了超平面、几何距离等概念。显然超平面上的点其所属类别是模糊的,而当超平面上的点离开超平面,离开的越远,其所属分类就越明晰,也有人称为:当点到超平面的margin越大,分类的confidence越大。总之,要让分类效果明显,就应当设法最大化margin。成千上万的数据点,都去计算margin肯定不行,而且显然只需要考虑距离超平面最近的那些点:这些点就是支持向量,支持向量到超平面的margin是所有点中最小的那一撮,设法最大化它们的margin就能完成最终的分类任务了。

那么,该最大化哪个margin呢?\(\tilde \gamma\)还是\(\hat \gamma\)呢?\(\tilde \gamma\)表示的是几何距离,直觉上应该选择它。试着考虑其具体表达式:
\[
\hat \gamma=|\vec w^T\vec x+b| \\
\tilde \gamma=\frac{|\vec w^T\vec x+b|}{||\vec w||} \\
=|\frac{\vec w^T}{||\vec w||}\vec x+\frac{b}{||\vec w||}|
\]
对于一个确定的超平面,\(\vec w\)和\(b\)的取值并不唯一,\(||\vec w||\)可大可小,通过缩放\(\vec w\)和\(b\)能保持超平面不变。但\(\frac{\vec w}{||\vec w||}\)和\(\frac{b}{\vec w}\)是唯一的,因而考虑最大化\(\tilde \gamma\)。实际上,不妨取\(||\vec w||=1\),那么等比例缩放\(b\),就能保持等式成立,而且此时\(\hat \gamma\)和\(\tilde \gamma\)取值相等。

此时,我们对于训练数据集\(S=\{x^{(i)}, y^{(i)};i=1,...,m\}\),我们重新定义参数\((\vec w,b)\)下的geometrical margin为:
\[\gamma=\min_{i=1,...,m} \gamma^{(i)}\]
直观理解为:将超平面向1和-1两个类的方向分别移动,最先触碰到的那些点到分界超平面的距离为几何距离\(\gamma\)。而这些最先被触碰到的点,称为支持向量(support vector)。当然,先前处于分界超平面上的点不算。

进一步确定极值条件

当前的目标是:
\[
\max (\min d(\vec x, \vec x_0))
\],也就是:
\[
\max_{\gamma,\vec w,b} \frac {\hat \gamma}{||\vec w||} \\
s.t. \ \ \ \ y_i(\vec w^T \vec x_i+b) \ge \gamma, \ \ i=1,...,m
\]
这里从凸优化的方法,否定了取\(||\vec w||=1\)的做法,采取了让\(\hat \gamma=1\)的做法:支持向量到分解超平面的几何距离为1。而最小化"支持向量到分界超平面的几何距离",等价于“最小化支持向量之间在垂直于分界超平面的方向上的距离”,也就是:
\[
\max Margin = 2/||\vec w|| \ \ \ \ (cond1)
\]
同时,现在的情况是:不算分界超平面上的点,所有点满足:
\(\vec w^T \vec x_i+b \ge 1\),对于所有\(y_i=1\)
\(\vec w^T \vec x_i+b \le -1\),对于所有\(y_i=-1\)
也就是:
\[
y_i(\vec w^T \vec x_i + b)-1 \ge 0 \ \ \ \ (cond2)
\]
要满足cond1cond2,就能得到最终解。而cond1等价于:计算\(\min ||\vec w||^2/2\)。
对于不等式约束的条件极值问题,可以用拉格朗日方法求解。而拉格朗日方程的构造规则是:用约束方程乘以非负的拉格朗日系数,然后再从目标函数中减去。于是得到拉格朗日方程如下:
\[
L(\vec w,b,\alpha_i)=\frac{1}{2}||\vec w||^2-\sum_{i=1}^{l}\alpha_i(y_i(\vec w^T \vec x_i+b)-1)=\frac{1}{2}||\vec w||^2-\sum_{i=1}^{l}\alpha_i y_i(\vec w^T \vec x_i+b)+\sum_{i=1}^{l}\alpha_i
\]
其中:
\[
\alpha_i \ge 0 \ \ \ \ (4)
\]
那么我们要处理的规划问题就变为:
\[
\min_{\vec w,b} \max_{\alpha_i \ge 0} L(\vec w,b,\alpha_i) \ \ \ \ (5)
\]
上市才是严格的不等式约束的拉格朗日条件极值的表达式。对于这一步的变换,很多文章都没有多做表述,或者理解有偏差,从而影响了读者后续的推演。在此我将详细地一步步推导,以解困惑。
(5)式是一个凸规划问题,其意义是先对\(\alpha\)求偏导,令其等于0消掉α,然后再对w和b求L的最小值。要直接求解(5)式是有难度的,通过消去拉格朗日系数来化简方程,对我们的问题无济于事。所幸这个问题可以通过拉格朗日对偶问题来解决,为此我们把(5)式做一个等价变换:
\[
\min_{\vec w, b} \max_{\alpha_i \ge 0} L(\vec w,b,\alpha_i)= \max_{\alpha_i \ge 0}L(\vec w,b,\alpha_i)
\]
上式即为对偶变换,这样就把这个凸规划问题转换成了对偶问题:
\[
\max_{\alpha_i \ge 0} \min_{\vec w,b}L(\vec w, b, \alpha_i) \ \ \ \ (6)
\]
其意义是:原凸规划问题可以转化为先对w和b求偏导,令其等于0消掉w和b,然后再对α求L的最大值。下面我们就来求解(6)式,为此我们先计算w和b的偏导数。由(3)式有:
\[
\frac{\partial L(\vec w,b,\alpha_i)}{\partial \vec w}=\vec w-\sum_{i=1}^{l}\alpha_i y_i x_i \\
\frac{\partial L(\vec w,b,\alpha_i)}{\partial b}=-\sum_{i=1}^{l}\alpha_i y_i \ \ \ \ (7)
\]
为了让L在w和b上取到最小值,令(7)式的两个偏导数分别为0,于是得到:
\[
\vec w=\sim_{i=1}^{l}\alpha_i y_i x_i \\
\sum_{i=1}^{l}\alpha_i y_i=0 \ \ \ \ (8)
\]
将(8)代回(3)式,可得:

再把(9)代入(6)式有:
\[
\max_{\alpha_i \ge 0} \min_{\vec w,b}L(\vec w,b,\alpha_i)=\max_{\alpha_i \ge 0}=\max_{\alpha_i \ge 0}{\sum_{i=1}^{l}\alpha_i-\frac{1}{2}\sum_{i=1}^{l}\sum_{j=1}^{l}\alpha_i \alpha_j y_i y_j(x_i·x_j)} \ \ \ \ (10)
\]
考虑到(8)式,我们的对偶问题就变为:
\[
\max_{\alpha_i}{\sum_{i=1}^{l}\alpha_i}-\frac{1}{2}\sum_{i=1}^{l}\sum_{j=1}^{l}\alpha_i \alpha_j y_i y_j(x_i · x_j) \\
s.t. \ \ \sum_{\alpha_i}^{y_i}=0 \\
\alpha_i \ge 0
\]
上式这个规划问题可以直接从数值方法计算求解。
需要指出的一点是,(2)式的条件极值问题能够转化为(5)式的凸规划问题,其中隐含着一个约束,即
\[
\alpha_i(y_i(\vec w · x_i + b)-1)=0 \ \ \ \ (12)
\]
这个约束是这样得来的,如果(2)和(5)等效,必有:
\[
\max_{\alpha_i \ge 0}L(\vec w, b, \alpha_i) = \frac{1}{2}||\vec w||^2
\]
把(3)式代入上式中,得到:

化简得到:
\[
\min_{\alpha_i \ge 0}{\sum_{i=1}^{l}\alpha_i (y_i(\vec w · x_i + b)-1)}=0 \ \ \ \ (13)
\]
又因为约束(1)式和(4)式,有:

所以要使(13)式成立,只有令:\(\alpha_i(y_i(\vec w·x_i + b)-1) = 0\),由此得到(12)式的约束。该约束的意义是:如果一个样本是支持向量,则其对应的拉格朗日系数非零;如果一个样本不是支持向量,则其对应的拉格朗日系数一定为0。由此可知大多数拉格朗日系数都是0。

一旦我们从(11)式求解出所有拉格朗日系数,就可以通过(8)式的
\[
\vec w=\sum_{i=1}^{l}\alpha_i y_i x_i
\]
计算得到最优分割面H的法向量w。而分割阈值b也可以通过(12)式的约束用支持向量计算出来。这样我们就找到了最优的H1和H2,这就是我们训练出来的SVM。

参考

[支持向量机: Maximum Margin Classifier](Maximum Margin Classifier](http://blog.pluskid.org/?p=632)
支持向量机(SVM)的详细推导过程及注解(一)

线性SVM的推导的更多相关文章

  1. 线性SVM

    (本文内容和图片来自林轩田老师<机器学习技法>) 1. 线性SVM的推导 1.1 形象理解为什么要使用间隔最大化 容忍更多的测量误差,更加的robust.间隔越大,噪声容忍度越大: 1.2 ...

  2. 《机器学习技法》---线性SVM

    (本文内容和图片来自林轩田老师<机器学习技法>) 1. 线性SVM的推导 1.1 形象理解为什么要使用间隔最大化 容忍更多的测量误差,更加的robust.间隔越大,噪声容忍度越大: 1.2 ...

  3. SVM1 线性SVM

    一.Linear Support Vector Machine 接下来的讨论假设数据都是线性可分的. 1.1 SVM的引入:增大对测量误差的容忍度 假设有训练数据和分类曲线如下图所示: 很明显,三个分 ...

  4. 机器学习读书笔记(七)支持向量机之线性SVM

    一.SVM SVM的英文全称是Support Vector Machines,我们叫它支持向量机.支持向量机是我们用于分类的一种算法. 1 示例: 先用一个例子,来了解一下SVM 桌子上放了两种颜色的 ...

  5. 线性SVM分类器实战

    1 概述 基础的理论知识参考线性SVM与Softmax分类器. 代码实现环境:python3 2 数据处理 2.1 加载数据集 将原始数据集放入"data/cifar10/"文件夹 ...

  6. 《Machine Learning in Action》—— 剖析支持向量机,单手狂撕线性SVM

    <Machine Learning in Action>-- 剖析支持向量机,单手狂撕线性SVM 前面在写NumPy文章的结尾处也有提到,本来是打算按照<机器学习实战 / Machi ...

  7. [ML从入门到入门] 支持向量机:从SVM的推导过程到SMO的收敛性讨论

    前言 支持向量机(Support Vector Machine,SVM)在70年代由苏联人 Vladimir Vapnik 提出,主要用于处理二分类问题,也就是研究如何区分两类事物. 本文主要介绍支持 ...

  8. cs231n --- 1:线性svm与softmax

    cs231n:线性svm与softmax 参数信息: 权重 W:(D,C) 训练集 X:(N,D),标签 y:(N,1) 偏置量bias b:(C,1) N:训练样本数:  D:样本Xi 的特征维度, ...

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

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

随机推荐

  1. 【bzoj4591】超能粒子炮·改

    Portal-->bzoj4591 Solution 首先这个模数是一个质数 然后看一下那个\(k\)和\(n\)的范围..行吧Lucas定理咯 但是如果直接求: \[ \sum\limits_ ...

  2. ftp server安装与配置

    http://note.youdao.com/noteshare?id=905513cfcdba7d6a8d2fbdd0874a6259

  3. python shell

    os.system(cmd) 命令执行结果 0或者1 output = os.popen(cmd) print output.read() 通过 os.popen() 返回的是 file read 的 ...

  4. K8S dashboard 创建只读账户

    1.创建名字为“Dashboard-viewonly“的Cluster Role,各种资源只给予了list,get,watch的权限.dashboard-viewonly.yaml --- apiVe ...

  5. jni里找不到刚添加的C++函数

    使用NDK开发,用到了JNI来连接C++和JAVA. 当C++方增加了一个新函数,jni访问此函数,eclipse会提示找不到改函数,然后前面打个红叉叉表示语法错误,从而阻碍了编译和运行. 当我选择清 ...

  6. extjs6需要引入文件

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. CSS 颜色属性

    一.十六进制表示,如: a{ color: #F0E68C; } 当RGB一样时,可以简写,如#AABBCC 可以写成 #ABC 二.rgb(r,g,b)形式,其中rgb的值为1~255之间,如: a ...

  8. 不用注解添加controller抛出No adapter for handler异常

    不用注解添加controller时会抛出No adapter for handler异常. 解决方法:在DispatcherServlet的配置文件(***-servlet.xml)中加入如下两行: ...

  9. [php]禁用缓存

    header("Expires: -1"); header("Cache-Control: no_cache"); header("pragma: n ...

  10. 51nod1471 小S的兴趣

    题目来源: CodeForces 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 320 小S喜欢有趣的事.但是,每个人的兴趣都是独特的.小S热衷于自问自答.有一天,小S想出了一个问题 ...