• 支持向量机算法


    1.什么是支持向量机
    2.支持向量机的推导
    3.SVM的损失函数
    4.SVM的核函数有哪些,核函数的作用是什么
    5.硬间隔和软间隔
    6.SVM可以做多分类吗,怎么做
    7.SVM可以做回归吗,怎么做
    8.SVM的对偶问题,为什么要把原问题转化为对偶问题
    9.KKT限制条件有哪些

    一、函数间隔与几何间隔

    在正式介绍SVM的模型和损失函数之前,我们还需要先了解下函数间隔和几何间隔的知识。

    在分离超平面固定为w^{T}x+b=0的时候,|w^{T}x+b|表示点x到超平面的距离。通过观察w^{T}x+b和y是否同号,我们判断分类是否正确,这些知识在感知机模型里有。这里我们引入函数间隔的概念,定义函数间隔gamma ^{'}

     

     可以看到,它就是感知机模型里面的误分类点到超平面距离的分子。对于训练集中m个样本点对应的m个函数间隔的最小值,就是整个训练集的函数间隔。

    函数间隔并不能正常反应点到超平面的距离,在感知机模型里我们也提到,当分子成比例的增长时,分母也是成倍增长。为了统一度量,我们需要对法向量w加上约束条件,这样我们就得到了几何间隔gamma,定义为:

     

    几何间隔才是点到超平面的真正距离,感知机模型里用到的距离就是几何距离

    二、支持向量

     在感知机模型中,我们可以找到多个可以分类的超平面将数据分开,并且优化时希望所有的点都离超平面远。但是实际上离超平面很远的点已经被正确分类,我们让它离超平面更远并没有意义。反而我们最关心是那些离超平面很近的点,这些点很容易被误分类。如果我们可以让离超平面比较近的点尽可能的远离超平面,那么我们的分类效果会好有一些。SVM的思想起源正起于此。

     如下图所示,分离超平面为w^{T}x+b=0,如果所有的样本不光可以被超平面分开,还和超平面保持一定的函数距离(下图函数距离为1),那么这样的分类超平面是比感知机的分类超平面优的。可以证明,这样的超平面只有一个。和超平面平行的保持一定的函数距离的这两个超平面对应的向量,我们定义为支持向量,如下图虚线所示。

     

    支持向量到超平面的距离为frac{1}{||w||_{2}},两个支持向量之间的距离为frac{2}{||w||_{2}}

    三、SVM模型目标函数与优化

    SVM的模型是让所有点到超平面的距离大于一定的距离,也就是所有的分类点要在各自类别的支持向量两边。用数学式子表示为:

     对于这个式子,我们从SVM的思想入手,找到离超平面最近的点,使它的几何间隔最大,即:

    在数学上,我们总可以通过等比例的缩放w,b,来使得函数间隔gamma ^{'}geq 1

     

     则有目标函数:

    由于frac{1}{||w||_{2}}的最大化等同于frac{1}{2}||w||^{2}的最小化。这样SVM的优化函数等价于:

      由于目标函数frac{1}{2}||w||^{2}是凸函数,同时约束条件不等式是仿射的,根据凸优化理论,我们可以通过拉格朗日函数将我们的优化目标转化为无约束的优化函数,这和最大熵模型原理小结中讲到了目标函数的优化方法一样。具体的,优化函数转化为:

     

     根据对偶理论及KKT条件

    现在我们要求的是:

     首先我们来求L(w,b,α)基于w和b的极小值,即。这个极值我们可以通过对w和b分别求偏导数得到:

    从上两式子可以看出,我们已经求得了w和α的关系,只要我们后面接着能够求出优化函数极大化对应的α,就可以求出我们的w了,至于b,由于上两式已经没有b,所以最后的b可以有多个。

    带入优化函数L(w,b,α)消去w了。我们定义:

     现在我们来看将w替换为α的表达式以后的优化函数ψ(α)的表达式:

     (9)式到(10)式使用了(a+b+c+…)(a+b+c+…)=aa+ab+ac+ba+bb+bc+…的乘法运算法则

    从上面可以看出,通过对w,b极小化以后,我们的优化函数ψ(α)仅仅只有α向量做参数。只要我们能够极大化ψ(α),就可以求出此时对应的α,进而求出w,b.
    对ψ(α)求极大化的数学表达式如下:

     等价的极小化问题如下:

     只要我们可以求出上式极小化时对应的α向量就可以求出w和b了。具体怎么极小化上式得到对应的α,一般需要用到SMO算法,这个算法比较复杂,后面来讲。在这里,我们假设通过SMO算法,我们得到了对应的α的值α∗。

    那么我们根据w=sum_{1}^{m}alpha _{i}y_{i}x_{i},可以求出对应的w的值.

    求b则稍微麻烦一点。注意到,对于任意支持向量(x_{x},y_{s}),都有

     假设我们有S个支持向量,则对应我们求出S个b∗,理论上这些b∗都可以作为最终的结果, 但是我们一般采用一种更健壮的办法,即求出所有支持向量所对应的b_{s}^{*},然后将其平均值作为最后的结果。注意到对于严格线性可分的SVM,b的值是有唯一解的,也就是这里求出的所有b∗都是一样的,这里我们仍然这么写是为了和后面加入软间隔后的SVM的算法描述一致。

    怎么得到支持向量呢?根据KKT条件中的对偶互补条件alpha _{i}^{*}[y_{i}(w^{T}x_{i}+b-1)]=0,如果αi>0则有y_{i}(w^{T}x_{i}+b-1)=0即点在支持向量上,否则如果αi=0则有y_{i}(w^{T}x_{i}+b)geq 1,即样本在支持向量上或者已经被正确分类。

    https://blog.csdn.net/qq_20412595/article/details/82112457

  • 相关阅读:
    vue+element目录树默认展开和选中
    vue+element目录树初始化和销毁
    vue父组件通过ref获取子组件的值
    [moka同学笔记转载]Yii2使用$this->context获取当前的Module、Controller(控制器)、Action等
    [moka同学笔记]JS学习 鼠标事件
    [moka同学笔记]phpStudy for Linux (lnmp+lamp一键安装包)
    [转载]php中序列化与反序列化
    [Node.js学习]初之体验
    [moka同学笔记转载]Yii 设置 flash消息 创建一个渐隐形式的消息框
    [moka同学笔记转载]yii2.0 rbac权限学习笔记
  • 原文地址:https://www.cnblogs.com/cgmcoding/p/13560270.html
Copyright © 2020-2023  润新知