查看原文
其他

支持向量机(SVM)--(4)

2016-05-25 guodongwe1991 机器学习算法与Python学习

     回忆:在上一篇文章中我们谈到为了使支持向量机能够处理非线性问题,进而引进核函数,将输入空间的输入数据集通过一个满足Mercer核条件的核函数映射到更高维或者无线维的希尔伯特再生核空间,将线性不可分转化成 线性可分的情况,如下图所示:

        但是数据看似的非线性并非完全是有于数据本身的非线性导致的,例如可能并不是因为数据本身是非线性结构的,而只是因为数据有噪音。对于这种偏离正常位置很远的数据点,我们称之为离群点Outlier ,在我们原来的支持向量机模型里,离群点的存在有可能造成很大的影响,因为超平面本身就是只有少数几个支持向量组成的,如果这些支持向量里又存在离群点的话,其影响就很大了。


如图所示,用黑圈圈起来的那个蓝点是一个离群点,它偏离了自己原本所应该在的那个半空间,如果直接忽略掉它的话,原来的分隔超平面还是挺好的,但是由于这个离群点的出现,导致分隔超平面不得不被挤歪了,变成途中黑色虚线所示(这只是一个示意图,并没有严格计算精确坐标),同时间隔也相应变小了。当然,更严重的情况是,如果这个离群点再往右上移动一些距离的话,我们将无法构造出能将数据分开的超平面来。


为了处理这种情况,支持向量机允许数据点在一定程度上偏离一下超平面。例如上图中,黑色实线所对应的距离,就是该离群点偏离的距离,如果把它移动回来,就刚好落在原来的超平面上,而不会使得超平面发生变形了。

换言之,在有松弛的情况下,离群点也属于支持向量,同时,对于不同的支持向量,Lagrange 参数的值也不同,如此篇论文“Large Scale Machine Learning”中图所示(图下图),对于远离分类平面的点值为0;对于边缘上的点值在[0, 1/L] 之间,其中,L 为训练数据集个数,即数据集大小;对于离群点和内部的数据值为1/L。


我们,原来的约束条件为:


        我们,原来的约束条件为:


其中ξi (i = 1, 2, · · · , n) 称为松弛变量Slack Variable ,对应数据点xi 允许偏离的函数间隔的量。当然,如果我们允许ξi 任意大的话,那任意的超平面都是符合条件的了。所以,我们在原来的目标函数后面加上一项,使得这些ξi 的总和也要最小,新的优化目标为:


其中C 是一个参数,用于控制目标函数中两项(“寻找间隔最大的超平面”和“保证数据点偏差量最小”)之间的权重。注意,其中 是需要优化的变量(之一),而C 是一个事先确定好的常量。

和前面类似,采用Lagrange 乘数法进行求解,可以写出:


        求偏导之后令偏导数为0 可以分别得到:


        将w 回代L 并化简,即得到和原来一样的目标函数:


        
        对偶问题可以写作:


引入松弛变量之后的原问题和对偶问题如下图所示

可以看到唯一的区别就是现在对偶变量 多了一个上限C。而核化的非线性形式也是一样的,只要把(xi, xj) 换成κ(xi, xj) 即可。这样一来,一个完整的,可以处理线性和非线性并能容忍噪音和离群点的支持向量机才终于介绍完毕了。

到这儿一共写了四篇文章了,可以做个小结,不准确的说,支持向量机它本质上即是一个分类方法,用wT + b 定义分类函数,于是求w 和b,为寻最大间隔,引出  1/2* ∥w∥^2,继而引入Lagrange 乘子,化为对 的求解(求解过程中会涉及到一系列最优化或凸二次规划等问题),如此,求求w 和b 与求 等价,而 的求解可以用一种快速学习算法SMO,至于核函数,是为处理非线性可分的情况,若直接映射到高维计算可能出现维数灾难问题,故在低维计算,等效高维表现。


到这儿未知,支持向量机的基本理论已经基本说完了,但是学习svm也是为了应用,所以建议大家去斯坦福大学的UCI数据库下载一些分类数据做一些尝试。接下来的几天还会更新一些支持向量机的证明,里面会涵盖较多的公式,需要比较清晰地逻辑,由于svm有严格数理统计的含义,器公式的推导会牵涉较多的数理统计、概率论等数学的概念~~~~~~


欢迎转载


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存