0. 前言
最近在学习一些机器学习的知识,看的书主要是李航的《统计学习方法》。看到了支持向量机这一章,花了不少时间,把一些基础知识掌握了。写一篇博客记录一下我的理解。
首先支持向量机有三种分类,分别是线性可分支持向量机、线性支持向量机以及非线性支持向量机。后面的类型比前面的复杂,用到的技术也是逐渐增加。线性可分SVM用到了硬间隔最大化,线性SVM则用到条件松一些的软间隔最大化,非线性SVM则用到核技巧以及软间隔最大化。
1. 线性可分支持向量机
我们先看最简单的线性可分SVM。首先我们需要知道了解两个定义:函数间隔以及几何间隔。
函数间隔的定义:
其中y代表分类是否正确,wx+b代表分类预测的置信度。函数间隔越小,说明样本跟超平面越接近。
几何间隔的定义:
几何间隔就是我们平时理解的点到直线的距离(二维情况下)。
需要注意的两个点(后面都会用到)是:
- 函数间隔可以随着w跟b的倍数增加而增加,取了两倍、三倍的w跟b,超平面是不变的,但是函数间隔会变成原来的两倍、三倍。
- 函数间隔跟几何间隔的关系是差了一个1∥w∥\frac{1}{\left \| w \right \|}∥w∥1。
接下来进行建模,优化问题写成如下的样子:
这个公式的意思可以这样理解:所有样本点中,会有一个离超平面最近的点,这个最近的距离就是γ\gammaγ,其他所有距离都会大于这个数,这就是约束条件。同时我们想要把这个最近的距离尽可能地放大(这就是间隔最大化)。
然后我们用函数间隔跟几何间隔的关系(上面第二点),把γ\gammaγ换成γ^\widehat{\gamma }γ
然后我们取γ^\widehat{\gamma }γ
为1,方便后面计算。为什么可以这样做呢,就是上面的第一点,函数间隔是可以变化的,你可以通过调整w,b的倍数把函数间隔调整到某一个数,因此γ^\widehat{\gamma }γ
可以是任意一个数。
其次把问题转化一下,最大化1∥w∥\frac{1}{\left \| w \right \|}∥w∥1转化成最小化12∥w∥2\frac{1}{2}\left \| w \right \|^{2}21∥w∥2,这个证明我没去看过,但是也很容易理解,我们可以把两个函数画出来,就可以看出两个问题是一样的。于是优化问题变成这个样子。
这是一个凸二次优化问题,化成这个样子可以方便优化,前人已经总结了专门一套方法来对付这个问题,只要你能化成这个样子,总是可以求出一个最好的解。不过这里面涉及到最优化的知识,我对这方面了解也不是很深入,所以书里提到通过对偶算法去优化这部分我就不写了。
2. 线性不可分支持向量机
接下来就看一下线性SVM,用到的知识是软间隔最大化。
刚才的线性可分SVM并不能处理特异点。特意点就是下图这种,你无法找出一条线把所有样本点准确分出来,就算找到一个