支持向量机
优点:泛化错误率低,计算开销不大,结果易解释。缺点:对参数调节和核函数的选择敏感,原始分类器不加修改仅适用于处理二类问题。适用数据类型:数值型和标称型数据。
在介绍SVM这个主题之前,先解释几个概念。考虑图6-1中A-D共4个方框中的数据点分布,一个问题就是,能否画出一条直线将圆形点和方形点分开呢?先考虑图6-2方框A中的两组数据,它们之间已经分隔得足够开,因此很容易就可以在图中画出一条直线将两组数据点分开。在这种情况下,这组数据被称为线性可分(linearly separable)数据。读者先不必担心上述假设是否过于完美,稍后当直线不能将数据点分开时,我们会对上述假设做一些修改。
图6-1 4个线性不可分的数据集
上述将数据集分隔开来的直线称为分隔超平面(separating hyperplane)。在上面给出的例子中,由于数据点都在二维平面上,所以此时分隔超平面就只是一条直线。但是,如果所给的数据集是三维的,那么此时用来分隔数据的就是一个平面。显而易见,更高维的情况可以依此类推。如果数据集是1024维的,那么就需要一个1023维的某某对象来对数据进行分隔。这个1023维的某某对象到底应该叫什么?N-1维呢?该对象被称之为超平面(hyperplane),也就是分类的决策边界。分布在超平面一侧的所有数据都属于某个类别,而分布在另一侧的所有数据则属于另一个类别。
我们希望能采用这种方式来构建分类器,即如果数据点离决策边界越远,那么其最后的预测结果也就越可信。考虑图6-2框B到框D中的三条直线,它们都能将数据分隔开,但是其中哪一条最好呢?是否应该最小化数据点到分隔超平面的平均距离来求最佳直线?如果是那样,图6-2的B和C框中的直线是否真的就比D框中的直线好呢?如果这样做,是不是有点寻找最佳拟合直线的感觉?是的,上述做法确实有点像直线拟合,但这并非最佳方案。我们希望找到离分隔超平面最近的点,确保它们离分隔面的距离尽可能远。这里点到分隔面的距离被称为间隔1(margin)。我们希望间隔尽可能地大,这是因为如果我们犯错或者在有限数据上训练分类器的话,我们希望分类器尽可能健壮。
本书中有两个间隔的概念:一个是点到分隔面的距离,称为点相对于分隔面的间隔;另一个是数据集中所有点到分隔面的最小间隔的2倍,称为分类器或数据集的间隔。一般论文书籍中所提到的“间隔”多指后者。SVM分类器是要找最大的数据集间隔。书中没有特意区分上述两个概念,请根据上下文理解。——译者注
支持向量(support vector)就是离分隔超平面最近的那些点。接下来要试着最大化支持向量到分隔面的距离,需要找到此问题的优化求解方法。
图6-2 A框中给出了一个线性可分的数据集,B、C、D框中各自给出了一条可以将两类数据分开的直线