什么是支持向量
给定一个样本集D,分类算法就是从这个样本集中找到一条线或者一个面来划分开这个样本集。如图:
在这个样本空间中,用于划分的直线可以用于
w
T
x
+
b
=
0
w^Tx+b=0
wTx+b=0 来表示,其中
w
w
w为法向量,决定了超平面的方向,b为偏移量,决定了超平面与原点之间的距离。
超平面的法向量
这里可能有人会有疑问,为什么说 w w w为这个超平面的法向量呢,这里我举个例子:
现在我们在超平面上有两个点分别为 x 1 x_1 x1, x 2 x_2 x2 然后我们将这两个点带入超平面的公式得到:
w T x 1 + b = 0 w^Tx_1+b=0 wTx1+b=0
w T x 2 + b = 0 w^Tx_2+b=0 wTx2+b=0
然后我们把上面两个式子相减得到:
w T ( x 1 − x 2 ) = 0 w^T(x_1-x_2)=0 wT(x1−x2)=0
这告诉我们向量 w w w与超平面上任意两点之间的连线(即向量 x 1 和 x 2 x_1和x_2 x1和x2正交。因此,向量 w w w 正交于超平面上的任意方向,所以它是超平面的法向量。
接着,我们计算空间中的任意一点到这个法向量的距离为:
r
=
∣
w
T
x
+
b
∣
∣
∣
w
∣
∣
r=\frac{|w^Tx+b|}{||w||}
r=∣∣w∣∣∣wTx+b∣
其中
-
∣ w T x + b ∣ |w^Tx+b| ∣wTx+b∣反映了点离超平面的“原始距离”。若一个点在超平面的一侧,其值为正;若在另一侧,则为负。取绝对值后,得到了点到超平面的正距离。
-
∣ ∣ w ∣ ∣ ||w|| ∣∣w∣∣ 是用于归一化的因子。通过除以 ∣ ∣ w ∣ ∣ ||w|| ∣∣w∣∣我们可以消除 w w w长度的影响,使得距离不依赖于 w w w的长度,仅与其方向有关。
原始距离
这里解释一下"原始距离这个概念":
支持向量机的目的是找到一个超平面来将两个不同的类别分开。这个超平面可以由方程 w T x + b = 0 w^Tx+b=0 wTx+b=0来表示。现在考虑一个样本点 x x x,我们可以将其带入到超平面方程中计算 w T x + b = 0 w^Tx+b=0 wTx+b=0
- 若样本点在超平面的一侧,那么 w T x + b = 0 w^Tx+b=0 wTx+b=0的值为正,假设我们考虑的是正类样本(对应的标签是+1),那么超平面方程为正意味着样本位于正确的一侧。
- 若样本点在超平面的另一侧,那么 w T x + b = 0 w^Tx+b=0 wTx+b=0的值将会是负的。假设我们考虑的是负类样本(对应的标签是-1),那么超平面方程为负意味着样本位于正确的一侧。
因此 w T x + b w^Tx+b wTx+b的符号与样本的标签相同的时候,就表示样本被正确分类了。但是,为了量化点到超平面的距离,我们想要一个非负值,所以我们取其绝对值 ∣ w T x + b ∣ |w^Tx+b| ∣wTx+b∣。
那么我们为什么要考虑距离呢?在支持向量机中,我们不仅希望样本被正确分类,还希望样本距离分隔超平面越远越好。这样可以使得分类的决策边界更为“稳健”,对于未知的新样本具有更好的泛化能力。因此 ∣ w T + b ∣ |w^T+b| ∣wT+b∣反映了样本点到超平面的“原始距离”,并且通过取绝对值,我们将其转化为非负值,从而可以用于量化样本点距离超平面的远近。
下面举个计算的例子:
假设我们有一个二维空间,即特征只有两个。我们要找到一个超平面来分隔两个类别,超平面的方程可以表示为:
w T x + b = 0 w^Tx+b=0 wTx+b=0
我们选定权重向量 w = [ 2 , 3 ] w=[2,3] w=[2,3]和偏移量 b = − 4 b=−4 b=−4,那么超平面的方程就是:
2 x 1 + 3 x 2 − 4 = 0 2x_1+3x_2-4=0 2x1+3x2−4=0
现在假设我们有一个样本点 x = [ 1 , 1 ] x=[1,1] x=[1,1],我们想计算这个点到超平面的“原始距离”。首先,我们将样本点带入超平面方程:
2 ∗ 1 + 3 ∗ 1 − 4 = 1 2*1+3*1-4=1 2∗1+3∗1−4=1
这个值为正,表示样本点在超平面的一侧。如果这个点的标签是+1,那么这个正的值表示样本被正确分类。现在,我们说的“原始距离”就是这个值的绝对值,即 ∣ 1 ∣ = 1 |1|=1 ∣1∣=1。
但是要注意的是,这个“原始距离”并不是几何距离。要计算几何距离,还需要除以权重向量的范数,即:
∣ w T x + b ∣ ∣ ∣ w ∣ ∣ = 1 2 2 + 3 2 ≈ 0.20 \frac{|w^Tx+b|}{||w||}=\frac{1}{\sqrt{2^2+3^2}}\approx0.20 ∣∣w∣∣∣wTx+b∣=22+321≈0.20
原始距离主要用于判断样本点是在超平面的哪一侧,以及它离超平面有多远。在训练支持向量机时,这个原始距离可以用来确定支持向量,即离超平面最近的样本点。
支持向量的概念
在书中的6.3式子中,做了一个假设
距离超平面最近的几个训练样本点使得6.3式成立,他们被称为"支持向量",两个异类支持向量到超平面距离之和为:
r
=
2
∣
∣
w
∣
∣
r=\frac{2}{||w||}
r=∣∣w∣∣2
它们被称为间隔:
公式的推导过程:
而我们的目标为是最大化这个距离r,因此公式为:
书上也有说,我们求最大化的
2
∣
∣
w
∣
∣
\frac{2}{||w||}
∣∣w∣∣2的话只需要最小化
∣
∣
w
∣
∣
||w||
∣∣w∣∣,为了方便计算范数,我们可以让:
∣
∣
w
∣
∣
2
||w||^2
∣∣w∣∣2最小化,因为
∣
∣
w
∣
∣
||w||
∣∣w∣∣为正数,所以最小化它的平方和直接最小化它是一样的,然后我们在加一个常数系数
1
2
\frac{1}{2}
21,方便平方求导后约掉,因此,也就有了书上给的
对偶问题
对偶问题是用来解决如何找到
w
2
w^2
w2的最优解的一个问题,正常情况来讲,对于支持向量的分割面函数
w
T
x
i
+
b
w^Tx_i+b
wTxi+b来说,找到这个最优平面,需要找到w和b的最优解,通过传统算法也可以解决,但是书上提供了一种更加高效的方法,那就是采用拉格朗日乘子法来解决这个问题,首先我们对它的每一个约束都引入一个拉格朗日乘子
α
i
α_i
αi,这时候就可以构建我们的拉格朗日函数了:
L
(
w
,
b
,
α
)
=
1
2
∣
∣
w
∣
∣
2
+
∑
i
=
1
m
α
i
(
1
−
y
i
(
w
T
x
+
b
)
)
L(w,b,α)=\frac{1}{2}||w||^2+\sum_{i=1}^mα_i(1-y_i(w^Tx+b))
L(w,b,α)=21∣∣w∣∣2+i=1∑mαi(1−yi(wTx+b))
然后我们分别对
w
w
w和
b
b
b求偏导,并让他们的值为0,就能得到:
∂
L
∂
w
=
w
−
∑
i
=
1
N
α
i
y
i
x
i
=
0
\frac{\partial L}{\partial w} = w-\sum_{i=1}^N α_iy_ix_i=0
∂w∂L=w−i=1∑Nαiyixi=0
和
∂
L
∂
b
=
−
∑
i
=
1
N
α
i
y
i
=
0
\frac{\partial L}{\partial b} = -\sum_{i=1}^Nα_iy_i=0
∂b∂L=−i=1∑Nαiyi=0
化解后就得到书上表达的形式了,即:
w
=
∑
i
=
1
N
α
i
y
i
x
i
w=\sum_{i=1}^N α_iy_ix_i
w=i=1∑Nαiyixi
∑
i
=
1
N
α
i
y
i
=
0
\sum_{i=1}^Nα_iy_i=0
i=1∑Nαiyi=0
然后再将这个化解得到的式子返回去带入拉格朗日函数得到:
max
α
∑
i
=
1
m
α
i
−
1
2
∑
i
=
1
m
∑
j
=
1
m
α
i
α
j
y
i
y
j
x
i
T
x
j
\max_α \sum_{i=1}^mα_i-\frac{1}{2} \sum_{i=1}^m \sum_{j=1}^mα_iα_jy_iy_jx_i^Tx_j
αmaxi=1∑mαi−21i=1∑mj=1∑mαiαjyiyjxiTxj
解出
α
α
α后求出w和b,可得模型:
f
(
x
)
=
w
T
x
+
b
=
∑
i
=
1
m
α
i
y
i
x
i
T
x
+
b
f(x)=w^Tx+b=\sum_{i=1}^mα_iy_ix_i^Tx+b
f(x)=wTx+b=i=1∑mαiyixiTx+b
剩下的只需要通过SMO算法来优化 α α α即可
核函数
在上面的讨论中,我们主要讨论的场景为如何用一个面或者线来划分两种情况,但是如果一个问题出现多种结果,如异或,这时候二维的平面就不足以划分完,这时候就要将这些数据映射到更加高的维度甚至是无限维来进行划分。我们的核函数就是用来做这个的。
首先我们令
ϕ
(
x
)
\phi(x)
ϕ(x)表示x映射到高维后的数据,那么特征空间对应的划分超平面就变为了:
f
(
x
)
=
w
T
ϕ
(
x
)
+
b
f(x)=w^T\phi(x)+b
f(x)=wTϕ(x)+b
其对偶问题可变为:
max
w
,
b
∑
i
=
1
m
α
i
−
1
2
∑
i
=
1
m
∑
j
=
1
m
α
i
α
j
y
i
y
j
ϕ
(
x
i
)
T
ϕ
(
x
j
)
\max_{w,b} \sum_{i=1}^mα_i-\frac{1}{2} \sum_{i=1}^m \sum_{j=1}^mα_iα_jy_iy_j\phi(x_i)^T\phi(x_j)
w,bmaxi=1∑mαi−21i=1∑mj=1∑mαiαjyiyjϕ(xi)Tϕ(xj)
但是由于低维到高维的映射可能会出现大量复杂的计算,甚至可能出现低维映射到无线维,这时候直接计算是很困难的。所以我们通常设想一个这样的函数:
k
(
x
I
,
x
j
)
=
<
ϕ
(
x
i
)
,
ϕ
(
x
j
)
>
=
ϕ
(
x
i
)
T
ϕ
(
x
j
)
k(x_I,x_j)=<\phi(x_i),\phi(x_j)>=\phi(x_i)^T\phi(x_j)
k(xI,xj)=<ϕ(xi),ϕ(xj)>=ϕ(xi)Tϕ(xj)
然后带入对偶问题得:
max
w
,
b
∑
i
=
1
m
α
i
−
1
2
∑
i
=
1
m
∑
j
=
1
m
α
i
α
j
y
i
y
j
k
(
x
I
,
x
j
)
\max_{w,b} \sum_{i=1}^mα_i-\frac{1}{2} \sum_{i=1}^m \sum_{j=1}^mα_iα_jy_iy_jk(x_I,x_j)
w,bmaxi=1∑mαi−21i=1∑mj=1∑mαiαjyiyjk(xI,xj)
求解后可得:
f
(
x
)
=
∑
i
=
1
m
α
i
y
i
k
(
x
I
,
x
j
)
+
b
f(x)=\sum_{i=1}^mα_iy_ik(x_I,x_j)+b
f(x)=i=1∑mαiyik(xI,xj)+b
这里的 k ( x I , x j ) k(x_I,x_j) k(xI,xj)就是指核函数。
常用的核函数有:
此外,核函数和核函数的线性组合还是核函数
软间隔和正则化
软间隔:在训练数据线性不可分的情况下,允许SVM在一定程度上对某些样本进行误分类,以此来找到一个更好的分类超平面,这就是软间隔的概念。
正则化:为了防止模型过拟合,我们通常在SVM的优化目标函数中加入一个正则化项,常见的正则化项有L1和L2。
支持向量回归
SVR是SVM的一个重要扩展,它的目标是预测一个连续的值而不是进行分类。
SVR的基本思想是找到一个函数,使得这个函数对训练样本的预测值与真实值的差别不超过给定的阈值,并且函数自身尽可能平滑。
核方法
核方法是一种广泛的学习算法框架,它可以将线性算法扩展到非线性算法。
在核方法中,我们通过一个非线性映射(由核函数定义)将原始输入空间映射到一个高维特征空间,然后在新的特征空间中应用线性学习算法。
核方法不仅应用于SVM,还应用于很多其他的机器学习算法,如PCA、K-means等。