函数间隔与几何间隔:
一般而言,一个点距离超平面的远近可以表示我分类预测的确信或准确程度。
- 在超平面
w∗x+n=0
确定的情况下,
|w∗x+b|
能够相对的表示点
x
距离超平面的远近。
- 而
所以,可以使用
因此,引出了定义样本到分类间隔距离的函数间隔functional margin的概念。
函数间隔Functional margin
函数间隔:
但是,函数间隔虽然可以表示分类预测的正确性和确信度,但是在 选择分类超平面时,只有函数间隔是远远不够的,因为如果成比例的改变w和b,虽然此时超平面没有改变,但是函数间隔的值f(x)却变成了原来的两倍。我们可以对法向量w加一些约束条件,使其表面上看起来规范化。
几何间隔Geometrical margin
几何间隔: γ~=yγ=γ^||w||
函数间隔实际上就是 |f(x)| ,只是人为定义的一种间隔度量;而几何间隔 |f(X)|||w|| 才是直观上的点到超平面的距离。
最大间隔分类器Maximum Margin Classifier
由此,我们已经看出,函数间隔与几何间隔相差一个
||w||
的缩放因子。对一个数据点进行分类的时候,当它 的margin越大的时候,分类的置信度就越大。
对于一个包含n个点的数据集,我们将n个点中margin值最小的那个定义为这个数据集的margin。于是,为了使得分类的confidence高,我们希望所选的超平面hyper plane能够最大化这个margin。
1.函数间隔明显不太适合用来最大化,因为在超平面不变的情况下,我们可以等比例缩放w与b的值,这样使得
f(x)=wxT+b
的任意大。也就是函数间隔可以在分类超平面不变的情况下被取的任意大。
2.几何间隔就不存在这个问题,因为除了
||w||
这个分母,缩放w与b对
γ~
的值不会产生影响,它之随着超平面的改变而改变。
这样,Maximum Margin Classifier的目标函数就可以定义为:
当然,还需要满足一些条件,根据margin的定义,我们有:
我们可以令 γ^=1 对目标的优化没有影响。此时目标函数转换为:
通过求解这个问题,我们就可以找到一个margin最大的分类器。通过最大化margin,我们使得该分类器对数据进行分类时具有了最大的置信度,从而设计 决策最优分类超平面。
什么是Support Vector
可以看到两个超平面,它们到中间separating hyper plane的距离相等,即几何间隔
γ~
;而支撑这两个超平面必然会有一些点,这些点就叫做支持向量
这些支持向量刚好在边界上,所以它们满足
y(wTx+b)=1
,而对于所有不是支持向量机的点,很显然有
y(wTx+b)>1
。
深入SVM
2.1从原始问题到对偶问题的求解
之前得到的目标函数:
等价于求解 12||w||2 的最小值,所以等价于求解:
该问题可以通过Lagrange Duality变换到对偶变量的优化问题之后,可以找到一种更加有效的方法来进行求解。
什么是Lagrange duality?简单来说,就是给每个约束条件加上一个拉格朗日乘值(Lagrange multiplier),即引入拉格朗日乘子 α 。通过拉格朗日函数将约束条件融合到目标函数中:
我们令:
当所有约束条件都满足时,则有 θ(w)=12||w||2 ,亦即我们最初要最小化的值。因此,在约束条件条件满足的情况下,最小化 12||w||2 等同于最小化 θ(w) ,由此目标函数就变成了:
这里的 p∗ 表示这个问题的最优值,现在把最小和最大的位置交换:
交换以后不在等价于原问题,这个新问题的最优解用 d∗ 来表示, d∗≤p∗ , d∗ 在这里提供了 p∗ 的一个下界。在满足某些条件的情况下,两者相等,d便是p的对偶形式,这时我们就可以通过求解第二个问题来间接地求解第一个问题。
下面我们将先求L对于w,b的极小,再求对 α 的极大。只所以将原始问题转换为对偶问题,一是因为 d∗ 是 p∗ 的近似,二者,转换为对偶问题之后更容易求解。
2.2KKT条件
上段说“在满足某些条件的情况下,这里的条件指的就是KTT条件”
其中f(x)是要最小化的函数,h(x)是等式约束,g(x)是不等式约束,p和q分别是等式约束和不等式约束的数量。
经过论证,我们这个问题是满足KTT条件的,因此我们转换为第二个问题进行求解是没有问题的。也就是说,原问题满足KTT条件,已经转换为了对偶问题。
2.3对偶问题求解的三个步骤
1.首先固定
α
,让L关于w和b最小化,分别对w,b求偏导,即令
将以上结果代会上述的L:
得到:
具体推导过程:
此时的拉格朗日函数只包含了一个变量 αi 。求出 αi 便能求出w和b(根据公式 w=∑mi=1αiyixi 可以求出w)分类函数 f(x)=wTx+b 也就能够轻而易举的求出来了。
2.求对 α 的极大,即是关于对偶问题的最优化问题。
如上文所说,这个问题有更加高效的优化算法,即SMO算法
2.4序列最小最优化SMO算法
关于
α
的求解可以用一种快速学习方法即SMO算法
在参数
α
上求最大值W的问题,与上文最后一个式子比较一下,可以看到唯一的区别就是dual variable
α
多了一上限C,其中C为控制目标函数中的两项(“用于寻找margin最大的超平面”和“保证数据点偏差最小”)之间的权重。
关于SMO算法是如何推导的,请跳到下文SMO算法。
2.5使用松弛变量处理outliers方法
最开始我们假定数据是线性可分的,亦我们可以找到一个可行的超平面将数据完全分开。后来为了处理非线性数据,使用Kernel方法将原本的线性SVM进行了拓展,通过映射将原始数据映射到高维使线性分隔的概率大大增加,使得非线性的数据也能处理。
如图所示,数据中有噪声的存在,对于这种偏离正常位子很远的数据点,我们称之为outlier。在最初的SVM模型中,outlier的存在会造成很大的影响。如图,由于outlier的出现导致分隔超平面被挤歪了,margin也变小了。
为了解决这个问题,SVM允许数据点在一定程度上偏离超平面,图中黑色的线就是outlier偏离的距离。如果把它移动回来,就刚好落在原来的超平面上,就不会使超平面变形。
“换言之,在有松弛的情况下,outlier点也属于支持向量SV。同时对于不同的支持向量,拉格朗日参数的值也不同”
图中朗格朗日参数的值??
原先的约束条件为:
当允许某些样本不满足约束时,优化目标可以转换为:
在最大化间隔的同时,使不满足约束的样本尽可能少。其中C>0, l0/1 是“0/1损失函数“。
当C无穷大时,迫使所有样本满足约束(与之前一样);当C取有限值时,允许一些样本不满足约束。但 l0/1 非凸非连续,上式不易直接求解。所以我们使用其他的损失函数来代替它,若采用hinge损失,则变为:
现在考虑到outlier的问题,约束条件变成了
其中 ξi≥0 称为松弛变量,对应数据点 xi 允许偏离的函数间隔的值。上上式可以转换为如下等式。当我们不限制 ξi 的大小时,任意的超平面都是符合条件的,所以在原来的目标函数中加上一项,使这些 ξi 的总和值也要最小:
使用拉格朗日乘法将限制条件加入到目标函数中,得到新的拉格朗日函数:
L(w,b,ξ,α,r)=12||w||2+C∑ni=1ξi−∑ni=1αi(yi(wTxi+b)−1+ξi)−∑ni=1riξi
其中 ri 为约束条件 ξi≥0 的拉格朗日乘子。
分析方法和前面一样,转换为另一个问题之后,我们先让L对w,b, ξ 最小化:
并把w代回L并进行简化,得到和原来一样的目标函数,而且我们得到 C−αi−ri=0 而且又有 ri≥0 (作为Lagrange multiplier的条件),因此有 αi≤C ,所以现在整个dual问题写作:
我们把前后的结果进行对比(错误修正:图中的Dual formulation中的Minimize应为maxmize):
唯一的区别是现在的dual variable多了一个上限C。而Kernel化的非线性形式也是一样的,只要把 <xi,xj> <script type="math/tex" id="MathJax-Element-3861"> </script>转换为 K(xi,xj) 即可。
这样一来,完整的可以处理线性与非线性并且能容忍噪声outliers的支持向量机就完成了。
小结
- 不准确的说,SVM它本质上是一个分类方法,用 wTx+b 来定义分类函数。
- 为了寻找最大间隔,引出 min12||w||2 ,继而引入拉格朗日因子,转化为对拉格朗日乘子 α 的求解,对 α 的求解可以使用一种快速学习算法SMO(对 α 的求解等价于对w,b的求解)。
- 核函数是为处理非线性情况,如果直接将数据映射到高维情况容易维度爆炸。故在低维计算,等效高维表现。
2.6关于拉格朗日乘子 α
从前面的推导中我们得出:
因此分类函数为:
Supporting Vector在这里显现出来,所有的非支持向量所对应的系数 α 都是等于零的,因此只需要计算新的数据点与支持向量的内积即可,而不是所有的训练数据。
为什么所有的非支持向量所对应的系数 α 都是等于零的?
目标函数:
我们注意到如果 xi 是支持向量的话,红色部分是等于零的。而对于非支持向量来说,红色部分是大于零的(因为函数间隔>1)。为了满足等式的最大化, αi 必须等于0( αi≥0 )。
直观上来理解,由于分类完全由分类超平面决定,这些后方的点对超平面是没有影响的。因此这些无关的点并不会参与到分类问题的计算中去,从而对分类不会产生任何的影响。
到核函数的过渡:
从公式中我们可以看出,对于新点x的预测,我们只需要计算它与训练数据内积即可。这一点至关重要,是之后使用Kernel进行非线性推广的基本前提。
上述我们就得到了maximum margin hyper plane classifer,这就是支持向量机。目前为止,SVM只能处理线性情况。不过,得到了对偶形式之后,通过Kernel推广到非线性的情况就变成了非常容易的事情。
“通过求解 对偶问题 得到最优解,这就是线性可分情况下支持向量机的对偶算法。这样做的好处在于:一者对偶问题容易求解, 二者可以自然的引入核函数,进而推广到非线性分类问题。 ”
3.核函数Kernel
3.1特征空间的隐式映射:核函数
线性学习器的学习能力有限,现实世界复杂的应用需要有比线性函数更富由表达能力的假设空间。目标概念通常不能由给定属性的简单线性函数组合产生,而是应该一般的寻找研究数据更为一般化的抽象特征。
核函数通过将数据映射到高维空间来增加线性学习器的能力,使得线性学习器对偶空间的表达方式让分类操作更具有灵活性和可操作性。
对偶形式表达学习器的优势在于该表达中可调参数的个数不依赖于输入属性的个数,通过使用恰当的核函数来代替内积,可以隐式的将非线性数据映射到高维空间,可不增加可调参数的个数
(前提是核函数能够计算对应着两个输入特征向量的内积)。
1.简而言之:在线性不可分的情况下,支持向量机通过某种实现选择的非线性映射(核函数)将输入变量映射到一个高维特征空间中,在这个空间中构造最优分类超平面,避免了在原输入空间中进行非线性曲面分割。
2.如果不使用核函数,应用线性学习器学习一个非线性关系。就是
- 应用一个固定的非线性映射,将数据映射到特征空间F。
- 再在特征空间中使用线性学习器。
这里的 ϕ:X−>F 是从输入空间到某个特征空间的映射。
而使用对偶方式之后,决策规则可以表示为(使用训练点和测试点的内积来表示):
不使用核函数的话,那么就会先计算 ϕ(xi) 和 ϕ(x) ,然后再计算这两个特征的内积。
而使用 核函数的方法就是:
在特征空间中直接计算 <ϕ(xi),ϕ(x)> <script type="math/tex" id="MathJax-Element-94"><\phi(x_i),\phi(x)></script>(核函数),即是将上述两个步骤融合到一起建立一个非线性的学习器,即 K(x,z)=<ϕ(x),ϕ(z)> ,K即为对应的核函数,这个表达往往非常简单,所以计算非常方便。
3.2核函数如何处理非线性数据
假设原始数据是非线性的,我们通过一个映射
ϕ(.)
将其映射到高维空间中,数据就变得线性可分了。这时我们再使用原来的推导进行线性SVM,只是所有的推导都是在新的空间,而不是在原始空间中进行。
分类函数:
映射过后的空间:
其中的 α 也是通过求解如下dual问题得到的:
但是问题没有这么简单,因为新的维度是呈爆炸性增长的,这给 ϕ(.) 的计算带来了非常大的困难。而且遇到无穷维的情况,就根本无法计算,此时就需要Kernel出马了。
核函数:计算两个向量在隐式映射过后的空间中的内积的函数叫做核函数。核函数能够简化映射空间中的内积运算,恰好我们在SVM中的数据向量总是以内积的形式出现。
现在我们的分类函数为:
其中的 α 由如下的dual问题计算而得:
这样一来,就算的问题解决,避免了直接在高维空间中进行计算。
两种方法的区别:
- 映射到高维空间中,再根据内积的公式进行计算。
- 另一种是直接在原来的低维空间中进行计算,而不需要显示的写出映射过后的结果。
在维度爆炸的情况下,在前一种方法已经无法计算的情况下,后一种方法依然能够从容处理,无穷维度也没有问题。
核函数的本质
在遇到数据线性不可分的样例时,我们常用的做法是把样例映射到高维空间上去,但是这个维度大小会高到可怕,此时,核函数的价值就在于它虽然也是将特征从低维到高维的转换,但核函数事先先在低维上进行计算,而将实际的分类效果表现在高维上,避免了在高维空间中的复杂计算。