【机器学习】支持向量机:SVM,support vector machines

  SVM是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机(感知机有无数个,间隔最大只有一个)。SVM 适合中小型数据样本、非线性、高维的分类问题。

  • 超平面:将不同样本(二分类)分隔开的平面,可图中实线。
  • 最大超平面:除了将两类样本分别分割在该超平面的两侧,而且保证两侧距离超平面最近的样本点到超平面的距离被最大化了。
  • 支持向量:样本中距离超平面最近的一些点,参考图中红色实心和红色空心点。
  • 求解图中两条虚线的间隔最大化,因为距离最大犯错的几率比较小,更具鲁棒性。


    支持向量机

  SVM试图寻找一个最优的决策边界,距离两个类别最近的样本最远。SVM还包括核技巧,这使它成为实质上的非线性分类器(定义中讲到SVM的基本模型是一个线性分类器,此处讲的是针对线性不可分的数据集加上核函数的SVM可以看作一个非线性分类器)。SVM的的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。SVM的的学习算法就是求解凸二次规划的最优化算法。

1.理解

1.1 简易求解理解

  假设样本集如下,yi为类标记,当它等于+1时为正例;为-1时为负例。同时假设训练数据集是线性可分的。

样本集,xi为特征向量

  划分超平面为:
超平面

  其中,w = {w1, w2, ... , wd}是一个法向量,决定了超平面的方向;d是特征值的个数;X为训练样本;b为位移项,决定了超平面和原点之间的距离。

  • 知识点:点(x, y)到直接Ax + By + C = 0的距离d如下:
    点到直线的距离

    扩展到n维,x = (x1, x2, ... , xn)到直线(面)wx + b = 0的距离如下:
    多维点到直线(面)距离

    其中,||w||等于:
    向量2范数,可理解为向量长度的绝对值
  • 求解最大间距(2/||w||),可理解为求解最小化
    最小化求值

推演辅助:参考首张图SVM需要求解的是wx+b=1wx+b=-1之间的最大距离,假设点A在wx+b=1上,则最大距离为点A到wx+b=-1的距离:

最大距离推演

1.2 常见求解理解

  几何间隔:对于给定数据集T和超平面,定义超平面关于样本点(xi, yi)的几个间隔为

几何间隔

辅助理解

  • 推演步骤1:假设所有样本点到超平面最小的距离为r,则
    假设到超平面最小距离为r
  • 推演步骤2:两边同时除去最小的距离为r,得
    不等式两边同时除去r
  • 推演步骤3:不等式两边同时乘y,注意y正、负不同情况,得:


    不等式两边同时乘y
  • 推演步骤4:如下


    证明y(w*x+b)>0
  • 推演步骤5:因为|y|=1,则
    几何间隔
  • 寻找支持向量,即寻找距离超平面几何距离最小的样本点,即支持向量到超平面的距离


    几何间隔最小
  • 求解最大分割超平面,即求解使r最大的参数,表示为以下约束最优化问题:
    求解超平面约束

      因为||w||r都是标量,重新定义相关数值如下:
    数值演变,最大化r约等于最小化*||w||*

    则,
    求解超平面约束两边同时除r

      求解间隔r最大化,为||w||最小化,可以辅助理解为:
    不等式约束的凸二次规划,为了方便使用拉格朗日算子计算求解

2.算法原理

2.1 线性算法原理

  已知 SVM 优化的主问题是:


优化问题
  • 步骤 1:构造拉格朗日函数


    拉格朗日
  • 步骤2:利用强对偶性转化


    转化过程

      最终得到:


    转化结果
  • 步骤3:利用SMO(Sequential Minimal Optimization,序列最小优化算法)求解由步骤 2 得到的函数:


    函数带入
  • 步骤4:计算w和b,构造超平面,最终得到分类决策函数


    分类决策函数

    阶跃函数

2.2 非线性算法原理:核函数

  对于线性不可分的数据集,如下图,SVM往往会选择一个核函数来处理。


线性不可分

  处理思路一般是将二维线性不可分样本映射到高维空间中,让样本点在高维空间线性可分,比如:


高维展示
  • 用 x 表示原来的样本点,用另一个符号表示 x 映射到特征新的特征空间后到新向量


    新向量
分割超平面函数
  • 后续的计算则根据新的向量进行对偶计算
  • 核函数的作用:
    低维空间映射到高维空间后维度可能会很大,如果将全部样本的点乘全部计算好,这样的计算量太大了,有了核函数(能够将特征空间的内积等于它们在原始样本空间中通过函数计算)就不需要计算高维甚至无穷维空间的内积了。
  • 常用的核函数:
    线性核LR(主要用于线性可分的情形)、高斯核RBF(主要用于线性不可分的情形)、多项式核,一般情况下高斯核效果是不会差于Linear但是时间上高斯核会耗费更多,
  • 吴恩达的见解:
    如果Feature的数量很大,跟样本数量差不多,这时候选用LR或者是Linear Kernel的SVM;
    如果Feature的数量比较小,样本数量一般,不算大也不算小,选用SVM+Gaussian Kernel;
    如果Feature的数量比较小,而样本数量很多,需要手工添加一些feature变成第一种情况。

3.总结

  • 支持向量机目前只适合小批量样本的任务,无法适应百万甚至上亿样本的任务
  • 最终决策函数只由少数的支持向量所确定,计算的复杂性取决于支持向量的数目,而不是样本空间的维数,这在某种意义上避免了“维数灾难”

你可能感兴趣的:(【机器学习】支持向量机:SVM,support vector machines)