相关文章

  1. K近邻算法和KD树详细介绍及其原理详解
  2. 朴素贝叶斯算法和拉普拉斯平滑详细介绍及其原理详解
  3. 决策树算法和CART决策树算法详细介绍及其原理详解
  4. 线性回归算法和逻辑斯谛回归算法详细介绍及其原理详解
  5. 硬间隔支持向量机算法、软间隔支持向量机算法、非线性支持向量机算法详细介绍及其原理详解
  6. 高斯分布、高斯混合模型、EM算法详细介绍及其原理详解



文章目录



前言

  今天给大家带来的主要内容包括:硬间隔支持向量机算法,软间隔支持向量机算法,非线性支持向量机算法。废话不多说,下面就是本文的全部内容了!




一、硬间隔支持向量机算法

  如果现在有一些数据分布在一条数轴上,我们可以尝试找到一个点来把两类样本分开:

图1:使用一个点将数轴上的待分类样本分类

如果这些数据分布在一个平面上,我们可以尝试找到一条直线来把两类样本分开:

图2:使用一条直线将二维平面上的待分类样本分类

  如果这些数据分布在三维空间中,我们也可以找到一个平面来把两类样本分开:

图3:使用一个平面将三维空间上的待分类样本分类

  根据以上的分析,我们可以得到结论:当待分类样本所处的维度等于




n



n


n
的时候,我们可以找到一个




n





1



n-1


n1
维的超平面对待分类样本进行分类。


  现在我们只考虑二维的情况,如果我们想把两类样本分开,可以画出两条直线(超平面),都可以对样本进行有效的分类:

图4:两条直线都可以对二维平面上的待分类样本分类

  既然两条直线都可以对样本进行分类,那么究竟哪条直线是最好的呢?

图5:哪条直线对于二维平面分类问题效果更好?

  今天我们聊的支持向量机,就可以解决以上问题,帮助我们找到最好的分类超平面。更具体地说,对于以上例子,支持向量机就是要找到这样一条直线,让直线两边的点与此条直线的距离是最大的:

图6:找到一条距离直线两边的点距离最大的直线

  对于以上示例,我们假设平面上任意一点




x



x


x
的横坐标是





x


1




x^{1}


x1
,纵坐标是





x


2




x^{2}


x2
,此点




x



x


x
的类别为1或者-1:





x


=


(



x


1



,



x


2



)




y


=


1




y


=





1



x=(x^{1},x^{2}) \quad\quad y = 1 \quad\quad y = -1


x=(x1,x2)y=1y=1

  此时,超平面的方程为:






w


1




x


1



+



w


2




x


2



+


b


=


0



w


=


(



w


1



,



w


2



)



w^{1}x^{1}+w^{2}x^{2}+b=0 \quad w=(w^{1},w^{2})


w1x1+w2x2+b=0w=(w1,w2)

  因为之前我们分析过,需要保证直线两边的点到此超平面的距离最大,所以我们需要计算点




x



x


x
到超平面的距离




d



d


d






d


=








w


1




x


1



+



w


2




x


2



+


b








(



w


1




)


2



+


(



w


2




)


2







d=\frac{|w^{1}x^{1}+w^{2}x^{2}+b|}{\sqrt{(w^{1})^{2} + (w^{2})^{2}}}


d=(w1)2+(w2)2


w1x1+w2x2+b

  我们来观察上式中的分子,如果分子的绝对值里面是正数,说明类别为1;如果分子的绝对值里面是负数,说明类别为-1。所以我们可以把绝对值拿开,用




y



y


y
来代替:





d


=




y


(



w


1




x


1



+



w


2




x


2



+


b


)





(



w


1




)


2



+


(



w


2




)


2







d=\frac{y(w^{1}x^{1}+w^{2}x^{2}+b)}{\sqrt{(w^{1})^{2} + (w^{2})^{2}}}


d=(w1)2+(w2)2


y(w1x1+w2x2+b)

  上式中的分子




y


(



w


1




x


1



+



w


2




x


2



+


b


)



y(w^{1}x^{1}+w^{2}x^{2}+b)


y(w1x1+w2x2+b)
被称为函数间隔;而上式中的分母






(



w


1




)


2



+


(



w


2




)


2






