线性SVM算法的一般过程
线性SVM的推导
超平面方程
SVM是用来分类的。给定一系列输入数据(n维向量),需要找到一个切分界线(n-1维的超平面),这里假定数据是线性可分的。比如,二维数据的超平面是直线,三维数据的超平面是二维平面。以二维数据为例:
二维平面的直线一般式:(Ax+By+C=0),可以写成向量的形式:
令(vec w=pmatrix {A\B}),(vec x=pmatrix{x\y}),(b=C),则有:
这里的向量都是列向量。懂线性代数学的请无视~
将上述公式中向量的维度推广到n维,就得到n维数据的超平面。直观理解就是两个类别的分界。
functional margin
functional margin直译是:函数间距。听起来抽象~
在前面定义的超平面公式基础上,设(f(vec x)=vec w^T vec x + b),则:
超平面上的点显然是几乎没有的,暂不考虑,剩余的就是两个类别各自的数据点了,分居在超平面两侧。按惯例用(y_i)表示第(i)个类别,这里取:
这里用1和-1而不是0和-1,是为了后续推导方便。(sign(x))是取符号函数。
好了,终于可以定义functional margin了:
用(f(vec x))和它的符号相乘,得到的结果始终是正的:(forall vec x, hat gamma > 0)。
geometrical margin
geometrical margin直译为几何距离,也就是点到超平面的距离,也就是点到直线距离再乘以1或者-1。1和-1分别对应两个分类,也就是分类标签(y)的取值。前面对于(y)值的设定就是为此处考虑的。
如图,(vec x_0)是超平面上一点,(vec x)是任意一个点。这两个点都是n维向量,先试着计算它们的距离(gamma):
这里的问题在于,使用了向量除法,其中(vec e)表示和(vec x - vec x_0)同方向的单位向量,虽然类似定比分点的公式,但是还是不严格。好在只要稍微转换下书写形式,把除法写成乘法,就OK了:
需要指出的是:这里的(vec x)不一定处在(vec w)所指向的一侧,它也许在相反一侧,因而(gamma)可正可负,所以需要定义一个始终是正值的几何距离,即:根据functional margin来定义geometrical margin:
注意!这里出现了新变量( ilde gamma),是geometrical margin
;(hat gamma)则表示functional margin
;(gamma)则表示向量(vec x)和(vec x_0)之间的距离。显然,( ilde gamma)和(hat gamma)只相差一个缩放因子(||vec w||),而且他们都是大于0的值。
最大化几何距离( ilde gamma)
前面引入了超平面、几何距离等概念。显然超平面上的点其所属类别是模糊的,而当超平面上的点离开超平面,离开的越远,其所属分类就越明晰,也有人称为:当点到超平面的margin越大,分类的confidence越大。总之,要让分类效果明显,就应当设法最大化margin。成千上万的数据点,都去计算margin肯定不行,而且显然只需要考虑距离超平面最近的那些点:这些点就是支持向量,支持向量到超平面的margin是所有点中最小的那一撮,设法最大化它们的margin就能完成最终的分类任务了。
那么,该最大化哪个margin呢?( ilde gamma)还是(hat gamma)呢?( ilde gamma)表示的是几何距离,直觉上应该选择它。试着考虑其具体表达式:
对于一个确定的超平面,(vec w)和(b)的取值并不唯一,(||vec w||)可大可小,通过缩放(vec w)和(b)能保持超平面不变。但(frac{vec w}{||vec w||})和(frac{b}{vec w})是唯一的,因而考虑最大化( ilde gamma)。实际上,不妨取(||vec w||=1),那么等比例缩放(b),就能保持等式成立,而且此时(hat gamma)和( ilde gamma)取值相等。
此时,我们对于训练数据集(S={x^{(i)}, y^{(i)};i=1,...,m}),我们重新定义参数((vec w,b))下的geometrical margin
为:
直观理解为:将超平面向1和-1两个类的方向分别移动,最先触碰到的那些点到分界超平面的距离为几何距离(gamma)。而这些最先被触碰到的点,称为支持向量(support vector)。当然,先前处于分界超平面上的点不算。
进一步确定极值条件
当前的目标是:
max_{gamma,vec w,b} frac {hat gamma}{||vec w||}
s.t. y_i(vec w^T vec x_i+b) ge gamma, i=1,...,m
max Margin = 2/||vec w|| (cond1)
y_i(vec w^T vec x_i + b)-1 ge 0 (cond2)
L(vec w,b,alpha_i)=frac{1}{2}||vec w||2-sum_{i=1}{l}alpha_i(y_i(vec w^T vec x_i+b)-1)=frac{1}{2}||vec w||2-sum_{i=1}{l}alpha_i y_i(vec w^T vec x_i+b)+sum_{i=1}^{l}alpha_i
alpha_i ge 0 (4)
min_{vec w,b} max_{alpha_i ge 0} L(vec w,b,alpha_i) (5)
min_{vec w, b} max_{alpha_i ge 0} L(vec w,b,alpha_i)= max_{alpha_i ge 0}L(vec w,b,alpha_i)
max_{alpha_i ge 0} min_{vec w,b}L(vec w, b, alpha_i) (6)
frac{partial L(vec w,b,alpha_i)}{partial vec w}=vec w-sum_{i=1}^{l}alpha_i y_i x_i
frac{partial L(vec w,b,alpha_i)}{partial b}=-sum_{i=1}^{l}alpha_i y_i (7)
vec w=sim_{i=1}^{l}alpha_i y_i x_i
sum_{i=1}^{l}alpha_i y_i=0 (8)
max_{alpha_i ge 0} min_{vec w,b}L(vec w,b,alpha_i)=max_{alpha_i ge 0}=max_{alpha_i ge 0}{sum_{i=1}{l}alpha_i-frac{1}{2}sum_{i=1}{l}sum_{j=1}^{l}alpha_i alpha_j y_i y_j(x_i·x_j)} (10)
max_{alpha_i}{sum_{i=1}{l}alpha_i}-frac{1}{2}sum_{i=1}{l}sum_{j=1}^{l}alpha_i alpha_j y_i y_j(x_i · x_j)
s.t. sum_{alpha_i}^{y_i}=0
alpha_i ge 0
alpha_i(y_i(vec w · x_i + b)-1)=0 (12)
max_{alpha_i ge 0}L(vec w, b, alpha_i) = frac{1}{2}||vec w||^2
min_{alpha_i ge 0}{sum_{i=1}^{l}alpha_i (y_i(vec w · x_i + b)-1)}=0 (13)
vec w=sum_{i=1}^{l}alpha_i y_i x_i