首页 > 代码库 > SVM

SVM

支撑向量机(SVM)算法在机器学习领域中有着广泛的应用,其不仅可以应用于线性可分的数据集,也可以通过不同的核函对非线性数据集进行分类。以下将从3个方面简要阐述原理:

(1)线性可分支撑向量机;(2)线性支持向量机;(3)非线性支撑向量机。在这里线性可分支撑机是后续算法的基础,通常都是在线性可分的目标函数基础之上加入核函数或者松弛因子,进而得到复杂的模型达到分类的目的。

(1)线性可分支撑向量机

首先线性可分数据集意味着在空间中两类数据集没有交集,我们可以通过寻找一个分离超平面将两类数据集正确的分离。同时需要注意这里讲的空间指特征空间而非输入空间,对于输入向量x,我们利用空间映射函数φ(x)将其映射为特征空间中的向量X

技术分享

      在上图中两个集合中间存在着无数个分割超平面,那么如何寻找一个性能最优的分割超平面来将类别分开?从直观上来看,我们能够找到集合边界上的若干点,以两个集合最近的距离的平均作为分割超平面的截距。接下来从样本点到分割超平面的硬间隔最大化来寻找这样第一个平面。

      首先假设训练集中有n个样本,这n个样本在特征空间上式可直接分离

技术分享

      定义分割超平面:

技术分享

      我们所要寻找的超平面实际上就是:所有样本点距离分割超平面的距离最近的最大值(硬间隔最大化),从而确定出w和b具体的值。而点到面的距离,依据几何距离公式:

 技术分享

      在统计学习方法教材中,是利用了函数距离,因为函数距离既可以表达出点到超平面的距离也同时表达出了分类的情况。所以此处也利用函数距离来表达:

技术分享

    

      由此定义出目标表达式:

技术分享

      对于该表达式,由于在点到面的距离公式中我们一定能通过系数的缩放使得所有样本点到超平面的距离大于等于1,因此通过变换后我们得到目标函数为:

技术分享

      由此得到相应的拉格朗日函数:

技术分享

      对于拉格朗日函数的对偶性请参考统计学习方法,下面主要对一些过程进行推导:

技术分享

      由于这里拉格朗日函数含有不等式约束,所以根据KKT条件有如下的关系:

技术分享

  

      从这里看出要想让第三个等式成立,必然会有或者,将w的表达式带入分割超平面后,若α=0,则该样本并不会对分割面有任何影响,若其大于0,则意味着样本点是位于最大间隔的边界上,我们把处于边界上的少量点构成的面称为支撑向量。这里体现了SVM的一个性质,即训练完成后,大部分样本点都无需保留,因为最终模型仅与支撑向量有关。

      接下来把对拉格朗日函数求导结果带入回表达式,消除w和b,得到关于拉格朗日因子α的表达式。

技术分享

      对于上图的表达式,求解复杂度随着样本数量的增大而成正比关系,而很多机器学习教材中都会讲解的是SMO算法。其基本思想是:每次选择两个变量αi和αj,然后固定其他变量求出关于α的极值,然后再选择两个变量,不断迭代执行直至收敛。整个算法这里主要有两个步骤:(1)变量的选择;(2)变量的解析方法。

假设先随机选择两个变量,α1,α2,其他变量是固定值,则这里对表达式可以做一些变换得到等价的表达式

技术分享

技术分享

     对于其具体的求解过程可以看李航的统计学习方法,里面有详细的证明过程。这里我只对算法实现的步骤做个简要的阐述:

  1. 依次遍历节点,选择一个变量作为第一个优化变量
  2. 首先计算出预测值与真实值之间的误差,如果误差大于容错率的话说明该变量需要优化;
  3. 在其余变量中,随机选择第二个待优化变量,并同样计算误差;
  4. 对于求得新变量的值的范围进行约束,同时保存当前变量的值
  5. 根据公式计算出新变量的值,并更新b的值

     上述过程不断迭代,直至收敛或达到最大迭代次数后退出循环。

     (2) 线性支撑向量机

     对于线性可分支撑向量机是比较理想的,通常情况下空间中的数据点也许并不能完全线性分离(大部分线性可分,只存在少数异常点),这时候我们引入了松弛因子δ,使得那些异常点的函数间隔也能够大于等于1,即得到目标表达式:

技术分享

    这里C>0是惩罚参数,C值越大说明对误分类的惩罚越大。因此这个表达式即表达了希望间隔最大,又表达了对于误分类点的容忍程度。对于上述式子,同样构造拉格朗日函数

技术分享

    对该表达式分别对w,b求导,最终得到与线性可分同样的求导结果,对ε求导得到

技术分享

    而将这些结果带入拉格朗日函数中可以得到与线性可分向量机相同的结果,利用SMO算法同样可以得出分割超平面。

    这里对支撑向量做个具体分析:当α=0时,意味着数据点在间隔边界后面,这类数据点对分割超平面没有任何影响,当α<C时,则ε=0,这些点恰好位于间隔边界上,这些点构成了支撑向量,而当α=C时,如果0<ε<1时,则分类正确,数据点位于间隔边界与分离超平面之间,当ε=1时,数据点在分离超平面上,当ε>1时,则数据点位于分离超平面误分一侧。

    (3)非线性支撑向量机

     对于非线性的数据点,我们无法直接将其利用线性的方式分离,但是可以通过一些变化函数将不同类别的数据点映射到不同的空间中从而将其分离。这种变化函数称为核函数,我们最熟悉的一种空间映射函数是高斯核函数也称为径向基核函数,在很多应用中,如果没有一些先验知识的话,一般可以利用高斯核函数。

技术分享

    对应的决策函数为:

技术分享

    除此之外,还有多项式核函数:

技术分享

    不同的核函数将数据从输入空间映射到不同的特征空间,主要做的就是将数据分离,因此使用核函数可以较好的完成非线性数据的分类。通过邹博老师的机器学习课程对SVM有了一个清晰的认识,下面是对于C与gmma值的不同对算法影响的示例图:

技术分享

参考引用:

1. 邹博老师课程

2. 机器学习——周志华

3. 统计学习方法——李航

4. 机器学习实战《Machine in Action》

---恢复内容结束---

SVM