\sqrt{(w^{1})^{2} + (w^{2})^{2}}


(w1)2+(w2)2


,是参数





w


i



(


1





i





2


)



w^{i}(1≤i≤2)


wi(1i2)
的范数










w









||w||


∣∣w∣∣
。我们可以使用




γ



\gamma


γ
来代表函数间隔,使用参数





w


i



(


1





i





2


)



w^{i}(1≤i≤2)


wi(1i2)
的范数










w









||w||


∣∣w∣∣
来表示上式中的分母,所以点到直线的距离




d



d


d
就可以更新为:





d


=



γ









w











d=\frac{\gamma}{||w||}


d=∣∣w∣∣γ

  还记得我们一开始的目的么?我们想要找到距离所有点间隔都是最大的直线,为了达成目的,首先我们要找到距离直线间隔最小的那些点:

图7:距离直线间隔最小的点

  可以使用





d


^




\widehat{d}


d


来表示距离直线间隔最小的那些点:






d


^



=




m


i


n


(



γ


1



,



γ


2



,





,



γ


N



)










w











\widehat{d}=\frac{min( \gamma_{1},\gamma_{2},\dots,\gamma_{N} )}{||w||}


d


=
∣∣w∣∣min(γ1,γ2,,γN)

  当我们找到与直线距离最小的那些点之后,让最终的直线距离它们最大就可以了。还需要注意,因为函数间隔是最小的,所以对于任何一个样本,函数间隔都要大于等于这个最小的函数间隔,所以可以得到:





m


a


x




γ


^










w












γ


^



=


m


i


n


(



γ


1



,



γ


2



,





,



γ


N



)



s


.


t


.




y


i



(



w


1




x


i


1



+



w


2




x


i


2



+


b


)






γ


^






0



max\frac{\widehat{\gamma}}{||w||} \quad \widehat{\gamma}=min( \gamma_{1},\gamma_{2},\dots,\gamma_{N} ) \ s.t. \quad y_{i}(w^{1}x^{1}_{i}+w^{2}x^{2}_{i}+b) - \widehat{\gamma} \ge 0


max∣∣w∣∣γ


γ


=
min(γ1,γ2,,γN)s.t.yi(w1xi1+w2xi2+b)γ


0

  另外,我们需要注意到函数间隔的性质。如果我们把





w


1




x


1



+



w


2




x


2



+


b


=


0



w^{1}x^{1}+w^{2}x^{2}+b=0


w1x1+w2x2+b=0
中的





w


1



,



w


2



,


b



w^{1},w^{2},b


w1,w2,b
同时乘以2:





2



w


1




x


1



+


2



w


2




x


2



+


2


b


=


0



2w^{1}x^{1}+2w^{2}x^{2}+2b=0


2w1x1+2w2x2+2b=0

  那么这两个函数仍然代表的是同一个超平面,但是函数间隔却变成了2倍:





y


(


2



w


1




x


1



+


2



w


2




x


2



+


2


b


)


=


2


γ



y(2w^{1}x^{1}+2w^{2}x^{2}+2b)=2\gamma


y(2w1x1+2w2x2+2b)=2γ

  所以函数间隔的性质就是:函数间隔是可以任意缩放的。我们在计算的时候一般取1这个值。这样将函数间隔





γ


^




\widehat{\gamma}


γ


的值取1后代入原式中就可以得到:





m


a


x



1









w











s


.


t


.




y


i



(



w


1




x


i


1



+



w


2




x


i


2



+


b


)





1





0



max\frac{1}{||w||} \quad s.t. \quad y_{i}(w^{1}x^{1}_{i}+w^{2}x^{2}_{i}+b) - 1 \ge 0


max∣∣w∣∣1s.t.yi(w1xi1+w2xi2+b)10


  此外,我们还需要注意两点:


  • 这条直线和最近点的间隔就是





    1









    w











    \frac{1}{||w||}


    ∣∣w∣∣1
    ,也就是我们要优化的目标:

图8:优化目标
  • 优化计算时之和这些最近的点相关,这些样本又被称为支持向量:

图9:支持向量

  下面我们的目标就很明确了,我们需要计算下面的优化问题:



m


a



x



w


,


b





1









w











s


.


t


.




y


i



(



w


1




x


i


1



+



w


2




x


i


2



+


b


)





