给定训练样例集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x m , y m ) } , y i ∈ { − 1 , + 1 } D=\{(\boldsymbol x_1,y_1),(\boldsymbol x_2,y_2),\cdots,(\boldsymbol x_m,y_m)\},y_i\in\{-1,+1\} D={(x1,y1),(x2,y2),⋯,(xm,ym)},yi∈{−1,+1},我们可用超平面来划分特征(类似感知机),特征空间中的超平面方程为:
w T x + b = 0 \begin{aligned} \boldsymbol{w}^\mathbf{T}\boldsymbol{x}+b=0 \end{aligned} wTx+b=0
我们称距离超平面最近的几个训练样本点为支持向量(support vector),规定支持向量满足 y i ( w T x i + b ) = 1 y_i(\boldsymbol{w}^\mathbf{T}\boldsymbol{x}_i+b)=1 yi(wTxi+b)=1,两个异类支持向量到超平面的距离之和称为间隔(margin):
γ = 2 ∣ ∣ w ∣ ∣ \begin{aligned} \gamma=\frac{2}{||\boldsymbol w||} \end{aligned} γ=∣∣w∣∣2
如下图所示,红线就是我们想找的超平面:
支持向量机(Support Vector Machine,SVM)的目标就是找到间隔最小的超平面:
min w , b 2 ∣ ∣ w ∣ ∣ s.t. y i ( w T x i + b ) ⩾ 1 , i = 1 , 2 , ⋯ , m \begin{aligned} \underset{\boldsymbol w,b}{\text{min}}\quad &\frac{2}{||\boldsymbol w||} \\ \text{s.t.}\quad &y_i(\boldsymbol{w}^\mathbf{T}\boldsymbol{x}_i+b)\geqslant1,\quad i=1,2,\cdots,m \\ \end{aligned} w,bmins.t.∣∣w∣∣2yi(wTxi+b)⩾1,i=1,2,⋯,m
为方便求解,我们取上式的等价形式:
min w , b 1 2 ∣ ∣ w ∣ ∣ 2 s.t. y i ( w T x i + b ) ⩾ 1 , i = 1 , 2 , ⋯ , m \begin{aligned} \underset{\boldsymbol w,b}{\text{min}}\quad &\frac{1}{2}||\boldsymbol w||^2 \\ \text{s.t.}\quad &y_i(\boldsymbol{w}^\mathbf{T}\boldsymbol{x}_i+b)\geqslant1,\quad i=1,2,\cdots,m \\ \end{aligned} w,bmins.t.21∣∣w∣∣2yi(wTxi+b)⩾1,i=1,2,⋯,m
这就是支持向量机的基本型。
显而易见,支持向量机是一个凸优化问题,因此有多种方法进行求解,这里为了方便引出后续概念,采用拉格朗日对偶(lagrange duality)方法进行求解。
关于拉格朗日对偶相关的凸优化内容问题,请点击这里。
经证明,支持向量机是一个强对偶问题,因此原问题的最小值就是对偶问题(dual problem)的最大值。
经计算,可以得到对偶问题:
max α ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j x i T x j s.t. ∑ i = 1 m α i y i = 0 α i ⩾ 0 , i = 1 , 2 , ⋯ , m \begin{aligned} \underset{\boldsymbol\alpha}{\max}\quad &\sum^m_{i=1}\alpha_i-\frac{1}{2}\sum^m_{i=1}\sum^m_{j=1}\alpha_i\alpha_jy_iy_j\boldsymbol x^\mathbf T_i\boldsymbol x_j \\ \text{s.t.}\quad &\sum^m_{i=1}\alpha_iy_i=0\\ &\alpha_i\geqslant0,\quad i=1,2,\cdots,m \\ \end{aligned} αmaxs.t.i=1∑mαi−21i=1∑mj=1∑mαiαjyiyjxiTxji=1∑mαiyi=0αi⩾0,i=1,2,⋯,m
其KKT条件为:
{ α i ⩾ 0 y i ( w T x i + b ) − 1 ⩾ 0 α i ( y i ( w T x i + b ) − 1 ) = 0 \begin{aligned} \left\{\begin{matrix}\alpha_i\geqslant0\\y_i(\boldsymbol{w}^\mathbf{T}\boldsymbol{x}_i+b)-1\geqslant0 \\\alpha_i(y_i(\boldsymbol{w}^\mathbf{T}\boldsymbol{x}_i+b)-1)=0\end{matrix}\right. \end{aligned} ⎩ ⎨ ⎧αi⩾0yi(wTxi+b)−1⩾0αi(yi(wTxi+b)−1)=0
求解该对偶问题,得到模型:
f ( x ) = ∑ i = 1 m α i y i x i T x i + b f(\boldsymbol x)=\sum^m_{i=1}\alpha_iy_i\boldsymbol x^\mathbf T_i\boldsymbol x_i+b f(x)=i=1∑mαiyixiTxi+b
显然,对于支持向量机来说,大部分的训练样本都不需要保留,最终结果仅与支持向量有关(因为其对应 α ≠ 0 \alpha\neq0 α=0)。
在求解方法上,可采用SMO等算法,这里不做详细展开。
若数据集在特征空间内非线性可分,则仅使用SVM基本型无法解决问题。
对于此问题,可将样本从原始空间映射到一个更高维的特征空间,使得样本在新特征空间内线性可分。(线性回归:像,太像了)
首先给出一条定理:如果原始空间是有限维,则一定存在一个高维特征空间使样本线性可分
令 ϕ ( x ) \phi(\boldsymbol x) ϕ(x)表示将 x \boldsymbol x x映射后的特征向量,定义核函数(kernel function) κ ( x i , x j ) = ϕ ( x i ) T ϕ ( x j ) \kappa(\boldsymbol x_i,\boldsymbol x_j)=\phi(\boldsymbol x_i)^\bold T\phi(\boldsymbol x_j) κ(xi,xj)=ϕ(xi)Tϕ(xj)
则模型可写为
f ( x ) = ∑ i = 1 m α i y i κ ( x i , x j ) + b f(\boldsymbol x)=\sum^m_{i=1}\alpha_iy_i\kappa(\boldsymbol x_i,\boldsymbol x_j)+b f(x)=i=1∑mαiyiκ(xi,xj)+b
只要一个对称函数所对应的核矩阵(kernel matrix)半正定,则它就可以当作核函数使用,换而言之,任何一个核函数都隐式地定义了一个再生核希尔伯特空间(RKHS)。
其中,核矩阵 K \bold K K为:
K = ( κ ( x 1 , x 1 ) ⋯ κ ( x 1 , x j ) ⋯ κ ( x 1 , x m ) ⋮ ⋱ ⋮ ⋱ ⋮ κ ( x i , x 1 ) ⋯ κ ( x i , x j ) ⋯ κ ( x i , x m ) ⋮ ⋱ ⋮ ⋱ ⋮ κ ( x m , x 1 ) ⋯ κ ( x m , x j ) ⋯ κ ( x m , x m ) ) \bold K=\begin{pmatrix} \kappa(\boldsymbol x_1,\boldsymbol x_1) & \cdots & \kappa(\boldsymbol x_1,\boldsymbol x_j) & \cdots & \kappa(\boldsymbol x_1,\boldsymbol x_m) \\ \vdots & \ddots & \vdots & \ddots & \vdots \\ \kappa(\boldsymbol x_i,\boldsymbol x_1) & \cdots & \kappa(\boldsymbol x_i,\boldsymbol x_j) & \cdots & \kappa(\boldsymbol x_i,\boldsymbol x_m) \\ \vdots & \ddots & \vdots & \ddots & \vdots \\ \kappa(\boldsymbol x_m,\boldsymbol x_1) & \cdots & \kappa(\boldsymbol x_m,\boldsymbol x_j) & \cdots & \kappa(\boldsymbol x_m,\boldsymbol x_m) \\ \end{pmatrix} K= κ(x1,x1)⋮κ(xi,x1)⋮κ(xm,x1)⋯⋱⋯⋱⋯κ(x1,xj)⋮κ(xi,xj)⋮κ(xm,xj)⋯⋱⋯⋱⋯κ(x1,xm)⋮κ(xi,xm)⋮κ(xm,xm)
但是我们一般不知道什么样的核函数是好用的,如果核函数的选择不合适,则很可能导致性能不佳。
在选择核函数方面,就需要一些经验指导了,下表列出了一些常用核函数:
人们发展出一系列基于核函数的学习方法,统称为核方法(kernel methods),最常见的便是将核函数引入线性学习器,使其拓展为非线性学习器。
显然,SVM不允许有任何一个错误样本,但这在现实生活中显然是不常见的。
因此我们允许SVM在某些样本上出错,即允许某些样本不满足约束,但在最大化间隔的同时,不满足约束的样本应该尽量少。
对优化目标进行改进:
min w , b 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i = 1 m l ( y i ( w T x i + b ) − 1 ) \begin{aligned} \underset{\boldsymbol w,b}{\text{min}}\quad &\frac{1}{2}||\boldsymbol w||^2+C\sum^m_{i=1}\mathscr l(y_i(\boldsymbol{w}^\mathbf{T}\boldsymbol{x}_i+b)-1) \\ \end{aligned} w,bmin21∣∣w∣∣2+Ci=1∑ml(yi(wTxi+b)−1)
式中 C > 0 C>0 C>0是一个常数, l \mathscr l l是损失函数,常采用以下三种形式:
hinge损失 : l hinge ( z ) = max ( 0 , 1 − z ) 指数损失 : l exp ( z ) = exp ( − z ) 对率损失 : l log ( z ) = log ( 1 + exp ( − z ) ) \begin{aligned} &\text{hinge损失}:\mathscr l_\text{hinge}(z)=\max(0,1-z)\\ &指数损失:\mathscr l_\text{exp}(z)=\exp(-z)\\ &对率损失:\mathscr l_\text{log}(z)=\log(1+\exp(-z))\\ \end{aligned} hinge损失:lhinge(z)=max(0,1−z)指数损失:lexp(z)=exp(−z)对率损失:llog(z)=log(1+exp(−z))
使用hinge损失,引入松弛变量解得(具体求解过程略,请参考西瓜书与南瓜书):
min w , b , ξ i 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i = 1 m ξ i s.t. y i ( w T x i + b ) ⩾ 1 − ξ i ξ i ⩾ 0 , i = 1 , 2 , ⋯ , m \begin{aligned} \underset{\boldsymbol w,b,\xi_i}{\text{min}}\quad &\frac{1}{2}||\boldsymbol w||^2+C\sum^m_{i=1}\xi_i \\ \text{s.t.}\quad &y_i(\boldsymbol{w}^\mathbf{T}\boldsymbol{x}_i+b)\geqslant1-\xi_i\\ &\xi_i\geqslant0,\quad i=1,2,\cdots,m \\ \end{aligned} w,b,ξimins.t.21∣∣w∣∣2+Ci=1∑mξiyi(wTxi+b)⩾1−ξiξi⩾0,i=1,2,⋯,m
上式即为软间隔支持向量机,相对的,6.1节中得到的SVM为硬间隔支持向量机。
更一般的,可以将优化目标写为这种形式:
min f Ω ( f ) + C ∑ i = 1 m l ( f ( x i ) , y i ) \begin{aligned} \underset{f}{\text{min}}\quad &\Omega(f)+C\sum^m_{i=1}\mathscr l(f(\boldsymbol x_i),y_i) \\ \end{aligned} fminΩ(f)+Ci=1∑ml(f(xi),yi)
其中前一项称为结构风险(structural risk),表述了我们希望获得具有何种性质的模型,后一项称为经验风险(empirical tisk),用于描述模型与训练数据的契合程度。
从降低过拟合角度分析,可将前一项称为正则化项, C C C称为正则化常数,常用向量范数当作正则化项。
支持向量回归(Support Vector Regression,SVR)类似线性回归,但仅当 f ( x ) f(\boldsymbol x) f(x)与 y y y之间的差别绝对值大于 ϵ \epsilon ϵ时才计算损失。
形象来说,就是把一条线变成了一根带子,如图:
因此,SVR的优化目标为:
min w , b 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i = 1 m l ϵ ( f ( x i ) − y i ) l ϵ ( z ) = { 0 if ∣ z ∣ ⩽ ϵ ∣ z ∣ − ϵ , otherwise \begin{aligned} \underset{\boldsymbol w,b}{\text{min}}\quad \frac{1}{2}||\boldsymbol w||^2+C\sum^m_{i=1}\mathscr l_\epsilon(f(\boldsymbol x_i&)-y_i) \\ \mathscr l_\epsilon(z)=\begin{cases}0 & \text{ if } |z|\leqslant\epsilon \\|z|-\epsilon, & \text{ otherwise }\end{cases} \end{aligned} w,bmin21∣∣w∣∣2+Ci=1∑mlϵ(f(xilϵ(z)={0∣z∣−ϵ, if ∣z∣⩽ϵ otherwise )−yi)
其中 l ϵ \mathscr l_\epsilon lϵ称为 ϵ \epsilon ϵ-不敏感损失函数
形式上来说,SVR类似软间隔支持向量机,因此可以采用类似的办法求解,这里不作具体展开。
同样的,SVR也可以引入特征映射与核函数。
参考资料
周志华:《机器学习》
维基百科
Datawhale:【吃瓜教程】《机器学习公式详解》(南瓜书)与西瓜书公式推导直播合集
Lauer:【凸优化笔记6】-拉格朗日对偶(Lagrange duality)、KKT条件