作者: July、pluskid ; 致谢:白石、J erryLead
支持向量机通俗导论(理解SVM的三层境界)
出处:结构之法算法之道 blog 。
前言
第一层、了解SVM
1.0、什么是支持向量机SVM
1.1、线性分类
1.1.1、分类标准
1.1.2、1或-1分类标准的起源:logistic回归
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365174223_1807.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175136_8232.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175149_4683.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175161_1760.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175169_2349.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175178_8905.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175189_9269.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175205_2324.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175215_8446.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175233_9165.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175266_3733.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175288_2654.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175299_9597.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175329_6408.png)
1.1.3、形式化标示
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175700_6882.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175711_9116.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175723_3132.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175737_9557.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175747_5795.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175756_2693.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175767_8636.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175792_4997.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175868_3895.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175998_9759.png)
1.2、线性分类的一个例子
![SVM算法](https://img-my.csdn.net/uploads/201210/25/1351141837_7366.jpg)
=y(wTx+b)=yf(x)中的Y是只取1和-1 吗?y的唯一作用就是确保functional margin的非负性?真是这样的么?当然不是,详情请见本文评论下第43楼)
- 咱们就要确定上述分类函数f(x) = w.x + b(w.x表示w与x的内积)中的两个参数w和b,通俗理解的话w是法向量,b是截距(再次说明:定义特征到结果的输出函数
,与我们最开始定义的
实质是一样的);
- 那如何确定w和b呢?答案是寻找两条边界端或极端划分直线中间的最大间隔(之所以要寻最大间隔是为了能更好的划分不同类的点,下文你将看到:为寻最大间隔,导出1/2||w||^2,继而引入拉格朗日函数和对偶变量a,化为对单一因数对偶变量a的求解,当然,这是后话),从而确定最终的最大间隔分类超平面hyper plane和分类函数;
- 进而把寻求分类函数f(x) = w.x + b的问题转化为对w,b的最优化问题,最终化为对偶因子的求解。
1.3、函数间隔Functional margin与几何间隔Geometrical margin
- 在超平面w*x+b=0确定的情况下,|w*x+b|能够相对的表示点x到距离超平面的远近,而w*x+b的符号与类标记y的符号是否一致表示分类是否正确,所以,可以用量y*(w*x+b)的正负性来判定或表示分类的正确性和确信度。
1.3.1、函数间隔Functional margin
=
min i
(i=1,...n)
1.3.2、点到超平面的距离定义:几何间隔Geometrical margin
为样本x到分类间隔的距离,我们有
γ
(有的书上会写成把||w||分开相除的形式,如本文参考文献及推荐阅读条目11,其中,||w||为w的二阶泛数)
是带符号的,我们需要的只是它的绝对值,因此类似地,也乘上对应的类别
的定义,
=y(wTx+b)=yf(x)
1.4、最大间隔分类器Maximum Margin Classifier的定义
的缩放因子。按照我们前面的分析,对一个数据点进行分类,当它的 margin 越大的时候,分类的 confidence 越大。对于一个包含
1、functional margin 明显是不太适合用来最大化的一个量,因为在 hyper plane 固定以后,我们可以等比例地缩放 的值任意大,亦即 functional margin
可以在 hyper plane 保持不变的情况下被取得任意大,
2、而 geometrical margin 则没有这个问题,因为除上了这个分母,所以缩放
的值是不会改变的,它只随着 hyper plane 的变动而变动,因此,这是更加合适的一个 margin 。
=
=1(对目标函数的优化没有影响,至于为什么,请见本文评论下第42楼回复)
转化为(其中,s.t.,即subject to的意思,它导出的是约束条件):
的(
便是上文所定义的geometrical margin,当令
=1时,
便为1/||w||,而我们上面得到的目标函数便是在相应的约束条件下,要最大化这个1/||w||值):
1.5、到底什么是Support Vector
,而“支撑”这两个超平面的必定会有一些点,而这些“支撑”的点便叫做支持向量Support Vector。
(还记得我们把 functional margin 定为 1 了吗?上节中:“处于方便推导和优化的目的,我们可以令
=1”),而对于所有不是支持向量的点,也就是在“阵地后方”的点,则显然有
。当然,除了从几何直观上之外,支持向量的概念也可以从下文优化过程的推导中得到。
第二层、深入SVM
2.1、从线性可分到线性不可分
2.1.1、从原始问题到对偶问题的求解
![SVM算法](https://img-my.csdn.net/uploads/201301/11/1357837136_7540.png)
![SVM算法](https://img-my.csdn.net/uploads/201301/11/1357837152_4634.png)
- 转化到这个形式后,我们的问题成为了一个凸优化问题,或者更具体的说,因为现在的目标函数是二次的,约束条件是线性的,所以它是一个凸二次规划问题。这个问题可以用任何现成的
QP (Quadratic Programming) 的优化包进行求解,归结为一句话即是:在一定的约束条件下,目标最优,损失最小; - 但虽然这个问题确实是一个标准的 QP 问题,但是它也有它的特殊结构,通过
Lagrange Duality 变换到对偶变量 (dual variable) 的优化问题之后,可以找到一种更加有效的方法来进行求解,而且通常情况下这种方法比直接使用通用的 QP 优化包进行优化要高效得多。
,如此我们便可以通过拉格朗日函数将约束条件融和到目标函数里去(也就是说把条件融合到一个函数里头,现在只用一个函数表达式便能清楚的表达出我们的问题):
,那么我们显然有
(只要令
即可)。而当所有约束条件都满足时,则有
,亦即我们最初要最小化的量。因此,在要求约束条件得到满足的情况下最小化
,实际上等价于直接最小化
(当然,这里也有约束条件,就是
≥0,i=1,…,n
)
会等于无穷大,自然不会是我们所要求的最小值。具体写出来,我们现在的目标函数变成了:
表示这个问题的最优值,这个问题和我们最初的问题是等价的。不过,现在我们来把最小和最大的位置交换一下(稍后,你将看到,当下面式子满足了一定的条件之后,这个式子d
来表示。并且,我们有
≤
在这里提供了一个第一个问题的最优值
的一个下界,在满足某些条件的情况下,这两者相等,这个时候我们就可以通过求解第二个问题来间接地求解第一个问题。
的极大。而且,之所以从minmax的原始问题
,转化为maxmin的对偶问题
,一者因为
是
的近似解,二者,转化为对偶问题后,更容易求解。
2.1.2、KKT条件
- 凸优化的概念:
为一凸集, 为一凸函数。凸优化就是要找出一点 ,使得每一 满足 。 - KKT条件的意义:它是一个非线性规划(Nonlinear Programming)问题能有最优化解法的必要和充分条件。
2.1.3、对偶问题求解的3个步骤
,要让
,然后下文的第2步,求出了
便能求出w,和b,由此可见,上文第1.2节提出来的核心问题:分类函数
也就可以轻而易举的求出来了。
的极大,即是关于对偶问题的最优化问题,从上面的式子得到:
,而反过来,求得的
将能导出w,b的解,最终得出分离超平面和分类决策函数。为何呢?因为如果求出了
,根据
,
即可求出w。然后通过
,即可求出b
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365176671_1627.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365176682_4857.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365176690_4143.png)
![SVM算法](http://blog.pluskid.org/MathJax/fonts/HTML-CSS/TeX/png/Math/Italic/141/0043.png)
![SVM算法](http://blog.pluskid.org/MathJax/fonts/HTML-CSS/TeX/png/Math/Italic/141/03B1.png)
![SVM算法](http://blog.pluskid.org/MathJax/fonts/HTML-CSS/TeX/png/Math/Italic/141/0043.png)
![SVM算法](http://blog.pluskid.org/MathJax/fonts/HTML-CSS/TeX/png/Math/Italic/141/0043.png)
2.1.5、线性不可分的情况
算出结果然后根据其正负号来进行类别划分的。而前面的推导中我们得到
表示向量内积),这一点至关重要,是之后使用 Kernel 进行非线性推广的基本前提。此外,所谓 Supporting Vector 也在这里显示出来——事实上,所有非Supporting Vector 所对应的系数
都是等于零的,因此对于新点的内积计算实际上只要针对少量的“支持向量”而不是所有的训练数据即可。
等于零呢?直观上来理解的话,就是这些“后方”的点——正如我们之前分析过的一样,对超平面是没有影响的,由于分类完全有超平面决定,所以这些无关的点并不会参与分类问题的计算,因而也就不会产生任何影响了。
又是非负的,为了满足最大化,
必须等于 0 。这也就是这些非Supporting Vector 的点的局限性。
作者: July、pluskid ; 致谢:白石、J erryLead
支持向量机通俗导论(理解SVM的三层境界)
出处:结构之法算法之道 blog 。
前言
第一层、了解SVM
1.0、什么是支持向量机SVM
1.1、线性分类
1.1.1、分类标准
1.1.2、1或-1分类标准的起源:logistic回归
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365174223_1807.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175136_8232.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175149_4683.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175161_1760.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175169_2349.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175178_8905.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175189_9269.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175205_2324.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175215_8446.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175233_9165.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175266_3733.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175288_2654.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175299_9597.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175329_6408.png)
1.1.3、形式化标示
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175700_6882.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175711_9116.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175723_3132.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175737_9557.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175747_5795.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175756_2693.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175767_8636.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175792_4997.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175868_3895.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365175998_9759.png)
1.2、线性分类的一个例子
![SVM算法](https://img-my.csdn.net/uploads/201210/25/1351141837_7366.jpg)
=y(wTx+b)=yf(x)中的Y是只取1和-1 吗?y的唯一作用就是确保functional margin的非负性?真是这样的么?当然不是,详情请见本文评论下第43楼)
- 咱们就要确定上述分类函数f(x) = w.x + b(w.x表示w与x的内积)中的两个参数w和b,通俗理解的话w是法向量,b是截距(再次说明:定义特征到结果的输出函数
,与我们最开始定义的
实质是一样的);
- 那如何确定w和b呢?答案是寻找两条边界端或极端划分直线中间的最大间隔(之所以要寻最大间隔是为了能更好的划分不同类的点,下文你将看到:为寻最大间隔,导出1/2||w||^2,继而引入拉格朗日函数和对偶变量a,化为对单一因数对偶变量a的求解,当然,这是后话),从而确定最终的最大间隔分类超平面hyper plane和分类函数;
- 进而把寻求分类函数f(x) = w.x + b的问题转化为对w,b的最优化问题,最终化为对偶因子的求解。
1.3、函数间隔Functional margin与几何间隔Geometrical margin
- 在超平面w*x+b=0确定的情况下,|w*x+b|能够相对的表示点x到距离超平面的远近,而w*x+b的符号与类标记y的符号是否一致表示分类是否正确,所以,可以用量y*(w*x+b)的正负性来判定或表示分类的正确性和确信度。
1.3.1、函数间隔Functional margin
=
min i
(i=1,...n)
1.3.2、点到超平面的距离定义:几何间隔Geometrical margin
为样本x到分类间隔的距离,我们有
γ
(有的书上会写成把||w||分开相除的形式,如本文参考文献及推荐阅读条目11,其中,||w||为w的二阶泛数)
是带符号的,我们需要的只是它的绝对值,因此类似地,也乘上对应的类别
的定义,
=y(wTx+b)=yf(x)
1.4、最大间隔分类器Maximum Margin Classifier的定义
的缩放因子。按照我们前面的分析,对一个数据点进行分类,当它的 margin 越大的时候,分类的 confidence 越大。对于一个包含
1、functional margin 明显是不太适合用来最大化的一个量,因为在 hyper plane 固定以后,我们可以等比例地缩放 的值任意大,亦即 functional margin
可以在 hyper plane 保持不变的情况下被取得任意大,
2、而 geometrical margin 则没有这个问题,因为除上了这个分母,所以缩放
的值是不会改变的,它只随着 hyper plane 的变动而变动,因此,这是更加合适的一个 margin 。
=
=1(对目标函数的优化没有影响,至于为什么,请见本文评论下第42楼回复)
转化为(其中,s.t.,即subject to的意思,它导出的是约束条件):
的(
便是上文所定义的geometrical margin,当令
=1时,
便为1/||w||,而我们上面得到的目标函数便是在相应的约束条件下,要最大化这个1/||w||值):
1.5、到底什么是Support Vector
,而“支撑”这两个超平面的必定会有一些点,而这些“支撑”的点便叫做支持向量Support Vector。
(还记得我们把 functional margin 定为 1 了吗?上节中:“处于方便推导和优化的目的,我们可以令
=1”),而对于所有不是支持向量的点,也就是在“阵地后方”的点,则显然有
。当然,除了从几何直观上之外,支持向量的概念也可以从下文优化过程的推导中得到。
第二层、深入SVM
2.1、从线性可分到线性不可分
2.1.1、从原始问题到对偶问题的求解
![SVM算法](https://img-my.csdn.net/uploads/201301/11/1357837136_7540.png)
![SVM算法](https://img-my.csdn.net/uploads/201301/11/1357837152_4634.png)
- 转化到这个形式后,我们的问题成为了一个凸优化问题,或者更具体的说,因为现在的目标函数是二次的,约束条件是线性的,所以它是一个凸二次规划问题。这个问题可以用任何现成的
QP (Quadratic Programming) 的优化包进行求解,归结为一句话即是:在一定的约束条件下,目标最优,损失最小; - 但虽然这个问题确实是一个标准的 QP 问题,但是它也有它的特殊结构,通过
Lagrange Duality 变换到对偶变量 (dual variable) 的优化问题之后,可以找到一种更加有效的方法来进行求解,而且通常情况下这种方法比直接使用通用的 QP 优化包进行优化要高效得多。
,如此我们便可以通过拉格朗日函数将约束条件融和到目标函数里去(也就是说把条件融合到一个函数里头,现在只用一个函数表达式便能清楚的表达出我们的问题):
,那么我们显然有
(只要令
即可)。而当所有约束条件都满足时,则有
,亦即我们最初要最小化的量。因此,在要求约束条件得到满足的情况下最小化
,实际上等价于直接最小化
(当然,这里也有约束条件,就是
≥0,i=1,…,n
)
会等于无穷大,自然不会是我们所要求的最小值。具体写出来,我们现在的目标函数变成了:
表示这个问题的最优值,这个问题和我们最初的问题是等价的。不过,现在我们来把最小和最大的位置交换一下(稍后,你将看到,当下面式子满足了一定的条件之后,这个式子d
来表示。并且,我们有
≤
在这里提供了一个第一个问题的最优值
的一个下界,在满足某些条件的情况下,这两者相等,这个时候我们就可以通过求解第二个问题来间接地求解第一个问题。
的极大。而且,之所以从minmax的原始问题
,转化为maxmin的对偶问题
,一者因为
是
的近似解,二者,转化为对偶问题后,更容易求解。
2.1.2、KKT条件
- 凸优化的概念:
为一凸集, 为一凸函数。凸优化就是要找出一点 ,使得每一 满足 。 - KKT条件的意义:它是一个非线性规划(Nonlinear Programming)问题能有最优化解法的必要和充分条件。
2.1.3、对偶问题求解的3个步骤
,要让
,然后下文的第2步,求出了
便能求出w,和b,由此可见,上文第1.2节提出来的核心问题:分类函数
也就可以轻而易举的求出来了。
的极大,即是关于对偶问题的最优化问题,从上面的式子得到:
,而反过来,求得的
将能导出w,b的解,最终得出分离超平面和分类决策函数。为何呢?因为如果求出了
,根据
,
即可求出w。然后通过
,即可求出b
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365176671_1627.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365176682_4857.png)
![SVM算法](https://img-my.csdn.net/uploads/201304/05/1365176690_4143.png)
![SVM算法](http://blog.pluskid.org/MathJax/fonts/HTML-CSS/TeX/png/Math/Italic/141/0043.png)
![SVM算法](http://blog.pluskid.org/MathJax/fonts/HTML-CSS/TeX/png/Math/Italic/141/03B1.png)
![SVM算法](http://blog.pluskid.org/MathJax/fonts/HTML-CSS/TeX/png/Math/Italic/141/0043.png)
![SVM算法](http://blog.pluskid.org/MathJax/fonts/HTML-CSS/TeX/png/Math/Italic/141/0043.png)
2.1.5、线性不可分的情况
算出结果然后根据其正负号来进行类别划分的。而前面的推导中我们得到
表示向量内积),这一点至关重要,是之后使用 Kernel 进行非线性推广的基本前提。此外,所谓 Supporting Vector 也在这里显示出来——事实上,所有非Supporting Vector 所对应的系数
都是等于零的,因此对于新点的内积计算实际上只要针对少量的“支持向量”而不是所有的训练数据即可。
等于零呢?直观上来理解的话,就是这些“后方”的点——正如我们之前分析过的一样,对超平面是没有影响的,由于分类完全有超平面决定,所以这些无关的点并不会参与分类问题的计算,因而也就不会产生任何影响了。
又是非负的,为了满足最大化,
必须等于 0 。这也就是这些非Supporting Vector 的点的局限性。