会飞的蝌蚪君

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

SVM:支持向量机   

 

1)线性可区分(linear separable) 
 
思路就是:基于训练集在样本空间中找到一个划分超平面,将不同类别的样本分开!
问题是:超平面很多,如何能够找到最合适的超平面?
如上图所示,最合适的超平面即为第二幅图,因为支持向量到超平面的距离(间隔,margin)最大,
 
图二即是具有最大间隔的超平面,它对样本的局部扰动的容忍性最好,受到训练集的局限性或噪声的影响最小。换言之,对未见实例的泛化能力更好!
 
具体推导基于此思想进行,对偶问题后续。。。
 
 
2) 线性不可区分 (linear inseparable) 
我们在想,并不是所有训练样本都能够通过线性区分的,如下图所示:
 
这就不是能够用线性划分的二分类实例,那我们该如何去进行区分???
 
我们的思想是,
 
          a. 利用一个非线性的映射把原数据集中的向量点转化到一个更高维度的空间中
          b. 在这个高维度的空间中找一个线性的超平面来根据线性可分的情况处理
 
 
然后就可以把这个问题转化为之前寻找超平面的问题了!
 
此处我们可以通过使用核函数(kernel trick)来进行,
 
同时也大大地减小了计算的复杂度,以下举例:

         ###核函数对于计算复杂度举例:####
 
            假设定义两个向量: x = (x1, x2, x3); y = (y1, y2, y3)
            定义方程:f(x) = (x1x1, x1x2, x1x3, x2x1, x2x2, x2x3, x3x1, x3x2, x3x3)
 
            K(x, y ) = (<x, y>)^2
 
            假设x = (1, 2, 3); y = (4, 5, 6). 
         
            f(x) = (1, 2, 3, 2, 4, 6, 3, 6, 9)
            f(y) = (16, 20, 24, 20, 25, 36, 24, 30, 36)
            <f(x), f(y)> = 16 + 40 + 72 + 40 + 100+ 180 + 72 + 180 + 324 = 1024
 
 
           K(x, y) = (4  + 10 + 18 ) ^2 = 32^2 = 1024
 
           同样的结果,使用kernel方法计算容易很多
 
常用的核函数有:
线性核
多项式核
高斯核
sigmoid核
 
SVM一般来说常用处理二分类的问题,如果是多分类的问题,可采取OVO、OVR等方式进行
 
 
 
软间隔前面我们讨论的都是理想情况,即我们的训练样本在样本空间或者是特征空间都是线性可分的,也就是存在那么一个超平面使得我们的样本能够被完全分开。
 
然而,然而。。。。。。
 
事实并非如此简单。。。。
 
在现实任务中,我们很难找到合适的核函数使得训练集在特征空空间中线性可分,退一步说,即使找到了这个核函数使得样本线性可分,也很难判定这个貌似线性可分的结果不是由于过拟合造成的。
 
为了缓解这个问题,我们引入了“”软间隔“的概念(类似于高数里的邻域问题)。即在划分超平面的两侧找到一个小的间隔区间,允许支持向量机在一些样本上出错,允许在这个软件隔内出错!但应尽量减少这种出错!
 
===================================
 
支持向量回归
 
前面SVM主要用于二分类问题。。。=其实也可以用于回归问题,与前面传统回归模型不同的是,SVR能够容忍有一定范围的误差,只要样本能够落入这个间隔带,即不计它的损失。。。。
 
 
 
 
posted on 2017-10-28 16:30  会飞的蝌蚪  阅读(172)  评论(0)    收藏  举报