李宏毅老师视频:https://www.bilibili.com/video/BV14W411u78t?from=search&seid=16299976979408181063

知乎讲解 :https://zhuanlan.zhihu.com/p/49331510

数学完整推导视频:https://www.bilibili.com/video/BV12J41157qV?p=6 (浙大机器学习课程)

文中几张图引自改知乎文章。

Support Vector Machine

概述

整体上,支持向量机是一个分类算法,即寻找能分开两类数据的超平面,并且这个超平面满足距离超平面最近的数据点的到超平面距离最大。

1588485540815

如图,H2和H3都实现了正确的分类,但是SVM会选择H3,因为两类数据中距离H3最近的点的距离比其他所有的点到H3的距离都要大,满足一开始所述的条件。

目前求解目标是使得图中margin最大,经过推导得出最终的抽象的公式:

这个公式也就是硬匹配规则,简单解释一下:

  • yi表示第i个数据的真实类别,取值为 1,-1;
  • 第i笔数据真实类别与计算出来的值同号,即保证分类准确的前提下,最大化边界。

1588486535546

这些处于边界的几个数据点称为支持向量,在决定最佳超平面时只有支持向量起作用,而其他数据点并不起作用。

推导

SVM = Hingle_loss + Kernel_Method

Hingle Loss

其中,

当真值与预测值同号,并且乘积比比正确的好过一段距离,即乘积大于等于1时,loss为0,好过的这段距离即为margin。参考下图:

1588487132298

Linear SVM

  • Model:
  • Loss function

损失函数是一个凸函数,因此可以用梯度下降法来求解,具体看李宏毅老师视频。

这里的SVM损失函数和一开始概述里面提到的目标函数似乎不太一样?经过如下转换,就得到了最初的形式。

1588487368252

最后面1减去了一项,表示是软匹配,不一定能达到1的情况。

Kernel Method

首先,要找的W*(w,b)是数据点的线性组合:

为了解释这件事,一般就引入了拉格朗日方法来算一通,这里用另外一种思路:

1588488346353

用梯度下降法求解时,cn(w)由于hingleloss的原因,会有一部分值为0,即不是所有的xn都会对w有影响,w初始化为0时很多数据点对更新w的值毫无用处,即a*是稀疏的。

当a* != 0时,对应的数据点就叫做 Support vector.支持向量机名字也由此得来。

此时w可以换一种形式写:

故,Model:

找一个最好的 α ,最小化损失函数:

这里不需要知道具体的x,只要能求出K(x,z)的值即可。

Kernel Trick

上述的损失函数如果直接用x,z是不好的,需要用他们的特征。用核方法就不用管他们的 特征是什么样子的。

即两个向量转化为特征向量再求内积是比较麻烦的,直接计算两个向量的内积再求特征会更快。

此时需要定义一个核函数,就可以简化计算。这里的

就是一个核函数,可以选取不同的核函数。

1588490434815

而核函数计算就是把原始数据投影到高维的一个内积,即在做分类时,先把二维数据投影到高维空间,在做一个 线性分类,上图就很明显了。

疑问

  • Kernel Trick 是投影到高维的一个计算?
  • 逻辑是计算出K,就可以找出α了。而投影到高维只是计算K的一个方法,为什么可以代表svm呢?
  • 这些疑问以后再看。

2020-6-7日更新:

SVM通过数学理解更加合理!