1





0



max_{w,b}\frac{1}{||w||} \quad s.t. \quad y_{i}(w^{1}x^{1}_{i}+w^{2}x^{2}_{i}+b) - 1 \ge 0


maxw,b∣∣w∣∣1s.t.yi(w1xi1+w2xi2+b)10

  有一个细节我们需要注意,就是




m


a



x



w


,


b





1









w











max_{w,b}\frac{1}{||w||}


maxw,b∣∣w∣∣1
等价于




m


i



n



w


,


b





1


2









w









2




min_{w,b}\frac{1}{2}||w||^{2}


minw,b21∣∣w2
,所以原始的优化问题就可以更新为:





m


i



n



w


,


b





1


2









w









2




s


.


t


.




y


i



(



w


1




x


i


1



+



w


2




x


i


2



+


b


)





1





0



min_{w,b}\frac{1}{2}||w||^{2} \quad s.t. \quad y_{i}(w^{1}x^{1}_{i}+w^{2}x^{2}_{i}+b) - 1 \ge 0


minw,b21∣∣w2s.t.yi(w1xi1+w2xi2+b)10

  根据拉格朗日乘子法,我们可以构建它的对偶问题:










min






α










1


2







i


N







j


N




α


i




α


j




y


i




y


j




(



x


i







x


j



)










i


N




α


i










 s.t. 












i


N




α


i




y


i



=


0




α


i






0










αmin s.t. 21iNjNαiαjyiyj(xixj)iNαiiNαiyi=0αi0


  上式的计算过程不在此赘述,总之,可以通过对偶问题得到一系列的




α



\alpha


α
值,而




w



w


w





b



b


b
的解析解可以使用这些




α



\alpha


α
值计算出来:










w






=






i


N




α


i







y


i




x


i












b






=



y


j










i


N




α


i







y


i




(



x


i







x


j



)











w=iNαiyixib=yjiNαiyi(xixj)

  通过上面的计算,我们就可以得到直线的表达形式了,另外需要注意的是,以上讨论的内容都是基于线性可分的数据,所以此方法也被称为硬间隔支持向量机算法。


二、软间隔支持向量机算法

  刚才我们讨论的是可以被线性可分的例子,现在我们来看这样一个不能被线性可分的例子:

图10:无法被线性可分的例子

  可以注意到,因为两个红框内的点的存在,我们不可能找到一条直线,把两类数据完全分开:




图11:红框内的点导致此二维平面上的待分类点无法被线性可分

  虽然由于红框内的两个点导致无法用一条直线正确的将所有点分开,但是大多数的点仍然可以,此时我们称这些样本是弱线性可分的,这个时候我们仍然可以通过支持向量机找到一个次优解,不过需要允许有错误的点处于这个间隔之内:


图12:允许有错误的点处于一个合理的间隔内的次优解

  也就是说,对于任何一个样本,其函数间隔不再大于等于1,而是放宽了距离限制,下式中的


ξ



\xi


ξ
就是一个松弛变量:






y


i



(



w


1




x


i


1



+



w


2




x


i


2



+


b


)





1






ξ


i




y_{i}(w^{1}x^{1}_{i}+w^{2}x^{2}_{i}+b) ≥ 1 - \xi_{i}


yi(w1xi1+w2xi2+b)1ξi

  同样的,在优化过程中,我们也增加了一个惩罚项




C






i


N




ξ


i




C\sum_{i}^{N} \xi_{i}


CiNξi











min







w


,


b











1


2









w









2



+


C






i


N




ξ


i




C





0









 s.t. 









y


i



(



w


1




x


i


1



+



w


2




x


i


2



+


b


)





1






ξ


i





ξ


i






0










w,bmin s.t. 21∣∣w2+CiNξiC0yi(w1xi1+w2xi2+b)1ξiξi0

  同样,为了得到满足要求的直线方程,我们仍可根据拉格朗日乘子法,构建它的对偶问题:










min






α










1


2







i


N







j


N




α


i




α


j




y


i




y


j




(



x


i







x


j



)










i


N




α


i










 s.t. 












i


N




α


i




y


i



=


0



C






α


i






0










αmin s.t. 21iNjNαiαjyiyj(xixj)iNαiiNαiyi=0Cαi0

  经过计算,我们仍可以得到满足要求的




