支持向量机

什么是支持向量机?

支持向量机(Support Vector Machine, SVM)是一种二类分类器。它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机;支持向量机还包括核技巧,这使其成为实质上的非线性分类器。支持向量机的学习策略就是间隔最大化,可形式化为一个求解凸二次规划(convex quadratic programming)的问题,也等价于正则化的**合页损失函数(Hinge Loss)**的最小化问题。支持向量机的学习算法是求解凸二次规划的最优化算法。

支持向量机包含构建由简至繁的模型:线性可分支持向量机、线性支持向量机以及非线性支持向量机。当数据线性可分时,通过硬间隔最大化(hard margin maximization),学习一个线性的分类器;当数据近似线性可分时,通过软间隔最大化(soft margin maximization),也学习一个线性的分类器,也就是线性支持向量机,也叫做软间隔支持向量机;当数据线性不可分时,通过使用核技巧(kernel trick)以及软间隔最大化,学习非线性支持向量机。

核心思想:硬(软)间隔最大化、合页损失函数、决策边界、核函数

第一部分:硬(软)间隔最大化

首先,考虑一个二分类问题,我们假设给定一个特征空间上的训练数据集

T={(x1,y1),(x2,y2),,(xN,yN)}T = \{ (x_1,y1), (x_2,y_2), \cdots, (x_N,y_N)\}

其中,xi=Rn,yi={+1,1},i=1,2,,Nx_i = R^n, y_i = \{+1,-1\}, i = 1,2,\cdots,Nxix_i 为第 ii 个特征向量,也称为实例,yiy_ixix_i 的类标记,我们的目标是在特征空间中找到一个分离超平面,能将实例分到不同的类,分离超平面对应方程 wx+b=0w\cdot x+b = 0,它由法向量 ww 和截距 bb 决定,分离超平面将特征空间划分成两部分,一部分为正类(yi=+1y_i = +1),一部分是负类(yi=1y_i = -1)。法向量指向的一侧为正类,另一侧为负类。

一般来说,在训练集线性可分,存在无穷个分离超平面进行分类,感知机利用误分类最小的策略,求分离超平面,这时解有无穷多个。线性可分支持向量机可以利用间隔最大化求最优分离超平面,这时,解是唯一的!

下面来说说间隔最大化,最直观的解释是:对训练数据集找到几何间隔最大的超平面意味着以充分大的确信度对训练数据进行分类。也就是说,不仅将正负实例点分开,而且对最难分的实例点(离超平面最近的点)也有足够大的确信度将它们分开。这样的超平面应该对未知的新实例有很好的分类预测能力。

具体来说,这个问题可以表示为下面的约束最优化问题:

maxw,bγ\max_{w,b} \quad \gamma

s.t.yi(wwxi+bw)γ,i=1,2,,Ns.t. \quad y_i \Big(\frac{w}{||w||} \cdot x_i + \frac{b}{||w||}\Big)\geq\gamma, \quad i=1,2,\cdots,N

我们希望最大化超平面 (w,b)(w,b) 关于训练数据集的几何间隔 γ\gamma,约束条件表示的是超平面关于美国训练样本点的几何间隔至少是 γ\gamma

注意到函数间隔的取值并不影响最优化的解。事实上,假设将 wwbb 按比例改变,这是函数间隔也按相应的比例改变,所以没影响,这样我们可以取 γ=1\gamma = 1。将其代入上面的式子,注意到最大化 1w\frac{1}{||w||} 和最小化 12w2\frac{1}{2}||w||^2 是等价的,那么我们可以把问题转化成一个凸二次规划问题

十分重要!

minw,b12w2\min_{w,b} \quad \frac{1}{2}||w||^2

s.t.yi(wxi+b)10,i=1,2,,Ns.t. \quad y_i(w\cdot x_i+b) - 1 \geq 0, \quad i=1,2,\cdots,N

下面来说一下什么是硬(软)间隔,我们知道SVM本质就是最大化margin,但是面对如下图所示的一些overlapping或者说是异常点,我们很难找到一个合适的决策边界来分类,但是我们如果绝对遵从正确分类的话,会造成下图右边的图片所示的情况,但是这明显有悖于我们全局边际最大化的初衷,自然我们要做些取舍,我们要允许错误分类(misclassification)从而保证全局最优化。

