【机器学习】05-SVM学习笔记

相关词汇

最大间隔
核函数(高斯核,线性核

写在前面的话

为什么我们要使用SVM,SVM有什么作用?SVM简单来讲,就是降维。如果你说出这句话,别人给你一个白眼,问你什么是降维,降维的本质是什么?这些答案我们需要一个一个去回答

SVM算法原理

SVM学习的基本想法是求解能够正确划分训练数据集并且几何间隔最大的分离超平面。如下图所示, y=wx+b=0y=wx+b=0即为分离超平面,对于线性可分的数据集来说,这样的超平面有无穷多个(即感知机),但是几何间隔最大的分离超平面却是唯一的。
【机器学习】05-SVM学习笔记
在推导之前,先给出一些定义。假设给定一个特征空间上的训练数据集
T=(x1,y1),(x2,y2),...,(xN,yN)T={(x_1,y_1),(x_2,y_2),...,(x_N,y_N)}
其中,xiRn,yi+1,1,i=1,2,...,N,xiiyix_i \in R^n,y_i\in{+1,-1},i=1,2,...,N,x_i为第i个特征向量,y_i为类标记,当它等于+1时为正例;为-1时为负例。再假设训练数据集是线性可分的。
几何间隔:对于给定的数据集 y=wx+b=0y=wx+b=0 和超平面(x_i,y_i),定义超平面关于样本点 [公式] 的几何间隔为
γi =yi(Wwxi+bw)\gamma_i\ = y_i(\frac{W}{||w||}·x_i+\frac{b}{||w||})
超平面关于所有样本点的几何间隔的最小值为
γ =mini=1,2,...,Nγi\gamma\ =min_{i=1,2,...,N}\gamma_i
实际上这个距离就是我们所谓的支持向量到超平面的距离。
根据以上定义,SVM模型的求解最大分割超平面问题可以表示为以下约束最优化
maxw,bγmax_{w,b}\gamma
s.t yi(Wwxi+bw)γ,i=1,2,...,Ns.t\ y_i(\frac{W}{||w||}·x_i+\frac{b}{||w||})\ge \gamma,i=1,2,...,N
将约束条件两边同时除以γ\gamma,得到
yi(Wwγxi+bwγ)1y_i(\frac{W}{||w||\gamma}·x_i+\frac{b}{||w||\gamma})\ge 1
因为w,γ||w||,\gamma都是标量,所以为了表达式简洁起见,令
w =wwγb =bwγ\begin{array}{lcr} w\ = \frac{w}{||w||\gamma}\\ b\ = \frac{b}{||w||\gamma} \end{array}
得到
yi(wxi+b)1,i=1,2,...,Ny_i(w·x_i+b)\ge 1,i=1,2,...,N
又因为最大化γ\gamma,等价于最大化1w\frac{1}{||w||},也就是等价于最小化12w2\frac{1}{2}||w||^2(12\frac{1}{2}是为了后面求导以后形式简洁,不影响结果),因此SVM模型的求解最大分割超平面问题又可以表示为以下约束最优化问题)
minw,b 12w2s.t yi(wxi+b)1,i=1,2...,N\begin{array}{lcr} min_{w,b}\ \frac{1}{2}||w||^2\\ s.t\ y_i(w·x_i+b)\ge 1,i=1,2...,N \end{array}
这是一个含有不等式约束的凸二次规划问题,可以对其使用拉格朗日乘子法得到其对偶问题(dual problem)。
首先,我们将有约束的原始目标函数转换为无约束的新构造的拉格朗日目标函数
L(w,b,α)=12w2i=1αi(yi(wxi+b)1)L(w,b,\alpha)=\frac{1}{2}||w||^2-\sum_{i=1}{\alpha_i(y_i(w·x_i+b)-1)}
其中αi\alpha_i为拉格朗日乘子,且αi0\alpha_i \ge 0。现在我们令
θ(w)=maxαi0L(w,b,α)\theta(w)=max_{\alpha_i\ge 0}L(w,b,\alpha)
当样本点不满足约束条件时,即可在可行解区域外:
yi(wxi+b)1y_i(w·x_i+b)< 1
此时,将α\alpha设置为无穷大,则θ(w)\theta(w)也无穷大。
当满足约束条件时,即在可行解区域内:
yi(wxi+b)1y_i(w·x_i+b)> 1
此时,θ(w)\theta(w)为原函数本身。于是,将两种情况合并起来就可以得到我们新的目标函数
θ(w)={12w2,x+,x\theta(w)=\left\{ \begin{aligned} \frac{1}{2}||w||^2,x\in可行区域\\ +∞,x\in不可行区域\\ \end{aligned} \right.
于是原约束问题就等价于
minw,bθ(w) =minw,bmaxαiL(w,b,α) =pmin_{w,b}\theta(w)\ =min_{w,b}max_{\alpha_i}L(w,b,\alpha)\ =p^*
看一下我们的新目标函数,先求最大值,再求最小值。这样的话,我们首先就要面对带有需要求解的参数 wwbb的方程,而 αi\alpha_i又是不等式约束,这个求解过程不好做。所以,我们需要使用拉格朗日函数对偶性,将最小和最大的位置交换一下,这样就变成了:
maxαi0minw,bL(w,b,α) =dmax_{\alpha_i\ge 0}min_{w,b}L(w,b,\alpha)\ =d^*
要有p=dp^*=d^*,需要满足两个条件:
1.优化问题时凸优化问题
2.满足KKT条件
首先,本优化问题显然是一个凸优化问题,所以条件一满足,而要满足条件二,即要求
{α0yi(wxi+b)0αi(yi(wxi+b)1) =0\left\{ \begin{aligned} \alpha\ge 0\\ y_i(w·x_i+b)\ge 0\\ \alpha_i(y_i(w·x_i+b)-1)\ =0 \end{aligned} \right.
为了得到求解对偶问题的具体形式,令L(w,b,α)L(w,b,\alpha)wwbb的偏导为0,可得
w=i=1Nαiyixii=1Nαiyi =0\begin{array}{lcr} w=\sum_{i=1}^{N}\alpha_iy_ix_i\\\\ \sum_{i=1}^{N}\alpha_iy_i\ =0 \end{array}
将以上两个等式带入拉格朗日目标函数,消去 wwbb, 得
L(w,b,α)=12i=1Nj=1Nαiαjyiyj(xixj)i=1Nαiyi((j=1Nαjyjxj)xi+b)+i=1NαiL\left( \boldsymbol{w,}b,\boldsymbol{\alpha } \right) =\frac{1}{2}\sum_{i=1}^N{\sum_{j=1}^N{\alpha _i\alpha _jy_iy_j\left( \boldsymbol{x}_{\boldsymbol{i}}\cdot \boldsymbol{x}_{\boldsymbol{j}} \right)}}-\sum_{i=1}^N{\alpha _iy_i\left( \left( \sum_{j=1}^N{\alpha _jy_j\boldsymbol{x}_{\boldsymbol{j}}} \right) \cdot \boldsymbol{x}_{\boldsymbol{i}}+b \right) +}\sum_{i=1}^N{\alpha _i}
           =12i=1Nj=1Nαiαjyiyj(xixj)+i=1Nαi\ \ \ \ \ \ \ \ \ \ \ =-\frac{1}{2}\sum_{i=1}^N{\sum_{j=1}^N{\alpha _i\alpha _jy_iy_j\left( \boldsymbol{x}_{\boldsymbol{i}}\cdot \boldsymbol{x}_{\boldsymbol{j}} \right)}}+\sum_{i=1}^N{\alpha _i}

minw,b L(w,b,α)=12i=1Nj=1Nαiαjyiyj(xixj)+i=1Nαi\underset{\boldsymbol{w,}b}{\min}\ L\left( \boldsymbol{w,}b,\boldsymbol{\alpha } \right) =-\frac{1}{2}\sum_{i=1}^N{\sum_{j=1}^N{\alpha _i\alpha _jy_iy_j\left( \boldsymbol{x}_{\boldsymbol{i}}\cdot \boldsymbol{x}_{\boldsymbol{j}} \right)}}+\sum_{i=1}^N{\alpha _i}
minw,b L(w,b,α)\underset{\boldsymbol{w,}b}{\min}\ L\left( \boldsymbol{w,}b,\boldsymbol{\alpha } \right)α\alpha的极大,即是对偶问题
maxα12i=1Ni=1Nαiαjyiyj(xixj)+i=1Nαis.t. i=1Nαiyi =0αi0,i=1,2,...,N\begin{array}{lcr}max_{\alpha}-\frac{1}{2}\sum_{i=1}^{N}\sum_{i=1}^{N}\alpha_i\alpha_jy_iy_j(x_i\cdot x_j)+\sum_{i=1}^{N}\alpha_i\\\\ s.t.\ \sum_{i=1}^{N}\alpha_iy_i\ =0\\\\ \alpha_i\ge 0,i=1,2,...,N \end{array}
把目标式子加一个符号,将求解极大转换为求解极小
maxα12i=1Ni=1Nαiαjyiyj(xixj)i=1Nαis.t. i=1Nαiyi =0αi0,i=1,2,...,N\begin{array}{lcr}max_{\alpha}-\frac{1}{2}\sum_{i=1}^{N}\sum_{i=1}^{N}\alpha_i\alpha_jy_iy_j(x_i\cdot x_j)-\sum_{i=1}^{N}\alpha_i\\\\ s.t.\ \sum_{i=1}^{N}\alpha_iy_i\ =0\\\\ \alpha_i\ge 0,i=1,2,...,N \end{array}
现在我们的优化问题变成了如上的形式。对于这个问题,我们有更高效的优化算法,即序列最小优化(SMO)算法。这里暂时不展开关于使用SMO算法求解以上优化问题的细节,下一篇文章再加以详细推导。

我们通过这个优化算法能得到 α\alpha^*,再根据α\alpha^*,我们就可以求解出wwbb,进而求得我们最初的目的:找到超平面,即”决策平面”。
前面的推导都是假设满足KKT条件下成立的,KKT条件如下
{αi0yi(wixi+b)10αi(yi(wixi+b)1)=0\begin{cases} \alpha _i\ge 0\\ y_i\left( \boldsymbol{w}_{\boldsymbol{i}}\cdot \boldsymbol{x}_{\boldsymbol{i}}+b \right) -1\ge 0\\ \alpha _i\left( y_i\left( \boldsymbol{w}_{\boldsymbol{i}}\cdot \boldsymbol{x}_{\boldsymbol{i}}+b \right) -1 \right) =0\\ \end{cases}
另外,根据前面的推导,还有下面两个式子成立
w=i=1Nαiyixi\boldsymbol{w}=\sum_{i=1}^N{\alpha _iy_i\boldsymbol{x}_{\boldsymbol{i}}}
i=1Nαiyi=0\sum_{i=1}^N{\alpha _iy_i}=0
由此可知在α\alpha^*中,至少存在一个αj0\alpha_j>0(反证法可以证明,若全为0,则w=0w=0,矛盾),对此jj
yj(wxj+b)1 =0y_j(w^* \cdot x_j+b^*)-1\ =0
因此可以得到
w =i=1Nαiyixiw^*\ =\sum_{i=1}^{N}{\alpha_i^*y_ix_i}
b =yji=1Nαiyi(xixj)b^*\ =y_j-\sum_{i=1}^{N}{\alpha_i^*y_i(x_i \cdot x_j)}
对于任意训练样本(xi,yi)(x_i,y_i),总有αi=0\alpha_i=0或者yi(wxj+b)=1y_i(w \cdot x_j+b)=1。若αi=0\alpha_i=0,则该样本不会在最后求解模型参数的式子中出现。若αi0\alpha_i>0,则必有yi(wxj+b)=1y_i(w \cdot x_j+b)=1,所对应的样本点位于最大间隔边界上,是一个支持向量。这显示出支持向量机的一个重要性质:训练完成后,大部分的训练样本都不需要保留,最终模型仅与支持向量有关。

到这里都是基于训练集数据线性可分的假设下进行的,但是实际情况下几乎不存在完全线性可分的数据,为了解决这个问题,引入了“软间隔”的概念,即允许某些点不满足约束
yi(wxj+b)1y_i(w \cdot x_j+b)\ge1

采用hinge损失,将原优化问题改写为
minw,b,ξi12w2+Ci=1mξimin_{w,b,\xi_i}{\frac{1}{2}||w||^2+C\sum_{i=1}^{m}\xi_i}
s.t. yi(wxi+b)1ξis.t.\ y_i(w \cdot x_i +b)\ge 1-\xi_i
ξi0,i=1,2,...,N\xi_i\ge0,i=1,2,...,N
其中ξi\xi_i为"松弛变量",ξi=max(0,1yi(wxi+b))\xi_i=max(0,1-y_i(w \cdot x_i +b))即一个hinge损失函数。每一个样本都有一个对应的松弛变量,表征该样本不满足约束的程度。如果CC值越大,对分类的惩罚越大。跟线性可分求解的思路一致,同样这里先用拉格朗日乘子法得到拉格朗日函数,再求其对偶问题。
综合以上讨论,我们可以得到线性支持向量机学习算法如下:
输入:训练数据集T={(x1,y1),(x1,y1),...,(xN,yN)}T=\left\{ \left( \boldsymbol{x}_1,y_1 \right) ,\left( \boldsymbol{x}_1,y_1 \right) ,...,\left( \boldsymbol{x}_N,y_N \right) \right\}
其中,xiRnx_i \in R^nyi{+1,1},i=1,2,...Ny_i\in \left\{ +1,-1 \right\} ,i=1,2,...N
输出: 分离超平面和分类决策函数
(1)选择惩罚参数C>0C>0,构造并求解凸二次规划问题
minα 12i=1Nj=1Nαiαjyiyj(xixj)i=1Nαi\underset{\boldsymbol{\alpha }}{\min}\ \frac{1}{2}\sum_{i=1}^N{\sum_{j=1}^N{\alpha _i\alpha _jy_iy_j\left( \boldsymbol{x}_{\boldsymbol{i}}\cdot \boldsymbol{x}_{\boldsymbol{j}} \right)}}-\sum_{i=1}^N{\alpha _i}
s.t.    i=1Nαiyi=0s.t.\ \ \ \ \sum_{i=1}^N{\alpha _iy_i}=0
       0αiC, i=1,2,...,N\ \ \ \ \ \ \ 0\le \alpha _i\le C,\ i=1,2,...,N
得到最优解 α=(α1,α2,...,αN)T\boldsymbol{\alpha }^*=\left( \alpha _{1}^{*},\alpha _{2}^{*},...,\alpha _{N}^{*} \right) ^T计算
b=yji=1Nαiyi(xixj)b^*=y_j-\sum_{i=1}^N{\alpha _{i}^{*}y_i\left( \boldsymbol{x}_{\boldsymbol{i}}\cdot \boldsymbol{x}_{\boldsymbol{j}} \right)}
(3)求分离超平面
wx+b=0\boldsymbol{w}^*\cdot \boldsymbol{x}+b^*=0
分类决策函数:
f(x)=sign(wx+b)f\left( \boldsymbol{x} \right) =sign\left( \boldsymbol{w}^*\cdot \boldsymbol{x}+b^* \right)

非线性SVM算法原理

对于输入空间中的非线性分类问题,可以通过非线性变换将它转化为某个维特征空间中的线性分类问题,在高维特征空间中学习线性支持向量机。由于在线性支持向量机学习的对偶问题里,目标函数和分类决策函数都只涉及实例和实例之间的内积,所以不需要显式地指定非线性变换,而是用核函数替换当中的内积。核函数表示,通过一个非线性转换后的两个实例间的内积。具体地, K(x,z)K(x,z)是一个函数,或正定核,意味着存在一个从输入空间到特征空间的映射ϕ(x)\phi(x),对任意输入空间中的x,zx,z,有
K(x,z)=ϕ(x)ϕ(z)K(x,z)=\phi(x) \cdot \phi(z)
在线性支持向量机学习的对偶问题中,用核函数K(x,z)K(x,z)替代内积,求解得到的就是非线性支持向量机
f(x)=sign(i=1NαiyiK(x,xi)+b)f\left( x \right) =sign\left( \sum_{i=1}^N{\alpha _{i}^{*}y_iK\left( x,x_i \right) +b^*} \right)
综合以上讨论,我们可以得到非线性支持向量机学习算法如下:
输入:训练数据集T={(x1,y1),(x1,y1),...,(xN,yN)}T=\left\{ \left( \boldsymbol{x}_1,y_1 \right) ,\left( \boldsymbol{x}_1,y_1 \right) ,...,\left( \boldsymbol{x}_N,y_N \right) \right\}
其中,xiRnx_i \in R^nyi{+1,1},i=1,2,...Ny_i\in \left\{ +1,-1 \right\} ,i=1,2,...N
输出: 分离超平面和分类决策函数
(1)选择惩罚参数K(x,z)K(x,z),构造并求解凸二次规划问题
minα 12i=1Nj=1NαiαjyiyjK(xi,xj)i=1Nαi\underset{\boldsymbol{\alpha }}{\min}\ \frac{1}{2}\sum_{i=1}^N{\sum_{j=1}^N{\alpha _i\alpha _jy_iy_jK\left( \boldsymbol{x}_{\boldsymbol{i}},\boldsymbol{x}_{\boldsymbol{j}} \right)}}-\sum_{i=1}^N{\alpha _i}
s.t.    i=1Nαiyi=0s.t.\ \ \ \ \sum_{i=1}^N{\alpha _iy_i}=0
       0αiC, i=1,2,...,N\ \ \ \ \ \ \ 0\le \alpha _i\le C,\ i=1,2,...,N
得到最优解α=(α1,α2,...,αN)T\alpha^*=(\alpha_1^*,\alpha_2^*,...,\alpha_N^*)^T
(2)计算
选择α\alpha^*的一个分量αj\alpha_j^*满足条件0<αj<C0<\alpha_j^*<C,计算
b=yji=1NαiyiK(xi,xj)b^*=y_j-\sum_{i=1}^N{\alpha _{i}^{*}y_iK\left( \boldsymbol{x}_{\boldsymbol{i}},\boldsymbol{x}_{\boldsymbol{j}} \right)}

(3)分类决策函数:
f(x)=sign(i=1NαiyiK(x,xi)+b)f\left( x \right) =sign\left( \sum_{i=1}^N{\alpha _{i}^{*}y_iK\left( x,x_i \right) +b^*} \right)
介绍一个常用的核函数——高斯核函数
K(x,z)=exp(xz22σ2)K\left( x,z \right) =\exp \left( -\frac{\lVert x-z \rVert ^2}{2\sigma ^2} \right)
对应的SVM是高斯径向基函数分类器,在此情况下,分类决策函数为
f(x)=sign(i=1Nαiyiexp(xz22σ2)+b)f\left( x \right) =sign\left( \sum_{i=1}^N{\alpha _{i}^{*}y_i\exp \left( -\frac{\lVert x-z \rVert ^2}{2\sigma ^2} \right) +b^*} \right)