• 【ML-9-1】支持向量机--软硬间隔与支持向量机


    我们知道较早的分类模型——感知机(1957年)是二类分类的线性分类模型,也是后来神经网络和支持向量机的基础。支持向量机(Support vector machines)最早也是是一种二类分类模型,经过演进,现在成为了既能处理多元线性和非线性的问题,也能处理回归问题。在深度学习风靡之前,应该算是最好的分类算法。但目前SVM的应用仍然很多,尤其是在小样本集上。

    一、目录

    • 目录
    • 感知机和其它知识
    • 硬间隔与支持向量机
    • 软间隔与支持向量机
    • 合页损失函数
    • 总结

    二、感知机和其它知识(前戏)

    2.1 感知机:

      感知机模型是一种二分类的线性分类器,只能处理线性可分的问题,感知机的模型就是尝试找到一个超平面将数据集分开,在二维空间这个超平面就是一条直线,在三维空间就是一个平面。感知机的分类模型如下:

    感知机的超平面是wx+b = 0。

    将上述分段函数整合成 y*(wx+b) > 0,则满足该式子的样本点即分类正确的点,不满足的即分类错误的点,我们的目标就是找到这样一组参数w,b 使得将训练集中的正类点和负类点分开。

    接下来定义我们的损失函数(损失函数是一种衡量损失和错误的程度的函数),我们可以通过定义分类错误的样本的个数来作为损失函数,但是这种损失函数不是参数w,b 的连续可导函数,因此不容易优化。我们知道对于误分类的点

    有-y(wx+b) > 0,我们让所有的误分类点到超平面的距离和最小(注意:感知机的损失函数只针对误分类点,而不是整个训练集):

     其中M是表示误分类的样本集合, 当w,b 成倍数增大时,并不会改变我们的超平面,||w||的值也会相应的增大,因此令||w|| = 1 不会影响我们的结果。最终的感知机损失函数如下:

    2.2 其它知识:

    最优化问题一般是指对于某一个函数而言,求解在其指定作用域上的全局最小值问题,一般分为以下三种情况(备注:以下几种方式求出来的解都有可能是局部极小值,只有当函数是凸函数的时候,才可以得到全局最小值):

    • 无约束问题:求解方式一般求解方式梯度下降法、牛顿法、坐标轴下降法等;
    • 等式约束条件:求解方式一般为拉格朗日乘子法
    • 不等式约束条件:求解方式一般为KKT条件(具体可见我的另一篇博文:KTT条件及其理解)

    三、硬间隔与支持向量机

    函数间隔:

    上式中函数间隔并不能正常反应点到超平面的距离,在感知机模型里我们也提到,当分子成比例的增长时,分母也是成倍增长。为了统一度量,我们需要对法向量w加上约束条件,这样我们就得到了几何间隔γ,以下式子定义出距离超平面最近的点,即支持点(这也是支持向量机名称的来源),定义为:

    其中w的值为权值:

    以下要求是最大间隔分类超平面:如果所有的样本不光可以被超平面分开,还和超平面保持一定的函数距离(下图函数距离为1),那么这样的分类超平面是比感知机的分类超平面优的。可以证明,这样的超平面只有一个。和超平面平行的保持一定的函数距离的这两个超平面对应的向量,我们定义为支持向量,如下图虚线所示。

    上面的式子可以直观的解释为:使得间隔值得相反得最小值(即使间隔最大),每个点满足大于等于1。

    上面的问题中的 1/2||w||2 是凸函数,同时约束不等式是仿射函数,因此这是一个凸二次规划问题,根据凸优化理论,我们可以借助拉格朗日函数将我们的约束问题转化为无约束的问题来求解,我们的优化函数可以表达为:

    将此时的目标函数和约束条件使用KKT条件转换为拉格朗日函数,从而转换为无约束的优化函数

    引入拉格朗日乘子后,优化目标变成:

    根据拉格朗日对偶化特性,将该优化目标转换为等价的对偶问题来求解,从而优化目标变成:

    所以对于该优化函数而言,可以先求优化函数对于w和b的极小值,然后再求解对于拉格朗日乘子β的极大值。

    首先求让函数L极小化的时候w和b的取值,这个极值可以直接通过对函数L分别求w和b的偏导数得到:

    将求解出来的w和b带入优化函数L中,定义优化之后的函数如下:

    转变问题为:

    通过对w、b极小化后,我们最终得到的优化函数只和β有关,所以此时我们可以直接极大化我们的优化函数,得到β的值,从而可以最终得到w和b的值。

    { 假设存在最优解β*(使用ML-9-3的博文方法计算出值); 根据w、b和β的关系,可以分别计算出对应的w值和b值(一般使用所有支持向量的计算均值来作为实际的b值);

    这里的(xs,ys)即支持向量,根据KKT条件中的对偶互补条件(松弛条件约束),支持向量必须满足一下公式:

    }

    线性可分SVM算法流程

    引入KTT条件进行说明,(KTT条件是上面拉格朗日函数求最优解的必要条件):

     从KTT条件中可以看出,当yi(w*xi + b*) - 1 > 0 时,βi* = 0;当 βi* > 0 时,yi(w*xi + b*) - 1 = 0;

    结合上面的w,b 表达式可以引出支持向量机的第二个亮点:w,b 参数只与满足 yi(w*xi + b*) - 1 = 0 的样本有关,而这些样本点就是离最大间隔超平面最近的点,我们将这些点称之为支持向量。因此很多时候支持向量在小样本集分类时也能表现的很好,也正是因为这个原因。(另外需注意:β 向量的个数是和训练集数量相等的,对与大的训练集,会导致所需要的参数数量增多,因此SVM在处理大的训练集时会比其他常见的机器学习算法要慢)

    四、软间隔与支持向量机

        线性可分SVM的学习方法对于非线性的数据集是没有办法使用的, 有时候不能线性可分的原因是线性数据集里面多了少量的异常点,由于这些异常点导致了数据集不能线性可分, 那么怎么可以处理这些异常点使数据集依然可以用线性可分的思想呢? 这里介绍线性SVM的软间隔最大化。下图两个显示了软间隔的重要性:

    如果线性数据中存在异常点导致没法直接使用SVM线性分割模型的时候,我们可以通过引入软间隔的概念来解决这个问题;

    硬间隔:可以认为线性划分SVM中的距离度量就是硬间隔,在线性划分SVM中,要求函数距离一定是大于1的,最大化硬间隔条件为:

    软间隔:SVM对于训练集中的每个样本都引入一个松弛因子(ξ),使得函数距离加上松弛因子后的值是大于等于1;这表示相对于硬间隔,对样本到超平面距离的要求放松了

    松弛因子(ξ)越大,表示样本点离超平面越近,如果松弛因子大于1,那么表示允许该样本点分错,所以说加入松弛因子是有成本的,过大的松弛因子可能会导致模型分类错误,所以最终的目标函数就转换成为:

    备注:函数中的C>0是惩罚参数,是一个超参数,类似L1/L2 norm的参数;C越大表示对误分类的惩罚越大,C越小表示对误分类的惩罚越小;C值的给定需要调参。

    【简单对比下】

    同硬间隔的SVM,构造软间隔最大化的约束问题对应的拉格朗日函数如下:

    从而将我们的优化目标函数转换为:

    优化目标同样满足KKT条件,所以使用拉格朗日对偶将优化问题转换为等价的对偶问题:

    先求优化函数对于w、b、ξ的极小值,这个可以通过分别对优化函数L求w、b、ξ的偏导数得,从而可以得到w、b、ξ关于β和μ之间的关系。

    将w、b、ξ的值带入L函数中,就可以消去优化函数中的w、b、ξ,定义优化之后的函数如下:

    结果变成:

    最终优化后的目标函数/损失函数和线性可分SVM模型基本一样,除了约束条件不同而已, 也就是说也可以使用SMO算法来求解。

    在硬间隔最大化的时候,支持向量比较简单,就是离超平面的函数距离为1的样本点就是支持向量。

    • 如果β=0,那么yi(wTxi+b)−1≥0,即样本在间隔边界上或者已经被正确分类。如图中所有远离间隔边界的点。
    • 如果0<β<C ,那么ξi=0,即点在间隔边界上。
    • 如果β=C,说明这是一个可能比较异常的点,需要检查此时ξi
    • 如果0≤ξi≤1,那么点被正确分类,但是却在超平面和自己类别的间隔边界之间。如图中的样本2和4.
    • 如果ξi=1,那么点在分离超平面上,无法被正确分类。
    • 如果ξi>1,那么点在超平面的另一侧,也就是说,这个点不能被正常分类。如图中的样本1和3.

    可参考:https://blog.csdn.net/james_616/article/details/72869015

    备注:软间隔和硬间隔中的支持向量的规则是一样的;

    SVM流程:

       

    五、合页损失函数

    先介绍下:合页损失函数又称为hinge 损失函数,其表达式如下:

    线性支持向量机还有另外一种解释如下:

    其中L(y(w∙x+b))=[1−yi(w∙x+b)]+称为合页损失函数(hinge loss function)。

    对上述损失函数中的第一项可以理解为当样本分类正确且间隔大于1,即 yi(wxi + b) ≥ 1时,损失为0;而当 yi(wxi + b) < 1 时,损失为 1 - yi(wxi + b),注意在这里即使样本分类正确,但是间隔小于1 的也会计入损失,这就是支持向量机的苛刻性。下图是hinge损失函数和其他一些损失函数的比较:

    绿线,如果点被正确分类,且函数间隔大于1,损失是0,否则损失是1−y(w∙x+b);

    黑线:对于0-1损失函数,如果正确分类,损失是0,误分类损失1,

    紫线:可见0-1损失函数是不可导的。对于感知机模型,感知机的损失函数是[−yi(w∙x+b)]+,这样当样本被正确分类时,损失是0,误分类时,损失是−yi(w∙x+b);

    对于逻辑回归之类和最大熵模型对应的对数损失,损失函数是log[1+exp(−y(w∙x+b))]。

    六、总结:

    • 可以解决线性数据中携带异常点的分类模型构建的问题;
    • 通过引入惩罚项系数(松弛因子),可以增加模型的泛化能力,即鲁棒性;
    • 如果给定的惩罚项系数C越小,表示在模型构建的时候,就允许存在越多的分类错误的样本, 也就表示此时模型的准确率会比较低;如果惩罚项系数越大,表示在模型构建的时候,就越不允许存在分类错误的样本,也就表示此时模型的准确率会比较高。

    附件一:手写推导过程练习

       

  • 相关阅读:
    Shell脚本笔记(二)Shell变量
    Shell脚本笔记(三)shell中的数学计算
    Shell脚本笔记(五)Shell函数
    Shell脚本笔记(四)条件判断
    Kotlin基础(五)Kotlin的类型系统
    Kotlin基础(四)Lambda编程
    Kotlin基础(三)类、对象和接口
    Kotlin基础(二)函数的定义与调用
    Kotlin基础(一)Kotlin快速入门
    第四周学习进度
  • 原文地址:https://www.cnblogs.com/yifanrensheng/p/12354931.html
Copyright © 2020-2023  润新知