支持向量机(support vector machines, SVM)是一种二分类模型。它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机;支持向量机还包括核技巧,这使它成为实质上的非线性分类器。支持向量机的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题,支持向量机的学习算法是求解凸二次规划的最优化算法。
支持向量机学习方法包含构建由简至繁的模型:
核方法是比支持向量机更为一般的机器学习方法。
感知机的模型就是尝试找到一条直线,能够把二元数据隔离开。放到三维空间或者更高维的空间,感知机的模型就是尝试找到一个超平面,能够把所有的二元类别隔离开。对于这个分离的超平面,定义为 w T x + b = 0 w^Tx+b=0 wTx+b=0,如下图。在超平面 w T x + b = 0 w^Tx+b=0 wTx+b=0上方的我们定义为y=1,在超平面 w T x + b = 0 w^Tx+b=0 wTx+b=0下方的我们定义为y=−1。可以看出满足这个条件的超平面并不止一个。如何判断哪个超平面的分类效果更好。
接着我们看感知机模型的损失函数优化,它的思想是让所有误分类的点(定义为M)到超平面的距离和最小,即最小化下式:
∑ x i ∈ M − y i ( w T x i + b ) ∣ ∣ w ∣ ∣ 2 ∑_{x_i∈M}\frac{−y_i(w^Tx_i+b)}{||w||_2} xi∈M∑∣∣w∣∣2−yi(wTxi+b)
当w和b成比例的增加,比如,当分子的w和b扩大N倍时,分母的L2范数也会扩大N倍。在感知机模型中,我们采用的是保留分子,固定分母 ∣ ∣ w ∣ ∣ 2 = 1 ||w||_2=1 ∣∣w∣∣2=1,即最终感知机模型的损失函数为:
∑ x i ∈ M − y i ( w T x i + b ) ∑_{x_i∈M}{−y_i(w^Tx_i+b)} xi∈M∑−yi(wTxi+b)
如果我们不是固定分母,改为固定分子,作为分类模型有没有改进呢?
这些问题在SVM会详细解释。
函数间隔是没有统一量度,没有规范化,并不能正常反应点到超平面的距离,在感知机模型里,当分子成比例的增长时,分母也是成倍增长。为了统一度量,需要对法向量w加上约束条件,这样就得到了几何间隔 γ γ γ,定义为:
γ = y ( w T x + b ) ∣ ∣ w ∣ ∣ 2 = γ ′ ∣ ∣ w ∣ ∣ 2 γ=\frac{y(w^Tx+b)}{||w||_2}=\frac{γ′}{||w||_2} γ=∣∣w∣∣2y(wTx+b)=∣∣w∣∣2γ′
几何间隔才是点到超平面的真正距离,感知机模型里用到的距离就是几何距离。
在感知机模型中,可以找到多个可以分类的超平面将数据分开,并且优化时希望所有的点都离超平面远。但是实际上离超平面很远的点已经被正确分类,让它离超平面更远并没有意义。反最关心是那些离超平面很近的点,这些点很容易被误分类。如果可以让离超平面比较近的点尽可能的远离超平面,那分类效果会好有一些。SVM的思想起源正起于此。
如下图所示,分离超平面为 w T x + b = 0 w^Tx+b=0 wTx+b=0,如果所有的样本不光可以被超平面分开,还和超平面保持一定的函数距离(下图函数距离为1),那么这样的分类超平面是比感知机的分类超平面优的。可以证明,这样的超平面只有一个。和超平面平行的保持一定的函数距离的这两个超平面对应的向量,我们定义为支持向量,如下图虚线所示。
SVM的模型是让所有点到超平面的距离大于一定的距离,也就是所有的分类点要在各自类别的支持向量两边。用数学式子表示为:
max 2 ∣ ∣ w ∣ ∣ s . t y i ( w T x i + b ) ≥ 1 ( i = 1 , 2 , . . . m ) \max \frac{2}{||w||} \qquad s.t\quad y_i(w^Tx_i+b) ≥ 1(i=1,2,...m) max∣∣w∣∣2s.tyi(wTxi+b)≥1(i=1,2,...m)
由于 2 ∣ ∣ w ∣ ∣ \frac{2}{||w||} ∣∣w∣∣2的最大化等同于 ∣ ∣ w ∣ ∣ 2 2 \frac{||w||^2}{2} 2∣∣w∣∣2的最小化。这样SVM的优化函数等价于:
min ∣ ∣ w ∣ ∣ 2 2 s . t y i ( w T x i + b ) ≥ 1 ( i = 1 , 2 , . . . m ) \min \frac{||w||^2}{2} \qquad s.t\quad y_i(w^Tx_i+b) ≥ 1(i=1,2,...m) min2∣∣w∣∣2s.tyi(wTxi+b)≥1(i=1,2,...m)
由于目标函数 ∣ ∣ w ∣ ∣ 2 2 \frac{||w||^2}{2} 2∣∣w∣∣2是凸函数,同时约束条件不等式是仿射的,根据凸优化理论,可以通过拉格朗日函数将我们的优化目标转化为无约束的优化函数,这和最大熵模型原理小结中讲到了目标函数的优化方法一样。具体的,优化函数转化为:
L ( w , b , α ) = ∣ ∣ w ∣ ∣ 2 2 + ∑ i = 1 m ( 1 − α i [ y i ( w T x i + b ) ] ) 满 足    α i ≥ 0 L(w,b,α)=\frac{||w||^2}{2} +∑_{i=1}^m(1-α_i[y_i(w^Tx_i+b)])\quad满足\;α_i≥0 L(w,b,α)=2∣∣w∣∣2+i=1∑m(1−αi[yi(wTxi+b)])满足αi≥0
可以先求优化函数对于w和b的极小值。接着再求拉格朗日乘子 α α α 的极大值。
首先来求 L ( w , b , α ) L(w,b,α) L(w,b,α)基于w 和 b 的极小值,即 m i n w , b L ( w , b , α ) min_{w,b}L(w,b,α) minw,bL(w,b,α)。这个极值我们可以通过对w和b分别求偏导数得到:
∂ L ∂ w = 0 ⇒ w = ∑ i = 1 m α i y i x i \frac{∂L}{∂w}=0⇒w=∑_{i=1}^mα_iy_ix_i ∂w∂L=0⇒w=i=1∑mαiyixi
∂ L ∂ b = 0 ⇒ ∑ i = 1 m α i y i = 0 \frac{∂L}{∂b}=0⇒∑_{i=1}^mα_iy_i=0 ∂b∂L=0⇒i=1∑mαiyi=0
现在我们来看将w替换为 α α α的表达式以后的优化函数 ψ ( α ) ψ(α) ψ(α)的表达式:
这里我们对线性可分SVM的算法过程做一个总结。
输入是线性可分的m个样本 ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) , (x_1,y_1),(x_2,y_2),...,(x_m,y_m), (x1,y1),(x2,y2),...,(xm,ym),,其中x为n维特征向量。y为二元输出,值为1,或者-1。
输出是分离超平面的参数 w ∗ w^∗ w∗和 b ∗ b^∗ b∗和分类决策函数。
算法过程如下:
1)构造约束优化问题
m i n α 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j ( x i ∙ x j ) − ∑ i = 1 m α i min_α\frac{1}{2}∑_{i=1}^m∑_{j=1}^mα_iα_jy_iy_j(x_i∙x_j)−∑_{i=1}^mα_i minα21i=1∑mj=1∑mαiαjyiyj(xi∙xj)−i=1∑mαi
s . t . ∑ i = 1 m α i y i = 0 s.t.∑_{i=1}^mα_iy_i=0 s.t.i=1∑mαiyi=0
α i ≥ 0 i = 1 , 2 , . . . m α_i≥0\qquad i=1,2,...m αi≥0i=1,2,...m
2)用SMO算法求出上式最小时对应的α向量的值 α ∗ α^∗ α∗向量.
3 ) 计算 w ∗ = ∑ i = 1 m α i ∗ y i x i w^∗=∑_{i=1}^mα^∗_iy_ix_i w∗=∑i=1mαi∗yixi
4 ) 找出所有的S个支持向量,即满足 α s > 0 α_s>0 αs>0对应的样本 ( x s , y s ) (x_s,y_s) (xs,ys),
通过 y s ( ∑ i = 1 m α i y i x i T x s + b ) = 1 y_s(∑_{i=1}^mα_iy_ix^T_ix_s+b)=1 ys(∑i=1mαiyixiTxs+b)=1,
计算出每个支持向量 ( x s , y s ) (x_s,y_s) (xs,ys)对应的 b s ∗ b^∗_s bs∗,
计算出这些 b s ∗ = y s − ∑ i = 1 s α i y i x i T x s b^∗_s=y_s−∑_{i=1}^sα_iy_ix^T_ix_s bs∗=ys−∑i=1sαiyixiTxs.
所有的b∗s对应的平均值即为最终的 b ∗ = 1 S ∑ s = 1 S b s ∗ b^∗=\frac{1}{S}∑_{s=1}^Sb^∗_s b∗=S1∑s=1Sbs∗
这样最终的分类超平面为: w ∗ ∙ x + b ∗ = 0 w^∗∙x+b^∗=0 w∗∙x+b∗=0,
最终的分类决策函数为: f ( x ) = s i g n ( w ∗ ∙ x + b ∗ ) f(x)=sign(w^∗∙x+b^∗) f(x)=sign(w∗∙x+b∗)
线性可分SVM的学习方法对于非线性的数据集是没有办法使用的, 有时候不能线性可分的原因是线性数据集里面多了少量的异常点,由于这些异常点导致了数据集不能线性可分, 那么怎么可以处理这些异常点使数据集依然可以用线性可分的思想呢? 我们在下一节的线性SVM的软间隔最大化里继续讲。
现实任务中往往很难确定合适的核函数使得训练样本在特征空间中线性可分;退一步讲,即便恰好找到某个核函数使得训练样本在特征空间中线性可分,也很难断定这个貌似线性可分的结果不是由于过拟合所造成的。缓解该问题的一个方法是允许支持向量机在一些样本上出错。为此引入“软间隔”概念。
所谓的软间隔,是相对于硬间隔说的,我们可以认为上一篇线性分类SVM的学习方法属于硬间隔最大化。
回顾下硬间隔最大化的条件:
min ∣ ∣ w ∣ ∣ 2 2 s . t y i ( w T x i + b ) ≥ 1 ( i = 1 , 2 , . . . m ) \min \frac{||w||^2}{2} \qquad s.t\quad y_i(w^Tx_i+b) ≥ 1(i=1,2,...m) min2∣∣w∣∣2s.tyi(wTxi+b)≥1(i=1,2,...m)
L ( w , b , α ) = ∣ ∣ w ∣ ∣ 2 2 + ∑ i = 1 m ( 1 − α i [ y i ( w T x i + b ) ] ) 满 足    α i ≥ 0 L(w,b,α)=\frac{||w||^2}{2} +∑_{i=1}^m(1-α_i[y_i(w^Tx_i+b)])\quad满足\;α_i≥0 L(w,b,α)=2∣∣w∣∣2+i=1∑m(1−αi[yi(wTxi+b)])满足αi≥0
接着我们再看如何可以软间隔最大化呢?
SVM对训练集里面的每个样本 ( x i , y i ) (x_i,y_i) (xi,yi)引入了一个松弛变量 ξ i ≥ 0 ξ_i≥0 ξi≥0,使函数间隔加上松弛变量大于等于1,也就是说:
y i ( w T ∙ x i + b ) ≥ 1 − ξ i y_i(w^T∙x_i+b)≥1−ξ_i yi(wT∙xi+b)≥1−ξi
对比硬间隔最大化,可以看到我们对样本到超平面的函数距离的要求放松了,之前是一定要大于等于1,现在只需要加上一个大于等于0的松弛变量能大于等于1就可以了。当然,松弛变量不能白加,这是有成本的,每一个松弛变量 ξ i ξ_i ξi, 对应了一个代价 ξ i ξ_i ξi,这个就得到了我们的软间隔最大化的SVM学习条件如下:
m i n 1 2 ∣ ∣ w ∣ ∣ 2 2 + C ∑ i = 1 m ξ i min\frac{1}{2}||w||_2^2+C∑_{i=1}^mξ_i min21∣∣w∣∣22+Ci=1∑mξi
s . t . y i ( w T x i + b ) ≥ 1 − ξ i ( i = 1 , 2 , . . . m ) s.t.\quad y_i(w^Tx_i+b)≥1−ξ_i(i=1,2,...m) s.t.yi(wTxi+b)≥1−ξi(i=1,2,...m)
ξ i ≥ 0 ( i = 1 , 2 , . . . m ) ξ_i≥0(i=1,2,...m) ξi≥0(i=1,2,...m)
这里,C>0为惩罚参数,可以理解为我们一般回归和分类问题正则化时候的参数。C越大,对误分类的惩罚越大,C越小,对误分类的惩罚越小。
也就是说,我们希望 1 2 ∣ ∣ w ∣ ∣ 2 2 \frac{1}{2}||w||_2^2 21∣∣w∣∣22尽量小,误分类的点尽可能的少。C是协调两者关系的正则化惩罚系数。在实际应用中,需要调参来选择。
在硬间隔最大化时,支持向量比较简单,就是满足 y i ( w T x i + b ) − 1 = 0 y_i(w^Tx_i+b)−1=0 yi(wTxi+b)−1=0就可以了。根据KKT条件中的对偶互补条件 α i ∗ ( y i ( w T x i + b ) − 1 ) = 0 α^∗_i(y_i(w^Tx_i+b)−1)=0 αi∗(yi(wTxi+b)−1)=0,如果 α i ∗ > 0 α^∗_i>0 αi∗>0则有 y i ( w T x i + b ) = 1 y_i(w^Tx_i+b)=1 yi(wTxi+b)=1即点在支持向量上,否则如果 α i ∗ = 0 α^∗_i=0 αi∗=0则有 y i ( w T x i + b ) ≥ 1 y_i(w^Tx_i+b)≥1 yi(wTxi+b)≥1,即样本在支持向量上或者已经被正确分类。
在软间隔最大化时,则稍微复杂一些,因为我们对每个样本 ( x i , y i ) (x_i,y_i) (xi,yi)引入了松弛变量 ξ i ξ_i ξi。我们从下图来研究软间隔最大化时支持向量的情况,第i个点到对应类别支持向量的距离为 ξ i ∣ ∣ w ∣ ∣ 2 ξ_i||w||_2 ξi∣∣w∣∣2。根据软间隔最大化时KKT条件中的对偶互补条件 α i ∗ ( y i ( w T x i + b ) − 1 + ξ i ∗ ) = 0 α^∗_i(y_i(w^Tx_i+b)−1+ξ^∗_i)=0 αi∗(yi(wTxi+b)−1+ξi∗)=0我们有:
a) 如果α=0,那么 y i ( w T x i + b ) − 1 ≥ 0 y_i(w^Tx_i+b)−1≥0 yi(wTxi+b)−1≥0,即样本在间隔边界上或者已经被正确分类。如图中所有远离间隔边界的点。
b) 如果0<α
c) 如果α=C,说明这是一个可能比较异常的点,需要检查此时ξi
i)如果 0 ≤ ξ i ≤ 1 0≤ξ_i≤1 0≤ξi≤1,那么点被正确分类,但是却在超平面和自己类别的间隔边界之间。如图中的样本2和4.
ii)如果 ξ i = 1 ξ_i=1 ξi=1,那么点在分离超平面上,无法被正确分类。
iii)如果 ξ i > 1 ξ_i>1 ξi>1,那么点在超平面的另一侧,也就是说,这个点不能被正常分类。如图中的样本1和3.
公式参考: [https://blog.csdn.net/weixin_41725746/article/details/90483885#3_457]
[https://blog.csdn.net/icefire_tyh/article/details/52065224]
参考文献:
[1] [统计学习-李航]
[2] [机器学习西瓜书-周志华]
[3] [https://www.cnblogs.com/pinard/p/6103615.html]