w



w


w





b



b


b
的解析解:










w






=






i


N




α


i







y


i




x


i












b






=



y


j










i


N




α


i







y


i




(



x


i







x


j



)











w=iNαiyixib=yjiNαiyi(xixj)

  可以看到,此种方法与硬间隔支持向量机算法的结论基本一致,最终仍可以得到满足要求的直线方程,这种拓展方法也被称为软间隔支持向量机算法。


三、非线性支持向量机算法

  我们再来看一个例子,在下图的直线上,无论我们使用什么方法,都不可能将两类数据完全分开:

图13:无法将此条直线上的两类数据分开

  不过我们可以换一个思路,将数据增加一个维度,使用




(



x


1




)


2




(x^{1})^{2}


(x1)2
来构建第二个维度,这样我们又可以只用一条直线就把它们分开了:

图14:将直线上的数据升维后使用直线将两类数据分开

  我们再来考虑另外一种情况,如果待分类的点是类似于椭圆的方式分布的:

图15:以类似于椭圆的形状分布在二维平面上的两类数据

  基于上面讨论过的思路,我们可以使用




(



x


1




)


2




(x^{1})^{2}


(x1)2





(



x


2




)


2




(x^{2})^{2}


(x2)2
作为数轴,把所有的数据点重新映射到平面上,这样它们又转化为线性可分的问题了:

图16:将平面上的数据升维后使用直线将两类数据分开

  这种通过升维或者空间映射的方法,我们称为非线性支持向量机算法。我们继续探讨,让我们继续看刚才待分类的点是类似于椭圆形分布的情况:

图17:以类似于椭圆的形状分布在二维平面上的两类数据

  其中任何一个样本点由





x


1




x^{1}


x1






x


2




x^{2}


x2
两个坐标构成:





x


=


(



x


1



,



x


2



)



x=(x^{1},x^{2})


x=(x1,x2)

  为了让它们变得线性可分,我们通过一个




ϕ



\phi


ϕ
函数把





x


1




x^{1}


x1
映射为




(



x


1




)


2




(x^{1})^2


(x1)2






x


2




x^{2}


x2
映射为




(



x


2




)


2




(x^2)^{2}


(x2)2






x





ϕ


(


x


)


=


(


(



x


1




)


2



,


(



x


2




)


2



)



x \sim \phi(x) = ((x^1)^{2},(x^2)^2)


xϕ(x)=((x1)2,(x2)2)

  这样我们可以定义另一个函数




K



\boldsymbol{K}


K
,这个函数




K



\boldsymbol{K}


K
代表着变换之后两个样本点积的结果:





K


(



x


1



,



x


2



)


=


ϕ


(



x


1



)


ϕ


(



x


2



)



\boldsymbol{K}(\boldsymbol{x}_{\boldsymbol{1}} , \boldsymbol{x}_{\boldsymbol{2}})=\phi(x_{1})\phi(x_{2})


K(x1,x2)=ϕ(x1)ϕ(x2)

  这个定义两个样本点积过程的函数




K



\boldsymbol{K}


K
,又被称为核函数。我们仍可以根据拉格朗日乘子法构建其对偶问题:










min






α










1


2







i


N







j


N




α


i




α


j




y


i




y


j



K



(



x


i







x


j



)










i


N




α


i










 s.t. 












i


N




α


i




y


i



=


0



C






α


i






0










αmin s.t. 21iNjNαiαjyiyjK(xixj)iNαiiNαiyi=0Cαi0

  最后,仍可计算出满足要求的




w



w


w





b



b


b
的解析解:










w






x


=






i


N




α


i







y


i



K


(


x


,



x


i



)











b






=



y


j










i


N




α


i







y


i



K


(



x


i







x


j



)










wx=iNαiyiK(x,xi)b=yjiNαiyiK(xixj)

  通过上面的计算我们可以看到,非线性支持向量机算法与软间隔支持向量机算法的计算过程非常相似,只是使用了核函数




K



\boldsymbol{K}


K
来代替原本样本的点积操作而已。




总结

  以上就是本文的全部内容了,这个系列还会继续更新,给大家带来更多的关于机器学习方面的算法和知识,下篇博客见!