在正式手撕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定理证明如下两族函数都是核函数:
实际上,同一份数据,在越高维的空间就越有可能线性可分。因此要想解决数据原本在低维空间线性不可分的分类问题,就需要将其映射到高维,那么问题似乎转换为了去寻找合适的映射 ϕ \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算法进行推导,感谢阅读。
如果觉得文章对你有所帮助,欢迎打赏哦~