SVM的学习

        支持向量机(Support vector machines,SVM),是一种二类分类的模型,是一种判别模型,得到决策函数,来进行判断。SVM的基本模型是定义在特征空间上的间隔最大的线性分类器,SVM可以看作是感知机的高级版本,因为感知机只要求正确的对线性可分的数据进行分离就可以,但SVM则要求最大的程度的对其进行分离,而且对于感知机只能处理的是线性可分的数据,但SVM的应用则广的多,通过核技巧,可用于非线性可分的数据。假设空间,在特征空间的一个线性分类超平面,用于将特征空间划分为正例和负例的情况。策略,间隔最大。算法,凸二次优化问题最优化算法,KKT条件,等价于正则化的合页损失函数的最小化问题。

         介绍SVM,首先,我们需要明确SVM出现的背景。如果数据是线性可分的情况,也就是感知机算法是收敛的,那么因为感知机算法得到的分离超平面是不唯一,我们为了求出一个唯一的平面,我们给定了一个条件,使其间隔最大,也就是分离超平面处于正中的位置,然后由这个间隔最大的条件使分离超平面唯一,那么此时我们的算法为线性可分支持向量机(linear support vector machine in linearly seperable case),此时的间隔我们称为硬间隔(hard margin maximization),也就是一点都不含糊的情况。如果数据是近似线性可分的情况,我们对间隔最大的条件进行放松,此时的间隔我们称为软间隔(soft margin maximization),也就是可以在一定范围内出错的情况,然后这种算法我们称为线性支持向量机(linear support vector machine)。如果数据完全看不出来线性可分的规律,这个时候,我们不管用什么间隔都不能分开这些数据,那么我们就通过核技巧把数据映射到高维的情况,然后在高维的情况下进行软间隔最大化,然后得到这样一个高维的分离超平面,这种算法我们成为了非线性支持向量机(non-linear support vector machine)。

         【线性可分支持向量机】数据,线性可分。我们考虑的是特征空间,是在特征空间基础上定义的模型,此时特征空间为欧式空间或希尔伯特空间,而输入空间需要转化为特征空间来进行处理(一一对应<线性映射>),输入空间一般为欧式空间或者离散的空间。假设空间,分离超平面使得能够正确划分线性可分的数据,并且硬间隔最大。策略,硬间隔最大的原则选择最优的分离超平面,此时解唯一。算法:求解凸二次优化的问题。

           对间隔的定义:函数间隔和几何间隔。函数间隔就是没有归一化的距离,而几何间隔就是归一化之后的距离的问题。为什么会考虑到距离的问题,因为一个点距离分离超平面越远,那么其分类的确信度就越高,所以距离很好的度量了确信度的概念,而符号与本身标签符号的正负表明了预测的正确性,所以正确性与确信度有所度量之后,那么我们产生了函数间隔的概念。其中,还需要区分训练样本点的函数间隔和超平面的函数间隔,超平面的函数间隔是训练样本点的最小的函数间隔。对其进行归一化之后,那么我们度量的间隔成为了几何间隔,可以说是物理间隔了,也就是与超平面的参数的具体数值没有半毛钱的关系,完全就是实际距离的度量。(几何间隔对于同一个训练集和分离超平面是不变得,而函数间隔是可以随着超平面的参数的改变可以改变)

          硬间隔最大化,这里因为函数间隔与超平面的参数与很大的关系,而几何间隔与参数无关,只与平面的位置有关,所以我们采用的是超平面几何间隔最大化的问题。优化的目标是超平面的几何间隔最大,而约束条件是超平面几何间隔的定义。因为几何间隔和函数间隔之间的紧密联系,以及函数间隔和超平面的参数有关的特性,我们可以把函数间隔固定为1,最小化参数的2范数,那么就可以使几何间隔最大化。然后这种从不同的角度思考问题的求解可以叫做对偶问题了,所以通过这波操作,我们这个时候的优化目标变为了参数2范数(法向量2范数)最小化的问题(等价于2范数的平方的1/2最小化问题,也等价于2范数的导数的最大化问题),约束条件右侧也变为了大于等于函数间隔(1),然后利用KKT条件,我们将有约束的最优化问题转化为无约束的最优化问题。这个问题被我们称为了凸二次规划问题(convex quadratic programming)。这里,我们需要加入凸凹函数的定义问题。凹凸函数的定义。对于凹凸函数而言,都涉及到了一阶与二阶导数的问题,尤其是二阶导数的符号决定了凹凸性,凸函数是二阶导数一定是不减的,而凹函数是二阶导数一定是不增的。二次的概念,主要是因为我们求得是2范数得平方的1/2,所以存在了二阶的概念。对于仿射函数的概念,是一种线性加移动的仿射变化。凸优化问题的概念,在于不等式约束和目标函数都是凸函数,而等式的约束函数是仿射变化的优化问题,当目标函数是二次的,并且不等式约束是仿射函数,凸优化问题成为了凸二次规划问题。

           我们通过硬间隔最大化得到了最优的分离超平面,我们现在想要知道算法的正确性。也就是我们需要证明间隔最大的平面存在且唯一。从存在性角度来说,因为数据线性可分,那么肯定存在这样一个平面,使得间隔最大并对数据可以正确划分。从唯一性角度来说,假设有二个不同的解使其有二个分离超平面,二者的函数间隔都是1,并且参数2范数是相等的,然后可知二者平均仍是解,并且说明二个不同的解在一条线上,并且为1。

            对于我们求出的分离超平面而言,在训练数据中,最重要的部分是离求得的分离超平面最近的训练数据点,这些点我们给他们独特的称呼:支持向量,也就是几何间隔就是由这些点求出来的呀,,而且,从常理来说,有二类支持向量,一类是在正平面,一类是在负平面呀,对于函数间隔是1,二类支持向量组成了二条平行于分离超平面的线,然后整体形成了一个长带,长带的宽度为2倍的几何间隔。二条线形成间隔边界。考虑支持向量机的来源,因为除了这二条线上的点对于参数有影响,其他点都是没有影响的点,所以我们在SVM中只需要抓住主要矛盾,抓住主要点就好。。

             具体算法:我们根据KKT条件,引入拉格朗日乘子,然后求解对偶问题。原问题是最小最大问题,现在将问题转变为最大最小问题,然后依此进行求解,具体过程,以图片形式给出。


