机器学习笔记(7)-支持向量机
支持向量机(Support Vector Machine,SVM)是一种非线性分类器,在神经网络出现前,几乎占据主导角色。这节我们就来介绍下SVM的原理。
基本思想
SVM的算法处理思想简单的说就是:
- 间隔:找到支持向量使它与数据样本点的距离最大。
- 对偶:在计算时,通过满足二次规划问题,利用强对偶性和KKT条件来处理。
- 核技巧:利用核函数将数据映射到高维空间来帮助实现非线性分类。
SVM算法分为三类:
- 硬间隔(hard margin SVM)
- 软间隔(soft margin SVM)
- 核(kernel SVM)
几何思想:
我们先考虑线性可分的情况下,当线性不可分时,我们考虑采用核技巧来映射数据点到高维空间变成线性可分。我们一般可以从数据样本点中若干条将样本分割根据类别分割的直线(超平面),SVM的思想是从中找到一条直线,使它与最靠近直线的样本点的间隔最大,也就是找到一条最优直线(支持向量)。
如上图,可以将样本点正确分割的直线有很多(蓝色和黑色实线),但是蓝色直线与样本点非常接近,当出现噪声点时,就会分错,容错率较低,所以要选择黑色这条直线。SVM的思想就是要在高纬度空间中找到若干条最优的支持向量来帮助我们实现分类。
硬间隔
数学模型表达式
硬间隔的思想是通过采用sign函数判别为\(\{-1,1\}\)来分类,所以SVM是一个判别式模型,表达式如下:
\[f(w,b)=sign(w^Tx+b)
\]
根据上式我们知道作为分割区域,我们换一种表示方式:
\[\begin{aligned}
y_{i}=\left\{\begin{matrix}
1\quad &w^Tx_{i}+b>0\\
-1\quad &w^Tx_{i}+b<0
\end{matrix}\right.
\quad i=1,2,\cdots ,n
\end{aligned}
\]
我们简化一下统一用\(y_{i}(w^Tx_{i}+b)>0\)来表示。我们定义一个\(margin(w,b)\)函数用来表示间隔,于是我们采用数学表达式就得到:
\[\begin{aligned}
\left\{\begin{matrix}
max\;margin(w,b)\\
s.t.\;y_{i}(w^Tx_{i}+b)>0
\end{matrix}\right.
\end{aligned}
\]
现在我们来研究margin函数是个什么东西。前面根据SVM的思想知道:间隔是最接近分割直线的样本点到直线的距离,当直线固定时,所有样本点到直线的距离的某个最小值就是\(min\;distance(x_{i})\),点\((x_{i},y_{i})\)到直线\(w^Tx+b\)的距离公式是:
\[\begin{aligned}
distance(x_{i})=\frac{1}{\left \| w\right \|}|w^Tx+b|\quad i=1,2,\cdots ,n
\end{aligned}
\]
于是我们代入得到表达式最终形态:
\[\begin{aligned}
\left\{\begin{matrix}
\underset{w,b}{max}\;\underset{x_{i}}{min}\;\frac{1}{\left \| w\right \|}|w^Tx+b|\\
s.t.\;y_{i}(w^Tx_{i}+b)>0
\end{matrix}\right.
\end{aligned}
\]
接下来我们对上式进行变形:
\[\begin{aligned}
\left\{\begin{matrix}
\underset{w,b}{max}\;\frac{1}{\left \| w\right \|}\underset{x_{i}}{min}\;y_{i}(w^Tx_{i}+b)\\
s.t.\;y_{i}(w^Tx_{i}+b)>0
\end{matrix}\right.
\end{aligned}
\]
然后我们将上式和约束\(s.t.\;y_{i}(w^Tx_{i}+b)>0\)进行同比例缩放,我们令\(s.t.\;y_{i}(w^Tx_{i}+b)\geqslant 1\),那么自然得到\(\underset{x_{i}}{min}\;y_{i}(w^Tx_{i}+b)=1\),上面这个值的大于等于是1,那么自然最小值为1。于是我们进一步简化上式:
\[\begin{aligned}
\left\{\begin{matrix}
\underset{w,b}{max}\;\frac{1}{\left \| w\right \|}\\
s.t.\;y_{i}(w^Tx_{i}+b)\geqslant 1
\end{matrix}\right.\;\Rightarrow \;
\left\{\begin{matrix}
\underset{w,b}{min}\;\frac{1}{2}w^Tw\\
s.t.\;y_{i}(w^Tx_{i}+b)\geqslant 1
\end{matrix}\right.
\end{aligned}
\]
上式的转换并不是等价的,但是因为我们其实不关心最大间隔的值,只关心取到最大值时的超平面参数\(w,b\),上式中加个\(\frac{1}{2}\)是为了后面求导方便。
要解上式带约束的不等式问题,就要祭出我们的拉格朗日乘子法来帮助我们求解。
模型求解
拉格朗日乘子法
我们通过拉格朗日乘子法来求解问题:
\[\begin{equation}
\left\{\begin{matrix}
\underset{w,b}{min}\;\frac{1}{2}w^Tw\\
s.t.\;y_{i}(w^Tx_{i}+b)\geqslant 1
\end{matrix}\right.
\end{equation}\tag{1}
\]
采用拉格朗日乘子法得到:
\[\begin{aligned}
\mathcal{L}(w,b,\lambda)=\frac{1}{2}w^Tw+\sum_{i=1}^{n}\lambda_{i}[1-y_{i}(w^Tx_{i}+b)]\\
\end{aligned}
\]
根据拉格朗日的定义,有\(\lambda_{i}\geqslant 0\)。
于是我们把\(\mathcal{L}(w,b,\lambda)\)代入数学模型进一步得到:
\[\begin{equation}
\left\{\begin{matrix}
\underset{w,b}{min}\;\underset{\lambda}{max}\;\mathcal{L}(w,b,\lambda)\\
s.t.\;\lambda_{i}\geqslant 0
\end{matrix}\right.
\end{equation}\tag{2}
\]
上式引入拉格朗日乘子法来处理该问题是为了将一个带约束\(w,b\)条件\(s.t.\;y_{i}(w^Tx_{i}+b)\geqslant 1\)的问题,通过引入约束条件\(\lambda_{i}\geqslant 0\)转化为和参数无关的无约束条件,而公式\((1),(2)\)是一个等价关系,来观察公式\((2)\),可以分为两种情况讨论:
1、当\(1-y_{i}(w^Tx_{i}+b)>0,\;\lambda_{i}\geqslant 0\)时:
\[\begin{aligned}
\underset{\lambda}{max}\;\mathcal{L}(w,b,\lambda)&=\underset{\lambda}{max}\;\frac{1}{2}w^Tw+\sum_{i=1}^{n}\lambda_{i}[1-y_{i}(w^Tx_{i}+b)]\\
&=+\infty
\end{aligned}
\]
1、当\(1-y_{i}(w^Tx_{i}+b)\leqslant 0,\;\lambda_{i}\geqslant 0\)时:
\[\begin{aligned}
\underset{\lambda}{max}\;\mathcal{L}(w,b,\lambda)&=\underset{\lambda}{max}\;\frac{1}{2}w^Tw+\sum_{i=1}^{n}\lambda_{i}[1-y_{i}(w^Tx_{i}+b)]\\
&=\frac{1}{2}w^Tw
\end{aligned}
\]
所以:
\[\underset{w,b}{min}\;\underset{\lambda}{max}\;\mathcal{L}(w,b,\lambda)=\underset{w,b}{min}\;(\frac{1}{2}w^Tw,+\infty)=\underset{w,b}{min}\;\frac{1}{2}w^Tw
\]
对偶关系
接下来我们采用对偶关系,这里我们先说结论,SVM中的求解问题是一个凸二次规划问题,约束条件满足线性关系,那么必然满足对偶关系中的强对偶关系,证明我们等SVM讲完再说。
一般对偶关系默认满足:
\[\underset{a}{min}\;\underset{b}{max}\;\mathcal{L}(a,b)\geq \underset{a}{max}\;\underset{b}{min}\;\mathcal{L}(a,b)
\]
当满足强对偶关系时,不等式取等号,于是我们从公式\((2)\)得到:
\[\begin{equation}
\left\{\begin{matrix}
\underset{\lambda}{max}\;\underset{w,b}{min}\;\mathcal{L}(w,b,\lambda)\\
s.t.\;\lambda_{i}\geqslant 0
\end{matrix}\right.
\end{equation}\tag{3}
\]
梯度求导
接下来,我们现来观察\(\underset{w,b}{min}\;\mathcal{L}(w,b,\lambda)\)这部分,它可以通过梯度求偏导得到参数\(w,b\)的最优解。
首先我们现来求解最优解\(b^*\):
\[\begin{aligned}
\frac{\partial \mathcal{L}(w,b,\lambda)}{\partial b}&=\frac{\partial }{\partial b}[\frac{1}{2}w^Tw+\sum_{i=1}^{n}\lambda_{i}[1-y_{i}(w^Tx_{i}+b)]]\\
&=-\sum_{i=1}^{n}\lambda_{i}y_{i}=0
\end{aligned}
\]
接着我们来求解最优解\(w^*\):
\[\begin{aligned}
\frac{\partial \mathcal{L}(w,b,\lambda)}{\partial w}&=\frac{\partial }{\partial w}[\frac{1}{2}w^Tw+\sum_{i=1}^{n}\lambda_{i}[1-y_{i}(w^Tx_{i}+b)]]\\
&=w-\sum_{i=1}^{n}\lambda_{i}y_{i}x_{i}=0
\end{aligned}
\]
得到:
\[w^*=\sum_{i=1}^{n}\lambda_{i}y_{i}x_{i}
\]
最后我们把\(b^*,w^*\)的结果都带入\(\mathcal{L}(w,b,\lambda)\),得到:
\[\begin{aligned}
\mathcal{L}(w^*,b^*,\lambda)&=\frac{1}{2}w^Tw+\sum_{i=1}^{n}\lambda_{i}[1-y_{i}(w^Tx_{i}+b)]\\
&=\frac{1}{2}(\sum_{i=1}^{n}\lambda_{i}y_{i}x_{i})(\sum_{j=1}^{n}\lambda_{j}y_{j}x_{j})+\sum_{i=1}^{n}\lambda_{i}-\sum_{i=1}^{n}\lambda_{i}y_{i}x_{i}(\sum_{j=1}^{n}\lambda_{j}y_{j}x_{j})-\sum_{i=1}^{n}\lambda_{i}y_{i}b\\
&=-\frac{1}{2}\sum_{j=1}^{n}\sum_{j=1}^{n}\lambda_{i}\lambda_{j}y_{i}y_{j}x_{i}x_{j}+\sum_{i=1}^{n}\lambda_{i}
\end{aligned}
\]
KKT条件
在SVM中的KKT的证明我们放到后面再讲,这里我们先给出结论:满足强对偶关系和KKT条件成立是充分必要条件。由于SVM中是凸二次规划问题,约束条件满足线性关系,所以必然满足强对偶关系(为了使SVM的推导具有连贯性,强弱对偶关系、KKT条件的证明放到后面一起说),所以KKT条件成立。
KKT条件是什么呢,简单来说就是三点:
- 约束条件
- 松弛互补条件
- 梯度为0
在SVM中KKT条件如下:
\[\begin{aligned}
\left\{\begin{matrix}
\lambda_{i}\geqslant 0\\
1-y_{i}(w^Tx_{i}+b)\leqslant 0\\
\lambda_{i}[1-y_{i}(w^Tx_{i}+b)]=0\\
\frac{\partial \mathcal{L}(w,b,\lambda)}{\partial b}=0\\
\frac{\partial \mathcal{L}(w,b,\lambda)}{\partial w}=0
\end{matrix}\right.
\end{aligned}
\]
前两个是约束条件,第三个是松弛互补条件,后两个是梯度为0。
有了上面这个KKT条件后,我们就可以得到参数\(b^*\)了,之前通过求导把\(w^*\)求了出来。接下来我们使用KKT条件的松弛互补条件来求解\(b^*\):
\[\lambda_{i}[1-y_{i}(w^Tx_{i}+b)]=0
\]
这个式子中,我们令\(\lambda_{i}>0\),因为等于0的话就没有什么意义了,可以得到无数解,而我们要得到在支持向量中的最优解,于是就有
\[y_{i}(w^Tx_{i}+b)=1
\]
我们左右各乘以\(y_{i}\),得到
\[y^2_{i}(w^Tx_{i}+b)=y_{i}
\]
我们知道\(y_{i}\)是sign函数的结果,取值为\(\{-1,1\}\),所以\(y^2_{i}=1\),所以最终得到:
\[b^*=y_{k}-\sum_{i=1}^{n}\lambda_{i}y_{i}x^T_{i}x_{k}
\]
这样我们就把\(w^*,b^*\)都得到了,那么超平面\(w^{*T}x+b^*\)就有了,即支持向量为:
\[\begin{aligned}
f(w^*,b^*)&=sign(w^{*T}x+b^*)\\
w^*&=\sum_{i=1}^{n}\lambda_{i}y_{i}x_{i}\\
b^*&=y_{k}-\sum_{i=1}^{n}\lambda_{i}y_{i}x^T_{i}x_{k}
\end{aligned}
\]
软间隔
软间隔和硬间隔非常类似,只不过软间隔容许有样本噪声上的偏差,在数学表达式上其实就是引入了一个loss,我们要让这个损失最小,这个和我们的正则化的思想其实有异曲同工之妙。
现来回顾下我们在硬间隔推导时得到的公式\((1)\):
\[\begin{equation}
\left\{\begin{matrix}
\underset{w,b}{min}\;\frac{1}{2}w^Tw\\
s.t.\;y_{i}(w^Tx_{i}+b)\geqslant 1
\end{matrix}\right.
\end{equation}\tag{1}
\]
加上损失函数\(l(w,b)\),我们知道条件是$y_{i}(w^Tx_{i}+b)\geqslant 1 $,
- 当满足该条件时,损失为0;
- 当不满足该条件时的\(x_{i},y_{i}\)就是我们要的损失值,于是得到:
\[l(w,b)=\sum_{i=1}^{n}max\{0,\;[1-y_{i}(w^Tx_{i}+b)]\}
\]
我们进一步简化式子,我们令\(\xi_{i}=1-y_{i}(w^Tx_{i}+b)\),于是得到软间隔的表达式:
\[\left\{\begin{matrix}
\underset{w,b}{min}\;\frac{1}{2}w^Tw+C\sum_{i=1}^{n}max\{0,\;\xi_{i}\}\\
s.t.\;y_{i}(w^Tx_{i}+b)\geqslant 1-\xi_{i}\\
s.t.\;\xi_{i}\geqslant 0
\end{matrix}\right.
\]
求解方式和之前硬间隔完全一致,这里就不展开了。
总结
总结一下SVM求解的思想和步骤:
- 先根据最大间隔距离思想建立模型
- 通过拉格朗日乘子法将参数有约束问题转化为参数无约束问题
- 利用强对偶关系对梯度求导
- 利用KKT条件进一步求解参数