5.1 支持向量机
5.1.1 支持向量机的基本原理
通过前面的学习我们知道,逻辑回归其实就是在平面上通过画直线进行二分类,其学习过程就是通过梯度下降法在训练数据中寻找分类线。当训练数据线性可分时,能够正确进行分类的分类线有无数条,不同的分类线对应于不同的 w 和 w_0 及不同的 Loss,如图5-1所示。
图5-1
在图5-1中,直线 L_1 和 L_2 都可以把训练数据完美地分成两类,但哪条更好呢?Loss 最小的直线一定是最好的吗?我们可以从几何的角度审视这个问题。直线 L_2 与一些数据点的距离相对较近,如果测试集中的数据点发生轻微的移动(特征轻微变化),那么测试数据将跑到直线的另一侧,如图5-2所示。
图5-2
这种直线虽然能够在训练样本中实现正确分类,但在实际应用中面对大量没有见过而与训练样本有偏差的数据时,其准确性就会打折扣(其实这就是过拟合)。相对来说,数据点离直线 L_1 较远,即使发生了轻微的移动,也不会跑到直线的另一侧(导致分类结果改变),因此,直线 L_1 的泛化能力相对较强。
综上所述,在这两条直线中 L_1 更好,因为它离边界数据点更远。
在数据线性可分的情况下,我们把以上分析细化一下。数据点可以分为两种类型,即边界点和内部点。边界点是指一个类别中距离分类线最近的点,每个类别可以有不止一个边界点。除了边界点,其他的数据点都是内部点,如图5-3所示。
图5-3
因为内部点远离直线,所以,它们即使发生了轻微移动,也不会来到直线的另一侧。但是,因为边界点靠近分类线,所以它们的随机移动很容易跨越直线,被分类器判断为另一类别。因此,分类器在边界点附近的稳定性差,即泛化能力弱。
如何提高分类线的稳定性呢?可以增大边界点到分类线的距离——距离越远,边界点随机移动至直线另一侧的概率就越小。
为了方便,我们以输入数据为2维的情况为例进行分析,所有结论均可推广至高维空间。首先看一下点到分类线的距离公式。因为分类线有无数条平行线,所以,可以把分类线放在两个类别的边界点的中间位置,即
distance_N类=distance_P类
已知分类线的方程为 w_1 x_1+w_2 x_2+w_0=0,那么P类的边界点 〖[x_1,x_2]〗^T 到直线的距离为
distance_P类=distance_N类=|w_1 x_1+w_2 x_2+w_0 |/√(w_1^2+w_2^2 )
在讲解逻辑回归时提到过,对同一条直线,可以在系数上进行放缩,即
w_1 x_1+w_2 x_2+w_0=0
α_P类 (w_1 x_1+w_2 x_2+w_0 )=0,〖 α〗_P类≠0
以上两个方程对应的是同一条直线。对直线进行系数缩放不会改变直线本身,因此,点到直线的距离也不会改变。因为我们总能找到一个合适的缩放方法,使得边界点满足 |w_1 x_1+w_2 x_2+w_0 |=1,所以,P类的边界点到分类线的距离变为
distance_P类=|w_1 x_1+w_2 x_2+w_0 |/√(w_1^2+w_2^2 )=1/√(w_1^2+w_2^2 )
P类的内部点满足 w_1 x_1+w_2 x_2+w_0>1。
同理,N类的边界点到分类线的距离为
distance_N类=1/√(w_1^2+w_2^2 )
N类的内部点满足 w_1 x_1+w_2 x_2+w_0<-1。
我们的优化目标是在保证分类正确的前提下使边界点远离分类线,从而提高泛化能力,即找到一个合适的 w 使下式的值最大。
〖distance=distance〗_P类+distance_N类=2/√(w_1^2+w_2^2 )
distance 也称作margin,是指两类边界点中间的空白部分。
现在,我们的优化目标变为最大化下式。
distance=1/√(w_1^2+w_2^2 )
也就是说,最优目标为:在保证正确分类的情况下,最小化 min√(w_1^2+w_2^2 )。
可以发现,min√(w_1^2+w_2^2 ) 和 min〖(w_1^2+w_2^2)〗 是等价的。为了求解方便,最小化目标变为
min〖〖(w〗_1^2+w_2^2)〗
那么,如何通过数学方法表示“保证分类正确”呢?不同于逻辑回归的两个类别(标签为1或0),在这里可以分别设P类和N类所对应的标签 y 为 +1 和 -1。此时,y 已不具备概率意义,仅代表一个类别(如图5-3所示)。
P类:当标签为 y=+1 时,w_1 x_1+w_2 x_2+w_0 ≥ 1。
N类:当标签为 y=-1 时,w_1 x_1+w_2 x_2+w_0 ≤ -1。
以上两式可以统一写成
y(w_1 x_1+w_2 x_2+w_0 )≥1
当 x 为边界点时,“=”成立;当 x 为内部点时,取“>”。y(w_1 x_1+w_2 x_2+w_0 )≥1 作为约束条件,保证了分类的正确性。
但是,在实际应用中,大部分情形都是线性不可分的,即肯定不能正确地进行分类(无法保证下式成立)。
y(w_1 x_1+w_2 x_2+w_0 )≥1
不满足上式的数据点称为误差点。因此,可以进一步将数据点分成三类,即内部点、边界点、误差点。误差点有两种:一种是正确误差点,它的分类正确,但位于边界点外(分类正确,但到分类线的距离小于1);另一种是错误误差点,它不仅位于边界点外,而且分类错误。
对P类来说,误差点如图5-4所示。
图5-4
需要注意的是,正确误差点比边界点更靠近分类线。
为了使误差点满足上式,我们放宽(松弛)条件,引入松弛系数 ε ≥ 0。此时,约束条件变为
y(w_1 x_1+w_2 x_2+w_0 )≥1-ε
这样,不等式就相对没有那么严格了。数据点在不同约束条件下的情况如下。
内部点:y(w_1 x_1+w_2 x_2+w_0 )>1,即 ε=0。
边界点:y(w_1 x_1+w_2 x_2+w_0 )=1,即 ε=0。
正确误差点:y(w_1 x_1+w_2 x_2+w_0 )=1-ε,且 1>ε>0。
错误误差点:y(w_1 x_1+w_2 x_2+w_0 )=1-ε,且 ε ≥ 1。
也就是说
ε={█(0, 如果 y(w_1 x_1+w_2 x_2+w_0 )≥1@1-y(w_1 x_1+w_2 x_2+w_0 ),如果 y(w_1 x_1+w_2 x_2+w_0 )<1)┤
可以看出,ε 越小,分类效果就越好。因此,最小化 ε 也成为优化目标之一。
综上所述,考虑所有训练样本,我们的优化目标是
〖min(〗〖w_1^2+w_2^2 〗+C∑_(i=1)^N▒〖ε_((i)))〗
C 为超参数,表示我们对“分类正确”的重视程度。
对于 i=1,⋯,N,x_((i))=〖[x_((i),1),x_((i),2)]〗^T 满足
y_((i)) (w_1 x_((i),1)+w_2 x_((i),2)+w_0 )≥1-ε_((i))
N 是训练样本的数量。
在求解分类线 w=〖[w_1,w_2]〗^T 和 w_0 时,一般不使用梯度下降法,而使用成熟的拉格朗日乘子法。其中的数学计算较为复杂,感兴趣的读者可自行查阅相关资料。
由于我们的优化目标始终围绕最大化边界点和分类线之间的距离,所以,可以不加推导地得到“分类线仅由边界点决定”这一结果(具体推导过程过于复杂,在此不再详述),如图5-5所示。
图5-5
由于内部点和误差点不会影响分类线(w 和 w_0),所以,我们可以不加推导地得到 w,公式如下。
SV 为P类和N类的边界点的集合。可以看出,w 是所有边界点通过 α_((i)) y_((i)) 加权求和得到的。将任意边界点代入分类线,都可以求出 w_0。例如,当边界点 x_((i))=〖[x_((i),1),x_((i),2)]〗^T 对应于类别 y_((i))=1 时,有
y_((i)) (w_1 x_((i),1)+w_2 x_((i),2)+w_0 )=1
w_0=1-w_1 x_((i),1)+w_2 x_((i),2)
在诸多边界点中,任意选择一个代入即可。
<