支持向量机的本质
支持向量机 Support Vector Machine
简称 SVM
,是一种最大化间隔的分类算法。最大化间隔的意思说白了就是,找到最大的间隔。(我就觉得奇怪,SVM 是一种算法,也就是一套方法,但 “SVM” 这名字取得好像它是一种装置一样…)
支持向量机解决的是分类问题。(SVM 是否可用于解决其他类型的问题,比如回归?)
支持向量机的思想
分类问题可分为线性可分问题和非线性可分问题。首先讨论线性可分问题。
线性可分问题也就是(在二维情况下)可以通过一条直线将数据集中的样本点分为两类的问题。这里的直线,我们称之为线性模型。
对于二维空间来说,线性模型就是直线;对于三维空间来说,是平面;对于三维以上的空间来说,是超平面。线性模型的数学式为 。
如下图,就是一个线性可分的分类问题:
对于上图这个数据集,我们可以找到无数条直线来将圈和叉分开。支持向量机所要做的,就是找到一条直线,即下图黑线,这条直线与其他可将圈叉分开的直线相比,所对应的 margin 间隔
最大:
将黑线向上向下平移。向上平移直到接触到离黑线最近的圈;向下平移,直到接触到最近的叉。这里离黑线最近的圈和叉就称为支持向量 support vector
。由此我们可以得到两条蓝线,蓝线与黑线之间的距离就是间隔。
那么 SVM 是如何找到对应最大间隔的那条直线的呢?
我们需要想办法将间隔用数学式子表示出来。向量 到超平面的距离公式为
那么对于某个向量 有,,由于 和 的值在模型的训练开始前会被随机给出,所以 的值其实是确定的,假设这个值是 ,那么我们可以通过缩放,将 变为 。也就是说,经过缩放, 转化为了 ,则可以得到 。
我们的目标是找到最大的间隔,也就是使 的值最大化,等价于使得 的值最小化。为了方便后面的计算,我们将使 最小化,变为使 最小化。
对于 ,之所以要加个平方,是为了将向量 w 的模中的根号去掉,方便运算。之所以前面要乘个 为了方便求导( 求导后为 ,乘 可以将 约掉。)