在正式手撕SVM之前,我们先介绍一些基础知识,主要包括函数间隔、几何间隔、核函数、软间隔等。
函数间隔
函数间隔其实就是类别标签乘上了
f
(
x
)
f(x)
f(x)的值,该值永远是大于等于0的,正好符合了距离的概念。可以理解为支持向量所在边界平面与分隔超平面的截距之差,是一个常数。其定义为:
γ
^
=
y
(
w
T
x
+
b
)
=
y
f
(
x
)
\hat\gamma=y(w^Tx+b)=yf(x)
γ^=y(wTx+b)=yf(x)
可以这样去理解,假设
y
=
1
y=1
y=1,
f
(
x
)
=
1
f(x)=1
f(x)=1,其实就是将原来的分类超平面
f
(
x
)
f(x)
f(x)向右平移了1个单位,而
y
=
1
y=1
y=1,
f
(
x
)
=
2
f(x)=2
f(x)=2是将原来的分类超平面
f
(
x
)
f(x)
f(x) 向右平移了2个单位,所以
f
(
x
)
f(x)
f(x)值越大的点到分类超平面的距离当然越远。
但还是存在问题,上述定义的函数间隔虽然可以表示分类预测的正确性和确信度,但在选择分类超平面时,只有函数间隔还远远不够,因为如果成比例的调整
ω
\omega
ω和
b
b
b,如将他们改变为
2
ω
2\omega
2ω和
2
b
2b
2b,虽然此时超平面还是那个超平面,但函数间隔的值
y
f
(
x
)
yf (x)
yf(x)却变成了原来的4倍。所以在实际中,我们定义点到超平面的距离时,采用的是几何间隔。
几何间隔
其函数式定义为:
γ
~
=
y
γ
=
γ
^
∣
∣
ω
∣
∣
\tilde{\gamma}=y\gamma=\frac{\hat\gamma}{||\omega||}
γ~=yγ=∣∣ω∣∣γ^
那么它是如何计算出来的呢?我们看下面的证明:
如上图所示,有一超平面,超平面上的点
x
0
x_0
x0是平面外点
x
x
x的投影,
ω
\omega
ω是垂直于超平面的某一向量,
γ
\gamma
γ为点
x
x
x到超平面的距离,那么有:
x
=
x
0
+
γ
ω
∣
∣
ω
∣
∣
x = x_0+\gamma\frac{\omega}{||\omega||}
x=x0+γ∣∣ω∣∣ω
则有:
f
(
x
)
=
f
(
x
0
+
γ
ω
∣
∣
ω
∣
∣
)
f(x)=f(x_0+\gamma\frac{\omega}{||\omega||})
f(x)=f(x0+γ∣∣ω∣∣ω)
有:
f
(
x
)
=
f
(
x
0
)
+
f
(
γ
ω
∣
∣
ω
∣
∣
)
+
C
f(x)=f(x_0)+f(\gamma\frac{\omega}{||\omega||})+C
f(x)=f(x0)+f(γ∣∣ω∣∣ω)+C
这里注意多加上一个常数,进一步计算:
f
(
x
)
=
0
+
ω
T
γ
ω
∣
∣
ω
∣
∣
+
b
+
C
f(x)=0+\omega^T\gamma\frac{\omega}{||\omega||}+b+C
f(x)=0+ωTγ∣∣ω∣∣ω+b+C
可以找到一个
C
C
C将常数消去。得到:
f
(
x
)
=
γ
∣
∣
ω
∣
∣
2
∣
∣
ω
∣
∣
=
γ
∣
∣
ω
∣
∣
f(x)=\gamma\frac{||\omega||^2}{||\omega||}=\gamma||\omega||
f(x)=γ∣∣ω∣∣∣∣ω∣∣2=γ∣∣ω∣∣
得到:
γ
=
f
(
x
)
∣
∣
ω
∣
∣
\gamma=\frac{f(x)}{||\omega||}
γ=∣∣ω∣∣f(x)
此处的
γ
\gamma
γ是带符号的,乘上类别信息,可将符号消去,得到几何距离,即:
γ
~
=
y
γ
=
y
f
(
x
)
∣
∣
ω
∣
∣
=
γ
^
∣
∣
ω
∣
∣
\tilde{\gamma}=y\gamma=\frac{yf(x)}{||\omega||}=\frac{\hat\gamma}{||\omega||}
γ~=yγ=∣∣ω∣∣yf(x)=∣∣ω∣∣γ^
这里也就提现了几何间隔和函数间隔的关系了。
核函数
在SVM算法中,非常重要的就是核技巧,我们将介绍什么是核函数,以及它在实际的应用中带来的好处。
我们先介绍核函数。设
X
X
X是输入空间(欧式空间
R
n
R^n
Rn的子集或离散集合)中的一个子集,如果存在一个
X
X
X到特征空间
H
H
H的映射,使得对任意的
x
,
y
∈
X
x,y\in X
x,y∈X,
K
(
x
,
y
)
=
(
ϕ
(
x
)
,
ϕ
(
y
)
)
=
ϕ
(
x
)
T
ϕ
(
y
)
K(x,y)=(\phi(x),\phi(y))=\phi(x)^T\phi(y)
K(x,y)=(ϕ(x),ϕ(y))=ϕ(x)Tϕ(y)都成立,那么
K
(
x
,
y
)
K(x,y)
K(x,y)就是核函数。
那么那些函数
K
K
K满足上述关系呢?Mercer定理证明如下两族函数都是核函数:
- 多项式核
K ( x i , y i ) = ( x i y i + 1 ) p K(x_i,y_i)=(x_iy_i+1)^p K(xi,yi)=(xiyi+1)p - 径向基函数(BRF)核
K ( x i , y i ) = e − γ ∣ ∣ x i − y i ∣ ∣ 2 K(x_i,y_i)=e^{-\gamma||x_i-y_i||^2} K(xi,yi)=e−γ∣∣xi−yi∣∣2
实际上,同一份数据,在越高维的空间就越有可能线性可分。因此要想解决数据原本在低维空间线性不可分的分类问题,就需要将其映射到高维,那么问题似乎转换为了去寻找合适的映射
ϕ
\phi
ϕ,但实际上先不论这种映射有很多种,单是找到这种映射的难度就远超解决问题本身。其次高维空间计算量巨大,容易造成维度灾难,而同样的,利用核函数在低维空间计算得到同样的结果计算量会更小。我们来举一个经典的例子:
假设
A
=
(
1
,
2
)
T
A=(1,2)^T
A=(1,2)T,
B
=
(
3
,
4
)
T
B=(3,4)^T
B=(3,4)T,构造一个映射:
ϕ
(
.
)
=
(
x
1
2
,
2
x
1
x
2
,
x
2
2
)
T
\phi(.)=(x_1^2,\sqrt{2}x_1x_2,x_2^2)^T
ϕ(.)=(x12,2x1x2,x22)T,进行计算分析。
高维空间计算
ϕ
(
A
)
=
(
1
,
2
2
,
4
)
\phi(A)=(1,2\sqrt{2},4)
ϕ(A)=(1,22,4),
ϕ
(
B
)
=
(
9
,
12
2
,
16
)
T
\phi(B)=(9,12\sqrt{2},16)^T
ϕ(B)=(9,122,16)T,其中
ϕ
(
A
)
\phi(A)
ϕ(A)和
ϕ
(
B
)
\phi(B)
ϕ(B)分别都进行了4次乘法运算。我们进一步计算
ϕ
(
A
)
T
ϕ
(
B
)
\phi(A)^T\phi(B)
ϕ(A)Tϕ(B):
ϕ
(
A
)
T
ϕ
(
B
)
=
1
×
9
+
2
2
×
12
2
+
4
×
16
=
9
+
48
+
64
=
121
\phi(A)^T\phi(B)=1\times9+2\sqrt{2}\times12\sqrt{2}+4\times16=9+48+64=121
ϕ(A)Tϕ(B)=1×9+22×122+4×16=9+48+64=121
计算
ϕ
(
A
)
T
ϕ
(
B
)
\phi(A)^T\phi(B)
ϕ(A)Tϕ(B)时进行了3次乘法和2次加法,所以整个计算流程总共进行了11次乘法和2次加法。
原空间计算
通过核函数的定义,得到核函数
k
(
x
,
y
)
=
(
x
T
y
)
2
k(x,y)=(x^Ty)^2
k(x,y)=(xTy)2,那么:
k
(
A
,
B
)
=
(
A
T
B
)
2
=
(
1
×
3
+
2
×
4
)
2
=
121
k(A,B)=(A^TB)^2=(1\times3+2\times4)^2=121
k(A,B)=(ATB)2=(1×3+2×4)2=121
整个一共进行了3次乘法和1次加法。
这还仅仅是二维空间映射到三维空间的计算量分析,如果是更高维空间,那么对于计算来说,无疑是灾难性的。
下一节我们对SVM算法进行推导,感谢阅读。
如果觉得文章对你有所帮助,欢迎打赏哦~