【机器学习】推导支持向量机SVM二分类

时间:2022-08-02 13:51:14

  现实生活中,平面有两个坐标,平面空间可以表示为 Φ(x,y)=[ab][xy] ;三维空间表示为 Φ(x,y)=[abc]xyz 。我们需要处理的信息包含多个特征,即包含更多的维度,我们可以建立抽象的超空间来放置这些信息。其中超平面定义为 wTx+b=0 x 是信息的特征向量。
  SVM中文叫支持向量机。设想超空间中有两个可分离的集合,我们可以用无限个超平面来分离这两个集合,但其中支持平面是唯一,即支持平面刚好在两个集合之间的中心。SVM便是找到这个支持平面的算法。
为了方便计算,我们将两个可分离集合中距离最近的两个元素向量定义为支持向量,将分类元素的判别值 g(x)=wTx+b 分别归一化为1和-1。解析几何中,三维点到三维平面的距离的公式为 r=Ax+By+Cz+DA2+B2+C2 ,推广到超平面就是 r=g(x)||w|| 。为了最大可能地分离两个集合,我们计算得到此时支持向量的距离为 sum(r0)=1/||w||(1)/||w||=2/||w|| ,因此有 r1/||w||argmin(||w||) 。我们要在当前限制条件下,尽量缩小w的模值。
  从上述结论中,我们得到一个最优化问题。对于支持向量有 argminΦ(w)=1/2wTw,subject to dig(xi)=1 ,非支持向量有 argminΦ(w)=1/2wTw,subject to dig(xi)>1 。因此有 argminΦ(w)=1/2wTw,subject to dig(xi)1 ,其中 di 是判别结果,取值为1和-1。
  但是实际情况中,两个待区分的集合,边界可能是模糊的,总有几个偏离点,因此要引入松弛变量来弹性控制分类力度。上述式子写成 argminΦ(w)=12wTw+Cξi,subject to dig(xi)(1ξi)0ξi0 接下来使用拉格朗日乘数法进行对偶问题转换,引入非负辅助变量 α,β 。为了取得最小值,我们求取导数来找到极值: J=12wTw+Cξiαi[dig(xi)(1ξi)]βiξi,αi0,βi0Jw=wαidixi=0w=αidixiJb=αidi=0Jξi=Cαiβi=0C=αi+βi,αiC 代回J函数中有 J=12ijαiαjdidjxTixj+i(αi+βi)ξiijαiαjdidjxTixjbiαidi+iαii(αi+βi)ξi=iαi12ijαiαjdidjxTixjsubject to αidi=0,0αiC 这里看到, ξ β 被消去了,只剩下 α,d,x ,跟不考虑松弛变量情况下的对偶问题是差不多的,区别只在于 α 的取值范围。我可以调整 α 的取值范围,来控制SVM的松弛程度。
  引入核方法也比较简单,令 k(x) 为核函数,有 g(k(xi))=wTk(xi)+b ,那么 Jw=wiαidik(xi)=0J=iαi12ijαiαjdidjk(xi)Tk(xj)=iαi12ijαiαjdidjK(xi,xj)subject to αidi=0,0αiC 一般使用的核函数有
- 多项式核 (xixj+1)p
- 径向基核 e12σ2|xixj|2
- 双曲核 tanh(αxixj+β)
  如何求解上述问题是个麻烦的过程,一般大家都用SMO算法来求解,还得考虑KKT条件之类的复杂的数学过程,这导致普通用户要实现算法,是非常困难且效率低下,一般需要求助于libSVM之类的库。如果要求求解速度快,对精度又有所妥协,可以参考下一篇最小二乘支持向量机(LSSVM)。