再从数学层面上解释为什么要引入软间隔最大化,是因为在面对线性不可分数据时,上述的不等式约束 yi(wxi+b)10,i=1,2,,N\quad y_i(w\cdot x_i+b) - 1 \geq 0, \quad i=1,2,\cdots,N 并不能都成立。

那为了解决这个问题,我们对每个样本点 (xi,yi)(x_i,y_i) 引入松弛变量 ξi0\xi_i \geq 0,使得函数间隔加上松弛变量大于等于1,这样,约束条件变为

yi(wxi+b)1ξi\quad y_i(w\cdot x_i+b) \geq 1 - \xi_i

同时,对每个 ξi\xi_i,支付一个代价 ξi\xi_i,目标函数由原来的 12w2\frac{1}{2}||w||^2变成

12w2+Ci=1Nξi\frac{1}{2}||w||^2+C\sum_{i=1}^{N}\xi_i

这里的 C>0C>0 称为惩罚函数,CC 越大对错误分类的惩罚越大,而最小化 12w2+Ci=1Nξi\frac{1}{2}||w||^2+C\sum_{i=1}^{N}\xi_i 的意义在于两点:使得 12w2\frac{1}{2}||w||^2 尽量小也就是间隔尽量大,同时使错误分类点的个数尽量小

所以我们有

minw,b,ξ12w2+Ci=1Nξi\min_{w,b,\xi} \quad \frac{1}{2}||w||^2 + C\sum_{i=1}^{N}\xi_i

s.t.yi(wxi+b)1ξi,i=1,2,,Ns.t. \quad \quad y_i(w\cdot x_i+b) \geq 1 - \xi_i, \quad i=1,2,\cdots,N

第二部分:支持向量和间隔边界

支持向量

在线性可分的情况下,训练集的样本点钟与分离超平面距离最近的样本点的实例称为支持向量(support vector)。支持向量是使约束条件等式成立的点,即:

yi(wxi+b)1=0,i=1,2,,N\quad y_i(w\cdot x_i+b) - 1 = 0, \quad i=1,2,\cdots,N

yi=+1y_i = +1 的正例点,支持向量在超平面

H1=wx+b=1H_1 = w\cdot x+b=1

上,对 yi=+1y_i = +1 的负例点, 支持向量在超平面

H1=wx+b=1H_1 = w\cdot x+b=-1

上。如下图所示,在 H1H_1H2H_2 上的点就是支持向量。

间隔边界

注意到 H1H_1H2H_2 平行,并且没有实例点落在其间。H1H_1H2H_2 的距离叫做间隔(margin)。间隔依赖于分离超平面的法向量 ww, 等于 2w\frac{2}{||w||}H1H_1H2H_2 称为间隔边界

再决定分离超平面时只有支持向量起作用,而其他实例点并不起作用。如果移动支持向量将改变所求的解;但是如果在间隔边界意外移动其他实例点,甚至去掉这些点,则解不会改变。也就是说解只跟支持向量相关

由于支持向量在确定分离超平面起着决定性作用,所以支持向量机就由此而来。一般来说,支持向量的个数相对较少,所以支持向量机由很少的“重要”样本确定。

第三部分:对偶算法

这一部分是SVM最核心也是最理论的部分,所以分成几小部分展开。

无约束最小化

我们之前所讨论的最小化问题是带有边界条件的,也就是我们要满足数据集里所有的点到分离超平面的距离都要超过 1w\frac{1}{||w||}。那么我们如果不考虑限制条件只单纯的对函数最小化,问题会简单一些,也就是无约束最小化(Unconstrained minimization)。

定理:令 f:ΩRf: \Omega \rarr \mathbb{R} 为在点 xx^* 的连续二阶导函数。如果 xx^* 满足 f(x)=0\nabla f(x^*) = 0 并且 2f(x)\nabla^2 f(x^*) 是正定的(positive definite),那么 xx^* 是一个局部最小点。(证明,第11页)

敲黑板!!!

