当C趋近于很大时,要使得整体很小的话,那么意味着松弛因子ξ就会很小,那就意味着分类严格不能有错误。当C趋近于很小时,要使得整体很小的话,那就意味着松弛因子ξ可以稍微大一些,那就意味着可以有更大的错误容忍。C是我们实际在编程中需要指定的一个参数!下面是多了一个松弛因子ξ下的拉格朗日乘子法,基本上和上面差不多的。
八、核变换
将低维不可分问题(一般就是非线性支持向量机问题)映射为空间中的高维可分问题,这就是核变换。上面我们提到了这个函数Φ(X) ,那这个函数的意思就是代表一种核变换的方法。如下图在二维平面下分类很困难,但是如果将数据映射到3为空间,那这样就很好划分了。
还是先从一个小例子来阐述问题。假设我们有俩个数据,x=(x1,x2,x3),y=(y1,y2,y2),此时在3D空间已经不能对其进行线性划分了,那么我们通过一个函数Φ(X)将数据映射到更高维的空间,比如9维的话,那么f(x)=(x1x1,x1x2,x1x3,x2x1,x2x2,x2x3,x3x1,x3x2,x3x3),由于需要计算内积,所以在新的数据在9维空间,需要计算<f(x),f(y)>的内积,需要花费时间O(n2)。
在具体点,令x=(1,2,3),y=(4,5,6),那么f(x)=(1,2,3,2,4,6,3,6,9),f(y)=(16,20,24,20,25,36,24,30,36),此时<f(x),f(y)>=16+40+72+40+100+180+72+180+324=1024。似乎还能计算,但是如果将维数扩大到一个非常大数时候,计算起来可就不是一丁点问题了。
但是发现,K(x,y)=(<x,y>)2,K(x,y)=(4+40+18)2=322=1024。俩者相等,K(x,y)=(<x,y>)2=<f(x),f(y)>,但是K(x,y)计算起来却比<f(x),f(y)>简单的多,也就是说只要用K(x,y)来计算,效果和<f(x),f(y)>一样的,但是计算效率却大幅度提高了,如:K(x,y)的计算时间是O(n),而<f(x),f(y)>的计算时间是O(n2)。所以使用核函数的好处就是,可以在一个低维空间去完成高纬度(或者无限维度)样本内积的计算(意思就是实际上并没有把数据映射到高维空间去,只是一个假设),比如K(x,y)=(4+10+18)2的3D空间对比<f(x),f(y)>=16+40+72+40+100+180+72+180+324的9D空间。
下面了解一下高斯核函数对非线性数据(对于线性数据的话有线性核函数)的分类问题,如图所示:
九、总结
这次学习了支持向量机算法,其实对于所有的机器学习算法来讲,首先要了解它的物理含义,也就是它要解决的问题是什么,然后根据这个问题进行一步步的学习,最后得出最终的结论。就支持向量机而言,我们首先学习了点到平面的距离的计算,然后根据距离引出了如何算出这个距离最大的这样的一个表达式,然后就有了拉格朗日乘子法以及KKT性质,然后通过一个例子具体的算出来了决策边界的方程。在这其中,还引出了为什么会有支持向量机(α等于0与不等0的区别)这么个叫法,然后还有软间隔和松弛因子ξ的问题,最后还了解了使用核函数Φ(X)变换来解决低维不可分的问题。