先计算出参数,然后用参数表示w,b的情况,然后再求解分类决策函数,在计算b的时候,我们利用的是支持向量点,对于支持向量点,除了本身的函数间隔为1以外的特性,对应的参数大于0也是很重要的一个性质。也就是我们选取参数大于0的对应的训练数据,此时的训练数据刚好是支持向量。

           对于近似线性可分的数据,也就是可能有噪声或异常点的数据,所以不是完全的线性可分数据,有一些臭蛋坏了整个粥,对于这些臭蛋而言,是不满足我们的约束条件的,为了适应这种情况,我们只好把间隔的标准降低,以前是硬间隔,现在是软间隔。对于训练数据来说,大部分数据是线性可分的,只有少部分异常点,将这些异常点去除,但肯定不是直接去除的,通过将间隔的宽度放松来做,也就是加入了松弛变量。对训练数据的函数间隔进行了放松,也就是对约束条件进行了放松,对于目标函数来说,也是需要进行修改,加入了一个惩罚项,并且其中的惩罚参数主要用来调和间隔和误分类点的个数之间的关系,目标是,尽可能的使间隔大,并且尽可能的使误分类点的个数尽量小,C是调和二者的系数。然后也是求解凸二次规划(convex quadratic programming)。然后我们将不等式约束转化为无约束的最优解求解问题,然后通过最小最大转化为最大最小然后进行求解,然后得到对偶函数的解,然后确定w和b的值。然后由w和b来确定最优的分离平面。


         在近似线性可分的情况中,我们考虑的是在间隔边线和间隔边线之间的训练数据的情况,也就是我们考虑的是参数大于0的情况,(超级坑,刚刚已经打了一遍,不知道为什么没有保存,又得重新来一遍,当重新巩固了把)。当参数等于0的训练数据,我们认为这些点是在间隔边线之外的被划分正确的点,当参数为正,且小于C的情况下,u参数为正,松弛变量为0,也就是正确分类并在间隔边线上,当参数为C,松弛变量(0,1)之间时,我们认为这些点是在正确分类的间隔边线和分类超平面之间,当松弛变量为1时,我们认为这些点是在分类超平面上,当松弛变量大于1时,说明已经在误分类的那一边了。。【松弛变量是一个用来度量训练数据点到自己对应的间隔边线之间的距离的一个度量。。】

          我们一直用的软间隔最大化来作为我们优化的目的,等价的,我们可以使最小化合页损失函数来作为优化的目标来求解问题,二者是相同的。


        从上图,我们可以知道,0-1损失不是连续可导的,也就是将其作为目标函数通过对其直接进行优化求解问题比较困难。对于感知机的损失函数与线性支持向量机的损失函数对比,我们可以知道后者对于学习的要求更高,也就是在更大的确信度的前提下,我们才认为其损失函数为0。

         对于非线性数据,也就是完全没有办法近似分开数据的情况下,我们采用非线性支持向量机来解决问题,非线性支持向量机中,最主要的特点是应用了核技巧。好好的思考一下什么是核技巧,可以用在很多的地方。

        对于非线性问题,一般来说比较难求解,但我们可以通过将非线性问题转换为线性问题,然后求解线性问题来得到非线性问题的求解。核技巧就是这样一种方法,核技巧换句话说,就是利用核函数对原输入空间和特征空间进行转换,然后在转换之后的特征空间进行隐式的学习,最终来通过求解线性方法来解决非线性问题。

        那么什么函数才能被认为是核函数,也就是正定核函数(positive definite kernel function)。证明过程如下,有一些数学推导,我会在后面解释一下其含义。(懒得重新保存图了,,,就这样随便看看把)


           这其实就是数学严谨性的一种体现,也就是我们需要有向量空间的基础上,然后定义合理的内积运算,然后构成内积空间,然后再在内积空间定义范数,用来度量长度和距离,使之才成为一个完备的空间,也就是我们说的希尔伯特空间。那么从定义中,我们可以得到一个很重要的认知,那么就是正定核函数需要满足构成的Gram矩阵是半正定矩阵。这个认知可以帮助我们在判定一个函数是否是正定核函数,就需要判断这个函数构成的Gram矩阵是不是半正定矩阵。

         我们一般说的是正定核,通常来说,用的正定核有:多项式核函数(polynomial kernel function),高斯核函数(Gaussian kernel function),字符串核函数(string kernel function)。还有一些非典型性的核函数,比如通过Mercer定理得到的mercer核。


          我们现在已经万事具备,只差求解凸二次优化问题,然后得到符合要求的模型,但样本容量很大的情况下,我们如何来求解就是一个很重要的急需解决的问题,我们采用序列最小最优化(Sequential minimal optimization,SMO)算法。

猜你喜欢

转载自blog.csdn.net/angela2016/article/details/80728731
今日推荐