现在,我们有一堆球(这是解释svm经常用到的场景),如下:
从这张图中,我们可以明显地看出蓝色为一类,红色为一类,他们已经通过颜色分好类了,我们将这个分好类的集合称为训练模型。
现在我们往这个集合中扔一个颜色(即分类)未知的球,我们如何根据球着落的位置预测球的颜色呢(我们假定球的位置与球的颜色是有关系的)?
不难看出,训练模型中,蓝色球与红色球是线性可分的,我们可以画几条直线将它们分开
可以看出,使用蓝色直线或者使用橙色直线无疑都可以将训练模型进行准确的分类,然而用它们俩来预测外来球颜色的结果却截然不同,那么我们该使用蓝色还是黄色呢?
a good separation is achieved by the hyperplane that has the largest distance to the nearest training-data point of any class (so-called functional margin), since in general the larger the margin the lower the generalization error of the classifier
svm认为此时应试图将泛化误差(推理结果与真实情况的误差)降到最低,降低出错的可能性,以提高分类直线的推理能力,使分类结果尽可能的反应真实情况。它采取的方法就是找出一条直线,这条直线距离两边离它最近的点的距离最远。
此时,我们可以解释一下什么是支持向量。
既然我们要找到一条距离两边离它最近的点距离最远的直线,那它必定处于两条直线的中间,而这两条直线分别连接了各自分类的某些点。
总有一些点位于连接线上“支撑”了分类线,这些点我们称之为支持向量。
至于svm如何找到这条线,这是数学问题,我这个数学小白就不瞎解释了_!
现在,我们设想一群人站在一起,我们要将这群人分成大人和小孩,我们将他们掌握知识的渊博程度设为x,将他们的食量设为y,然后让他们根据自己的坐标移动,最后发现不能找到一条直线将他们分开。这时候,我们得做一些复杂的操作。
我们再根据每个人的身高设置一个z坐标,然后让他们在空间范围内挪动,这时发现大人和小孩几乎可以使用一个平面完全的分隔开来。这就是svm的升维思想。
有的问题需要很多维度才能解决,此时核函数开始发挥作用,这部分比较复杂,以后作解释。
简而言之:在线性不可分的情况下,支持向量机通过某种事先选择的非线性映射(核函数)将输入变量映射到一个高维特征空间,在这个空间中构造最优分类超平面。我们使用SVM进行数据集分类工作的过程首先是同预先选定的一些非线性映射将输入空间映射到高维特征空间, 使得在高维属性空间中有可能最训练数据实现超平面的分割,避免了在原输入空间中进行非线性曲面分割计算。SVM数据集形成的分类函数具有这样的性质:它是一组以支持向量为参数的非线性函数的线性组合,因此分类函数的表达式仅和支持向量的数量有关,而独立于空间的维度,在处理高维输入空间的分类时,这种方法尤其有效,
总有一些噪音变量,如果噪音变量恰巧被用作支持向量,会影响超平面的推理能力。
可以看出,右上方的蓝色点属于噪音点,它偏离蓝色区域较远,如果不考虑它,我们可以找到一个“推理能力很好”(margin较大)的直线(红色实线),然而考虑它之后,我们得到了黑色虚线,很明显,它的margin较小,泛华误差较大。
我们在训练svm分类器时,要设置参数叫松弛变量,有了这个参数,svm会将跑偏的点也视为支持向量,不过会根据松弛变量将它们拉回一段距离。这样,我们的svm就可以容忍噪音了。