线性分类器
对于如下图所示的分类问题,我们可以采用一条简单的直线去分开两个类别
对于不能用直线去区分的模式,经过变换,广义上还是线性可分的,如:
对于分类面
我们可以定义广义特征向量
和广义权向量
我们就可以用广义线性分类函数去区分两类
SVM原理
SVM其实就是一个线性分类器,只不过它对线性分类器进行优化,使得它的泛化性能达到最优。
如上图,有两类样本,中间的直线就是分类面。它可以将两类完全分开。现设红点为A类,黑点为B类。假设分类面的法向量方向向上,则A类离分类面的距离为正,记标签y=+1,B类离分类面的距离为负,记标签y=-1。我们固定化几何间隔,使支持向量(图中实心点)到分类面的距离为1.SVM是使两类之间间隔最大,即两条灰线之间的距离最大。即:
综上所述,我们要优化的目标为:
构建拉格朗日函数:
求偏导:
代入方程:
满足KKT条件,可以转化为对偶问题,消去w,b:
可以看出只有支持向量的α值可以不为0,也就是我们只需保留支持向量即可。
根据上述推导,我们得到的SVM只适用于线性分类,我们知道在高维空间更加容易线性可分。但如果我们使用更高维数的特征向量,我们所需要的样本也指数增长,会产生维数灾难。核函数可以解决此类问题。
核函数
核函数的基本作用就是接受两个低维空间里的向量,能够计算出经过某个变换后在高维空间里的向量内积值。
这太妙了,不但可以将特征向量映射到高维空间,而且还能得到内积值,注意到上面推导的公式,出现了大量的内积形式。核函数不但解决了维数灾难,还降低了高维空间内积计算的复杂性。
那么核函数为什么能将向量映射到高维空间甚至是无穷维空间呢?
我们以高斯核为例
考虑到:
如果将每一项看作一维,高斯核则将原特征映射到无穷维空间。
高维空间只是更加容易线性可分,如果映射到高维之后,问题依然是线性不可分呢?
松弛变量
以我们正常的经验而言,如果大量的点都符合规律,而某一点不符合,我们并不会认为规律出错了,而是会认为这个点可能有问题。如上图所示,我们会认为标记出来的蓝点可能有问题,它往红点偏了。在SVM思想中,我们允许少量的点不满足条件。
重新得到优化目标:
按照之前的思路,最终得到的对偶问题如下:
这就是SVM的基本思路与证明了,对于α值的求取,一般采用SMO算法。