机器学习算法原理系列篇12: 支撑向量机 (support vector machine)算法推导

更多有趣和专业的人工智能相关文章,微信搜索  : robot-learner , 或扫码

 

 

 

支撑向量机算法(Support Vector Machine)是一种常用的分类算法,尤其在较小的样本训练集中能得到比其他算法更好的效果。支撑向量算法的参数由训练样本中少量的几个样本点决定。其基本思想在于,如果能保证训练数据中最难分类的少数样本点具有最大置信度的正确分类结果,那么数据中其他的样本点也会有较好置信度的正确分类结果。

 

 

 

如上图所示,在一个分类问题中,有多种因素可能影响分界线的划定:比如数据点的不规则分布,极端点位置,或者数据不平衡。不同的算法可能考虑不同的因素从而得到不同的分界线。

 

 

       如上图所示,支撑向量机算法假设能够找到这样一个最佳超平面来给数据分类:

                        

       从而使得一个分类的所有数据点都满足        

       而另一个分类的所有数据点都满足:

            

 

 

       并且在数据点的边缘处,正好存在两个超平面:

                    

 

不同分类的数据点中正好有少量的点分别处在上面两个超平面上。正是这些数据点决定了分类超平面的形状,所以这些数据点又被称为支撑向量。假设有一条垂直于分类超平面的直线和支撑向量所在平面分别交于x0和x1两点,如下图所示:

 

 

这样x0和x1可以带入下式:

 

 

  

      

 

两式之差正好可以得到x0和x1之间的距离,也就是两个支撑向量所在平面之间距离为:

         

 

其中

为垂直于超平面的法线方向。支撑向量机算法正是试图通过把上述距离d,也被称为margin最大化来获得最佳分类界限,也就是下图所示的Margin距离。同时,必须要保证不同的分类的数据点在边界超平面两侧,也就是支撑向量点所在平面两侧。

       因此,支撑向量机算法最终可以转化为一个有限制的优化问题,如下所示:

 

其中上述的限制条件能够保证y=+1的数据点在   

一侧,

 

而y=-1的数据点在   

一侧。

 

可以看出,这个限制条件是挺强的,它要求所有数据点正好在分界平面两侧,而实际情况是有的数据点一定会被误分类。为了放宽这一条件,从而得到更好的优化效果,我们允许每一个数据点有越界的可能性,从而允许合理的分类错误。这个方法被称为soft margin的优化(相对于之前的hard margin),其优化问题如下式所示:

 

上式中,最小化wTw和最大化margin是等价的,ξi被称为slack variable,是每一个点被允许偏离分界面(或者说进入margin)的距离。C是惩罚系数,系数越大,ξi的取值越会被限制,因此每个点被允许的误判距离越小,结果越趋向于hard margin。

 

有意思的是,上诉的优化问题可以从另一个角度来看。首先,上诉的两个限制条件可以统一改为一个:

 

       把这个限制条件带入优化的公式中,可以看出支撑向量机算法等同于最小化下式:

                                     

其中

  

 

被称为Hinge 损失函数。和逻辑回归中的Logistic 损失函数相比, Hinge函数是分段函数。因此,支撑向量机算法也就可以认为是对Hinge损失函数的最小化,加上一个对w系数的L2限制项。

 

与线性回归思路类似,支撑向量机算法也可以解决非线性问题,通过引入Kernel方程的思想来构造非线性空间进行分类。如下图所示,Kernel方法的基本思想是,通过构造Kernel方程把特征变量映射到高纬度的非线性空间进行运算,从而使在原空间线性不可分的样本在核空间变得线性可分。

 

      

 

如上图所示,假设有这样一个变化方程Φ(x), 把数据点x从左边线性不可分的空间映射到右边一个线性可分的特征空间。

 

 

比如上图中的一个例子,左边是一个在二维空间中不可线性分割的数据集合。但是通过下面一个简单的转化以后:

                                                              

 

左边的线性空间便映射到了右边所示的一个线性可分的三维空间中。这样的例子给我的提示是,总是可以通过高维空间的映射把低维度不好分类的问题转化为比较好分类的问题。但是这样有一个巨大的问题是会导致维度的急剧膨胀,从而给新空间中的向量计算带来巨大的困难。另一方面,支撑向量机的具体优化解法中可以发现,涉及的向量计算其实是各个向量之间的点乘,即

                                              

 

这意味着,经过高维转换以后,在新的坐标系下,我也只需要处理这样的点乘:

                                       

 

Kernel函数的优点正是使得我们在计算新空间的向量点乘时候,不用先做高纬度转化而是直接通过Kernel函数实现比较简单计算。因为Kernel函数可以保证:

 

 

 

 

常用的Kernel函数有:

 

  1. 线性函数形式

                                        

  1. 多项式函数

                                            

  1. 高斯函数

                                       

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值