也就是说,如果 xx^* 满足:

  1. ffxx^* 梯度为 0:
    f(x)=0\nabla f(x^*) = 0
    并且
  2. ffxx^* 的海森矩阵(Hessian)是正定的:
    zT((2f(x))z>0,zRnz^T((\nabla^2 f(x^*))z>0, \forall z \in \mathbb{R}^n
    其中
    2f(x)=(2fx122fx1xn2fxnx12fxn2)\nabla^2f(\mathbf x) = \begin{pmatrix}\frac{\partial^2f}{\partial x^2_1 } & \cdots & \frac{\partial^2f}{\partial x_1 \partial x_n} \\ \vdots & \ddots & \vdots \\ \frac{\partial^2f}{\partial x_n \partial x_1} & \cdots & \frac{\partial^2f}{\partial x^2_n}\end{pmatrix}
    那么 xx^* 是一个局部最小点。

这里主要说一下海森矩阵

海森矩阵一般简写为 HH, 但是我们在这里叫它 2f(x)\nabla^2 f(x^*),这里的 2\nabla^2 代表的是二阶偏导

我们把数据带进去是可以算出海森矩阵的,海森矩阵是一个关于一个标量函数的二阶偏导所构成的对称方阵,它描述了多变量函数的局部曲率。

下面说一下什么是正定

我们需要判断海森矩阵在 xx^* 是不是正定的。

定义:如果对于所有 xRnx \in \mathbb{R}^n,如果 xTAx>0x^TAx>0,那么对称矩阵 AAA=ATA = A^T)就叫作正定矩阵。

在这里我们把 xx 替换成 zz, 把 AA 替换成 2f(x)\nabla^2 f(x^*),就得到

zT((2f(x))z>0,zRnz^T((\nabla^2 f(x^*))z>0, \forall z \in \mathbb{R}^n

但是明显我们不能对于所有的 zz 进行尝试,好在我们有等价的满足条件来替换:

具体如何判断请看这里!

如果我们能够找到所有满足以上两个条件的 XX, 这里指的是向量,那么我们相当于找到了一个函数的局部最小值,但是局部最小值不等于全局最小值。

那么如何找到全局最小值呢?

  1. 找到所有的局部最小值
  2. 取最小的局部最小值

另一种方法是判定函数是不是凸函数,如果是的话,那么局部最小值就是全局最小值!如果有兴趣请看这里(强烈建议

对偶问题的引入:拉格朗日乘子

那么终于来到了我们的主角:对偶问题

在数学优化理论中,对偶性意味着可以从原始问题或对偶问题(对偶性原理)这两个角度来看优化问题。对偶问题的解决方案为原始(最小化)问题的解决方案提供了下限。(维基百科

什么是下限?

给个例子吧,加入我们有

S={2,4,8,12}S = \{2,4,8,12\}

而且,因为2比任何其他下限大,所以我们可以给它起一个特殊的名字,我们称它为最大下限

为什么要关心对偶呢?

是因为有时候解决对偶问题比解决原问题更加简单,如果你有一个最小化的问题,那么你也可以把他看做一个最大化问题。也就是当你在找这个问题的最小值时,其实这就是一个最小化问题的解的下界

那么对偶的重要性体现在哪?

左边图中,我们可以看到在原问题中,我们要去对顶上的函数来最小化,它的最小值在 PP 处取到。如果我们来寻找一个对偶函数,我们就会分析下面这个图,其最大值在 DD 点取到,所以我们可以明确 DD 是一个下界,那么 PDP-D 就是对偶间隙(duality gap),在这里,PD>0P-D>0 也就是说存在弱对偶,而右边的图展示的是强对偶,也就是 PD=0P-D=0 的情况。

之前介绍了无限制最优化问题的解决方法,下面说一下有限制条件的最优化问题解决方法。

一个最优化问题可以简单写成:

minimizexf(x)subject  togi(x)=0,i=1,,phi(x)0,i=1,,m\begin{aligned}&{\underset {x}{\operatorname {minimize} }}&&f(x)\\&\operatorname {subject\;to} &&g_{i}(x)=0,\quad i=1,\dots ,p\\&&&h_{i}(x)\leq 0,\quad i=1,\dots ,m\end{aligned}

这里,ff 称作目标函数,也叫损失函数,通过改变 xx 我们希望找到一个值 xx^* 使得 ff 在此达到最小值。

这里有 pp 个方程 gig_i,其定义了等式约束,并且有 mm 个方程 hih_i 定义了不等式约束。

所以如何解决这种问题呢?

我们引入了拉格朗日乘子(Lagrange Multipliers),下面是维基百科中的英文解释。

In mathematical optimization, the method of Lagrange multipliers is a strategy for finding the local maxima and minima of a function subject to equality constraints. (Wikipedia)

拉格朗日告诉我们如果要去寻找一个约束方程的最小值,那么我们需要去寻找使得 f(x,y)=λg(x,y)\nabla f(x,y) = \lambda \nabla g(x,y)

那么 λ\lambda 就是我们所说的拉格朗日乘子。注意到这个公式不要求梯度是有相同的方向的,因为 λ\lambda 可以为负数,我们只需要保证他们是平行的,是因为这个方法不仅仅可以用来寻找最小值,也可以寻找最大值。

我们定义:

L(x,λ,η)=f(x)+i=1mλigi(x)+i=1pηihi(x)L(x,\lambda, \eta) = f(x)+\sum_{i=1}^{m}\lambda_i g_i(x) + \sum_{i=1}^{p} \eta_ih_i(x)

那么原问题等价于无约束形式:

minxmaxλ,ηL(x,λ,η)s.t.λi0\min_{x}\max_{\lambda,\eta}L(x,\lambda,\eta)\quad s.t. \quad \lambda_i \geq 0

这是因为当满足原问题的不等式约束时, λi=0\lambda_i = 0 才能取得最大值,直接等价于原问题,如果不满足原问题的不等式约束,那么最大值就为正无穷,由于需要取到最小值,所以这种情况不存在。

这个问题的对偶形式:

maxλ,ηminxL(x,λ,η)s.t.λi0\max_{\lambda,\eta}\min_{x}L(x,\lambda,\eta)\quad s.t. \quad \lambda_i \geq 0

所以对偶问题是关于 λ,η\lambda, \eta 的最大化问题。

由于:

maxλi,ηjminxL(x,λi,ηj)minxmaxλi,ηjL(x,λi,ηj)\max_{\lambda_i,\eta_j}\min_{x}L(x,\lambda_i,\eta_j) \leq \min_{x}\max_{\lambda_i,\eta_j}L(x,\lambda_i,\eta_j)

证:显然有
minxLLmaxλ,η\min_{x}L \leq L \leq \max_{\lambda,\eta}
于是显然有
maxλ,ηminxLL\max_{\lambda, \eta} \min_{x}L \leq L

minxmaxλ,ηLL\min_{x} \max_{\lambda, \eta} L \geq L

Wolfe dual Lagrangian function

下面我们对原问题进行对偶转化,看看是否能在原有的拉格朗日方程的基础上减少一些变量。

还记得朗格朗日方程是:

L(w,b,α)=12w2i=1mαi[yi(wxi+b)1]L(w,b,\alpha) = \frac{1}{2}||w||^2-\sum_{i=1}^{m}\alpha_i[y_i(w \cdot x_i + b) -1]

拉格朗日原问题是:

minw,bmaxαL(w,b,α)\min_{w,b} \max_{\alpha} L(w,b,\alpha)
subject toai0, i=1,,msubject \ to \quad a_i \geq 0, \ i = 1, \cdots, m

对于求解最小值问题,我们对 LL 关于 wwbb

wL=wi=1mαiyixi=0Lb=i=1mαiyi=0\begin{aligned} \nabla_wL &= w - \sum_{i=1}^{m}\alpha_iy_ix_i=0 \\ \frac{\partial L}{\partial b} &= -\sum_{i=1}^{m}\alpha_iy_i = 0 \end{aligned}

通过第一个等式,我们有

w=i=1mαiyixiw = \sum_{i=1}^{m}\alpha_iy_ix_i

我们把上式带入 LL 中化简得到:

W(α,b)=i=1mαi12i=1mj=1mαiαjyiyjxixjbi=1mαiyiW(\alpha,b) = \sum_{i=1}^{m}\alpha_i-\frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m}\alpha_i\alpha_jy_iy_jx_i \cdot x_j - b\sum_{i=1}^{m}\alpha_iy_i

到此,我们已经把 ww 去除了,根据 Lb=0\frac{\partial L}{\partial b}=0,我们有:

W(α)=i=1mαi12i=1mj=1mαiαjyiyjxixjW(\alpha) = \sum_{i=1}^{m}\alpha_i-\frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m}\alpha_i\alpha_jy_iy_jx_i \cdot x_j

上式也称为 Wolfe dual Lagrangian function

问题也被转化为了 wolfe 对偶问题:

maxα i=1mαi12i=1mj=1mαiαjyiyjxixj\max_\alpha \ \sum_{i=1}^{m}\alpha_i-\frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m}\alpha_i\alpha_jy_iy_jx_i \cdot x_j

subject toαi0, for any i=1,,msubject \ to \quad \alpha_i \geq 0, \ for \ any \ i = 1, \cdots , m

i=1mαiyi=0\sum_{i=1}^{m}\alpha_iy_i=0

我们可以看到,这样一来我们的目标方程 WW 就仅仅取决于朗格朗日乘子了!

KKT条件

因为我们解决的问题包含不等式约束条件,那么这里有个额外的条件我们不得不满足:解必须满足 Karsuh-Kuhn-Tucker (KKT) 条件

简单说,如果一个解满足KKT条件,那么可以保证它就是一个最优解。

KKT条件是:

所以接下来一旦我们有了拉格朗日乘子,就可以计算 w=i=1mαiyixiw = \sum_{i=1}^{m}\alpha_iy_ix_ib=yiwxib = y_i - w \cdot x_i。此外,我们可以使用更稳定的方法来求 bb 而不直接去任意的支持向量 xix_i

b=1Si=1S(yiwxi)b = \frac{1}{S}\sum_{i=1}^{S}(y_i-w \cdot x_i)

其中 SS 是支持向量的总个数。

软间隔条件下的对偶问题

之前说过了硬软间隔最大化的目的以及他们的区别,简而言之,硬间隔最大化面对异常值特别敏感,很容易造成过拟合,而软间隔基于硬间隔加入了松弛变量,从而容许分类器有错误分类的情况,从而对全局的分类效果更佳。

既然说到了松弛变量 ζ\zeta,那么我们之前的限制条件:

yi(wxi+b)1y_i(w \cdot x_i + b) \geq 1

变成了:

yi(wxi+b)1ζiy_i(w \cdot x_i + b) \geq 1-\zeta_i

但如果 ζi\zeta_i 取值太大的话,那么限制条件就不起作用了,所以我们要修改损失函数来惩罚值较大的 ζi\zeta_i

minw,b,ζ12w2+i=1mζi\min_{w,b,\zeta} \frac{1}{2}||w||^2+\sum_{i=1}^{m}\zeta_i

subject toyi(wxi+b)1ζifor any i=1,,msubject \ to \quad y_i(w \cdot x_i + b) \geq 1 - \zeta_i \quad for \ any \ i = 1, \cdots , m

这里,我们把所有的 ζi\zeta_i 加起来放到了损失函数里面,相当于一个惩罚项。总而言之,这样得到的解就是可以满足间隔最大化同时有最小的误差的超平面。

还有个问题就是,我们要保证 ζi0\zeta_i \geq 0,此外我们要加上一个控制变量 CC 来对松弛变量做调整,因为有可能我们还需要硬间隔法的存在,CC 的大小会决定 ζ\zeta 有多重要!

最终,对于软间隔情况,我们有:

minw,b,ζ12w2+Ci=1mζi\min_{w,b,\zeta} \frac{1}{2}||w||^2+C\sum_{i=1}^{m}\zeta_i

subject toyi(wxi+b)1ζiζ0for any i=1,,msubject \ to \quad y_i(w \cdot x_i + b) \geq 1 - \zeta_i \quad \zeta \geq 0 \quad for \ any \ i = 1, \cdots , m

同理,我们对于软间隔情况有类似的对偶转换:

maxα i=1mαi12i=1mj=1mαiαjyiyjxixj\max_\alpha \ \sum_{i=1}^{m}\alpha_i-\frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m}\alpha_i\alpha_jy_iy_jx_i \cdot x_j

subject to0αiC, for any i=1,,msubject \ to \quad 0 \leq \alpha_i \leq C, \ for \ any \ i = 1, \cdots , m

i=1mαiyi=0\sum_{i=1}^{m}\alpha_iy_i=0

由于损失函数加入了 Ci=1mζiC\sum_{i=1}^{m}\zeta_i,如果 αi\alpha_i 大于 CC,在经过拉格朗日方程的变换后,正则项就为负数了,所以要小于等于 CC

重点!!!

那么如何选择 CC 呢?我们可以使用 grid searchcross validation

延伸

2-Norm soft margin

minw,b,ζ12w2+Ci=1mζi2\min_{w,b,\zeta} \frac{1}{2}||w||^2+C\sum_{i=1}^{m}\zeta_i^2

subject toyi(wxi+b)1ζiζ0for any i=1,,msubject \ to \quad y_i(w \cdot x_i + b) \geq 1 - \zeta_i \quad \zeta \geq 0 \quad for \ any \ i = 1, \cdots , m

nu-SVM

由于 CC 的范围被特征空间所影响,这个方法用了参数 vv,其值在 0 到 1 之间变动。

maxα 12i=1mj=1mαiαjyiyjxixj\max_\alpha \ -\frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m}\alpha_i\alpha_jy_iy_jx_i \cdot x_j

