支持向量机的本质

支持向量机 Support Vector Machine 简称 SVM ,是一种最大化间隔的分类算法。最大化间隔的意思说白了就是,找到最大的间隔。(我就觉得奇怪,SVM 是一种算法,也就是一套方法,但 “SVM” 这名字取得好像它是一种装置一样…)

支持向量机解决的是分类问题。(SVM 是否可用于解决其他类型的问题,比如回归?)

支持向量机的思想

分类问题可分为线性可分问题非线性可分问题。首先讨论线性可分问题。

线性可分问题也就是(在二维情况下)可以通过一条直线将数据集中的样本点分为两类的问题。这里的直线,我们称之为线性模型

对于二维空间来说,线性模型就是直线;对于三维空间来说,是平面;对于三维以上的空间来说,是超平面。线性模型的数学式为 wTx+b=0w^Tx+b=0

如下图,就是一个线性可分的分类问题:
支持向量机的本质

对于上图这个数据集,我们可以找到无数条直线来将圈和叉分开。支持向量机所要做的,就是找到一条直线,即下图黑线,这条直线与其他可将圈叉分开的直线相比,所对应的 margin 间隔最大:
支持向量机的本质
将黑线向上向下平移。向上平移直到接触到离黑线最近的圈;向下平移,直到接触到最近的叉。这里离黑线最近的圈和叉就称为支持向量 support vector。由此我们可以得到两条蓝线,蓝线与黑线之间的距离就是间隔

那么 SVM 是如何找到对应最大间隔的那条直线的呢?

我们需要想办法将间隔用数学式子表示出来。向量 xx 到超平面的距离公式为
d=wTx+bwd=\frac{|w^Tx+b|}{||w||}
那么对于某个向量 x0x_0 有,d=wTx0+bwd=\frac{|w^Tx_0+b|}{||w||},由于 wwbb 的值在模型的训练开始前会被随机给出,所以 wTx0+b|w^Tx_0+b| 的值其实是确定的,假设这个值是 MM,那么我们可以通过缩放,将 MM 变为 11。也就是说,经过缩放,wTx0+b|w^Tx_0+b| 转化为了 11,则可以得到 d=1wd=\frac{1}{||w||}

我们的目标是找到最大的间隔,也就是使 dd 的值最大化,等价于使得 w||w|| 的值最小化。为了方便后面的计算,我们将使 w||w|| 最小化,变为使 12w2\frac{1}{2}||w||^2 最小化。

对于 12w2\frac{1}{2}||w||^2,之所以要加个平方,是为了将向量 w 的模中的根号去掉,方便运算。之所以前面要乘个 12\frac{1}{2} 为了方便求导(w2||w||^2 求导后为 2w2||w||,乘 12\frac{1}{2} 可以将 22 约掉。)