机器学习算法-支持向量机SVM

1. 算法

1.1 从最简单的数学问题说起

要理解SVM算法,首先就要理解SVM解决的问题是什么,损失函数是如何推导来的,这是最关键最基础的部分,请看下面这张图。

我们以二维特征空间中的一个二分类问题为例来讲解。SVM就是希望寻找一个最优的决策边界,这个边界距离两个类别的最近的样本点最远。这里有两个重要概念这个最优决策边界就叫做超平面,而两个类别中距离这个决策边界最近的点就叫做支持向量。也就是说我们希望各类别的支持向量到超平面的距离最常,这就是SVM研究的基本问题,下面我们将这个问题转化成数学形式,并推导他的损失函数,这个推导过程需要的数学基础非常简单好理解。

超平面的描述方程:w^Tx+b=0

二维空间点(x,y)到直线Ax+By+C=0距离:\frac{\vert Ax+By+C \vert }{\sqrt{A^2+B^2 } }

扩展到n维空间点(x_{1}, x_{2}...x_{n})
 到直线w^Tx+b=0距离:\frac{\vert w^Tx+b \vert }{\vert \vert w \vert \vert } \vert \vert w \vert  \vert =\sqrt{w_{1}^2+w_{2}^2+...+w_{n}^2 }

根据支持向量的定义我们知道,支持向量到超平面的距离为 d,其他点到超平面的距离大于 d。于是我们写出这样一个公式:

稍作转化可以得到:

\vert \vert w \vert  \vert d 是正数,我们暂且令它为 1(之所以令它等于 1,是为了方便推导和优化,且这样做对目标函数的优化没有影响),故:

将两个方程合并,我们可以简写为:

这个方程的含义是:支持向量到超平面的距离等于 d,其他点到超平面的距离大于 d。y是每个点的类别标签,在超平面一侧的为1,超平面另一侧的为-1。

每个支持向量到超平面的距离可以写为:

由:

得到:

所以每个支持向量到超平面的距离可以化为:

支持向量的方程为y(w^Tx+b)=1(这个方程如果不理解请仔细再理解一下前面关于每个点到超平面的距离推导),所以上面那个方程又可以简化为:d=\frac{1}{\vert \vert w \vert \vert }

还记得我们最开始提到的SVM基本数学问题吗?我们需要将支持向量到超平面的距离最大化,因此我们求解的优化问题是:max\frac{1}{\vert \vert w \vert \vert }

为了求解的方便,我们需要对这个优化问题做一系列的简单转化,例如,分数求导不方便,因此我们可以将最大化\frac{1}{\vert \vert w \vert \vert } ,转化成最小化\vert \vert w \vert \vert \vert \vert w \vert \vert 有根号计算,因此转化成最小化\frac{1}{2} \vert \vert w \vert \vert ^2,由此就得到了我们最后的优化问题:

写成以下形式:

1.2 拉格朗日乘子与KKT条件

SVM优化是一个不等式约束条件下的优化问题,数学核心理论就是拉格朗日乘子和针对不等式优化的KKT条件,具体可以参考这两个链接:

https://www.zhihu.com/question/38586401 如何理解拉格朗日乘子法(讲的特别好)

https://www.zhihu.com/question/23311674 不等式优化中的KKT条件

我们得到以下这个式子:

1.3 繁琐的优化推导

这个优化问题的求解过程是非常繁琐的,感兴趣的可以自己推一推,主要是以下几个步骤:

以上就是线性可分情况下,二分类问题的SVM算法求解过程。需要注意的是,SVM的编程实现过程是SMO算法:首先验证KKT条件,然后固定迭代求解得到\lambda ,根据上文中的公式计算得到wb,最后根据分类决策函数判断类别。

2. 补充

2.1 软间隔

如下图所示,在实际分类中,二分类问题基本都不能找到一个完美的超平面,因为两个类别的交界处总是会存在错分的情况,因此我们引入软间隔的概念。

相比于硬间隔的苛刻条件,我们允许个别样本点出现在间隔带里面,比如:

在两条虚线内的向量都是支持向量,那么我们求解的优化问题就变成了了如下,具体的推导过程在此略去。

2.2 核函数

对于线性不可分的问题,我们使用核函数,将向量映射到高维空间,使其变得线性可分。

二维特征空间,线性不可分
映射到三维空间变得线性可分

2.3 多分类问题

以上我们已经解决了二分类问题中的所有情况,但针对多分类问题如何解决呢?

方式一:将训练样本集中的某一类当成一类,其他所有类当成一类,进行二分类。这种方式下,n个类别就需要建立n个分类器。

方式二:将训练样本集中的类别每两类都单独训练一个分类器。n个类别就需要建立C_{n}^2个分类器。

在预测的时候,所有分类器都跑一遍,得到的所有结果中,出现次数最多的标签就是该样本的类别。

通常情况下使用方式一解决多分类问题,因为尽管方式二更加精确,但耗费的时间也更多。时间与空间,速度与质量进行权衡。

3. 优缺点

3.1 优点

有严格的数学理论支持,可解释性强,不依靠统计方法,从而简化了通常的分类和回归问题

能找出对任务至关重要的关键样本(即:支持向量);

采用核技巧之后,可以处理非线性分类/回归任务;

最终决策函数只由少数的支持向量所确定,计算的复杂性取决于支持向量的数目,而不是样本空间的维数,这在某种意义上避免了“维数灾难”。

3.2 缺点

训练时间长。当采用 SMO 算法时,由于每次都需要挑选一对参数,因此时间复杂度为 O(n^2),其中 N 为训练样本的数量;

当采用核技巧时,如果需要存储核矩阵,则空间复杂度为 O(n^2)

模型预测时,预测时间与支持向量的个数成正比。当支持向量的数量较大时,预测计算复杂度较高。

因此支持向量机目前只适合小批量样本的任务,无法适应百万甚至上亿样本的任务。

4. 调参




5. 相关链接

【机器学习】支持向量机 SVM(非常详细)

https://zhuanlan.zhihu.com/p/77750026

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容