subject to0αi1m,subject \ to \quad 0 \leq \alpha_i \leq \frac{1}{m},

i=1mαiyi=0\sum_{i=1}^{m}\alpha_iy_i=0

i=1mαiv for any i=1,,m\sum_{i=1}^{m}\alpha_i \geq v \quad \ for \ any \ i = 1, \cdots , m

第四部分:合页损失函数(Hinge Loss)

那么我们继续说说 CC 的作用,它控制着支持向量机如何控制误差,

我们把支持向量机和逻辑回归的损失函数做一下对比:

注意到这里 mm 被去掉了,在第一部分我们提到了为什么,这里不再赘述,现在我们要研究的是 cost1cost_1cost2cost_2 分别是什么。

如上图所示,当 θTx(i)1\theta^Tx^{(i)} \geq 1,损失函数为 00,并且 y(i)=1y^{(i)} = 1;当 θTx(i)1\theta^Tx^{(i)} \leq -1,损失函数为 00,并且 y(i)=0y^{(i)} = 0

所以问题被转换成:

minθ12j=1nθj2\min_\theta \frac{1}{2}\sum_{j=1}^{n}\theta_j^2

s.t.{θTx(i)1if y(i)=1θTx(i)1if y(i)=0 s.t. \quad\left\{ \begin{aligned} \theta^Tx^{(i)} &\geq 1 \quad if \ y^{(i)}=1\\ \theta^Tx^{(i)} &\leq -1 \quad if \ y^{(i)}=0 \end{aligned} \right.

第五部分:核函数(kernel)

特征转换

思考一下,我们可以对非线性可分的数据进行分类么?也就是我们如果不能用一条直线或者一个平面对数据进行分类,我们要做的就是特征转换(feature transformation)。

举个例子,我们对于二维的向量 (x1,x2)(x_1,x_2),要把它转换为一个三维的向量,类似于我们通过方程 ϕ:R2R3\phi: \mathbb R^2 \rarr \mathbb R^3 实现多项式的转换。

ϕ(x1,x2)=(x12,2x1x2,x22)\phi(x_1,x_2) = (x_1^2, \sqrt{2}x_1x_2, x_2^2)

但是我们怎么确定要去选哪种转换方法呢?

这极大程度上取决于我们的数据集。选对正确的转换方法是成功之匙,但是并没有一个很明确的规定可以帮助我们确定选哪种转换方法,建议阅读一下scikit-learn的资料来加深对数据预处理的理解。

什么是核函数?

刚才我们提到了如何处理非线性可分的数据集,但是一大缺点就是我们必须对数据集中所有的点都进行转换,如果数据量太大的话,这个过程将会十分复杂,核函数应运而生!

在前一部分讨论支持向量机的对偶问题时,我们在 Wolfe 对偶拉格朗日方程中得到了满足 KKT 条件的拉格朗日乘子,其中我们是不需要计算每个训练样本的具体值的,我们实际只需要计算一对训练样本的点积 xixjx_i \cdot x_j

W(α)=i=1mαi12i=1mj=1mαiαjyiyjxixjW(\alpha) = \sum_{i=1}^{m}\alpha_i-\frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m}\alpha_i\alpha_jy_iy_jx_i \cdot x_j

那么是否有一种办法在不对向量进行转化就能求出这个值呢?

核函数就是来干这个的!实际上,核函数就是可以返回另一个更高维的空间里的点积的函数。

Kernel Trick

那么我们可以定义一个核函数为 K(xi,xj)=xixjK(x_i,x_j) = x_i \cdot x_j,所以我们可以重新写出软间隔对偶问题如下:

maxα i=1mαi12i=1mj=1mαiαjyiyjxiK(xi,xj)\max_\alpha \ \sum_{i=1}^{m}\alpha_i-\frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m}\alpha_i\alpha_jy_iy_jx_i K(x_i,x_j)

subject to0αiC, for any i=1,,msubject \ to \quad 0 \leq \alpha_i \leq C, \ for \ any \ i = 1, \cdots , m

i=1mαiyi=0\sum_{i=1}^{m}\alpha_iy_i=0

核函数的种类

那么我们应该选用什么核函数最好呢?很抱歉这个也是没有固定方法的,一般来说,我们会先尝试高斯核函数(RBF),核函数作为一种表示两个向量间相似程度大小的方法,我们也可以自定义核函数来实现。

延伸:SMO算法

我们已经知道如何解决SVM最优化问题了,然而实际当中我们会用一个更好的方法来更快地解决这个问题:SMO算法。大多数机器学习的包都会用到SMO算法或其变式。

SMO算法解决下面的问题

minα 12i=1mj=1mαiαjyiyjxiK(xi,xj)i=1mαi\min_\alpha \ \frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m}\alpha_i\alpha_jy_iy_jx_i K(x_i,x_j) - \sum_{i=1}^{m}\alpha_i

subject to0αiC, for any i=1,,msubject \ to \quad 0 \leq \alpha_i \leq C, \ for \ any \ i = 1, \cdots , m

i=1mαiyi=0\sum_{i=1}^{m}\alpha_iy_i=0

注意我们把之前的最大化改成最小化,并加了一个负号。这个就是之前我们的核函数化后的软间隔公式。下面是用 Python 实现的代码

def kernel(x1, x2): 
	return np.dot(x1, x2.T) 
def objective_function_to_minimize(X, y, a, kernel): 
	m, n = np.shape(X) 
	return 1 / 2 * np.sum([a[i] * a[j] * y[i] * y[j]* kernel(X[i, :], X[j, :]) 
	for j in range(m) 
	for i in range(m)])\ 
	- np.sum([a[i] for i in range(m)])

在我们处理非常大的数据集时,在利用凸优化包时常常会包含大量的矩阵运算,从而随着矩阵规模变大花费太多时间甚至超出存储范围。

SMO算法的核心思想

当我们求解SVM对偶问题时,我们可以随便改变拉格朗日乘子 α\alpha 的值只要我们满足限制条件。但是每次都更新 α=(α1,α2,,αm)\alpha = (\alpha_1, \alpha_2, \cdots, \alpha_m) 里的每一个又太慢了。

那么SMO算法的核心就是:给定一个 α=(α1,α2,,αm)\alpha = (\alpha_1, \alpha_2, \cdots, \alpha_m),我们只允许改变其中的两个 α\alpha,一直调试直到损失函数返回其最小值,然后我们再挑其他两个 α\alpha 并重复此步骤。最终,我们就会求得原问题的损失函数的最小值。

SMO的一大优势在于求解两个拉格朗日乘子是可以求其分析解的。因此,尽管SMO 执行了更多的子优化问题,每一个子问题都会更快的被解决。

补充内容:

强烈建议阅读前三个!

实际应用和代码展示

SVM相关面经和其他资料

小结

我们在本节中深度探讨了其原理、核心思想、数学推导、延伸算法以及代码实现。支持向量机(SVM)作为一个在特征空间里寻找最大间隔的线性分类器,由于分类结果仅跟支持向量有关,无需依赖全部数据,并在特征维度大于样本数时依然有很好的效果,通过使用核函数来灵活解决各种非线性的分类回归问题。