【机器学习】SVM和核函数

上了吴恩达教授在Coursera上的课程之后,在网上找到了他在斯坦福课程的资料CS229 。下面会结合这两个课程的资料,整理一篇笔记。

背景

从之前的逻辑回归的模型中,我们可以看到,如果一个样本越远离决策边界(Decision Boundary),那么我们就越能确保这个样本被正确分类。所以一个比较好的决策边界是尽量能让所有样本到决策边界的距离最大。从下图中可以看到,如果margin越大,我们对样本的正确分类就越有信心。
【机器学习】SVM和核函数
SVM就是一种能帮你得到margin最大的决策边界的算法。

SVM数学推导

在接下来的推导中,定义y(i){1,1}y^{(i)}\in\{-1,1\},而不是y{0,1}y\in\{0,1\}。首先定义函数间隔(functional margin) 为:
γ^(i)=y(i)(wTx(i)+b)\hat{\gamma}^{(i)}=y^{(i)}(w^{T}x^{(i)}+b)

如果y(i)=1y^{(i)}=1,那么我们希望wTx(i)+bw^{T}x^{(i)}+b能是一个很大的正数,相反,如果y(i)=1y^{(i)}=-1,那么wTx(i)+bw^{T}x^{(i)}+b需要是一个很小的负数,这样就能使得样本离决策边界越远,分类效果越好。因此,得到的functional margin γ^\hat{\gamma}越大,分类效果越好。
对于一个样本集S={(x(i),y(i));i=1,...n}S=\{(x^{(i)},y^{(i)});i=1,...n\},定义:
γ^=mini=1,...nγ^(i)\hat{\gamma}=\min_{i=1,...n}\hat{\gamma}^{(i)}

那么接下来讨论 几何间隔(geometric margin)
【机器学习】SVM和核函数
从上图中可以看到,向量ww一定是与超平面垂直的,我们取超平面上的任意两点x1,x2x_1,x_2x1,x2x_1,x_2满足wx1+b=0wx_1+b=0wx2+b=0wx_2+b=0,两式相减得到w(x1x2)=0w(x_1-x_2)=0。因为向量x1x2x_1-x_2肯定在超平面上,所以可以得到向量ww与这个超平面正交。
假设A为样本点,如何求A到超平面的几何间距γ(i)\gamma^{(i)}呢?假设点B是A到超平面的投影,那么向量B可以表示为x(i)γ(i)wwx^{(i)}-\gamma^{(i)}*\frac{w}{||w||}。而且由于B点位于决策边界上,所以:
wT(x(i)γ(i)ww)+b=0w^T(x^{(i)}-\gamma^{(i)}*\frac{w}{||w||})+b=0

得到γ(i)\gamma^{(i)}为:
γ(i)=(ww)Tx(i)+bw\gamma^{(i)}=(\frac{w}{||w||})^Tx^{(i)}+\frac{b}{||w||}

由于我们的样本是有正负之分的,综合正负样本可以得到:
γ(i)=y(i)((ww)Tx(i)+bw)\gamma^{(i)}=y^{(i)}((\frac{w}{||w||})^Tx^{(i)}+\frac{b}{||w||})

同时定义γ=mini=1,...nγ(i)\gamma=\min\limits_{i=1,...n}\gamma^{(i)}
从geometric margin的表达式可以看到,wwbb的缩放对γ\gamma的值没有影响,所以我们可以把要求的最优化问题写成:
maxy,w,bγs.t.  y(i)(wTx(i)+b)γ,i=1,...,nw=1\max_{y,w,b}\gamma\\ s.t.\space \space y^{(i)}(w^{T}x^{(i)}+b)\ge\gamma, i=1,...,n\\ ||w||=1
但这个问题并不是一个直接可解的优化问题。我们首先用functional matrix来代替geometric matrix:
maxy,w,bγ^ws.t.  y(i)(wTx(i)+b)γ^,i=1,...,n\max_{y,w,b}\frac{\hat{\gamma}}{||w||}\\ s.t.\space \space y^{(i)}(w^{T}x^{(i)}+b)\ge\hat{\gamma}, i=1,...,n

为了剔除γ^\hat{\gamma}的影响,我们可以对wwbb进行缩放,使得γ^\hat{\gamma}为1.前面讨论过,对wwbb同时缩放,并不会影响geometric function的大小,也不会影响最终的结果。
因此,上述问题可以简化成:
minw,b 12w2s.t.  y(i)(wTx(i)+b)1,i=1,...,n\min_{w,b}\space \frac{1}{2}||w||^2\\ s.t. \space \space y^{(i)}(w^{T}x^{(i)}+b)\ge1, i=1,...,n

现在我们把这个问题转换成能用已知的优化问题求解的形式了。

正则化

为了解决某些离散点存在使得我们没办法保证functional margin永远都等于1,所以我们为上式加上一个补偿因子ξ\xi.
minw,b 12w2+Ci=1nξis.t.  y(i)(wTx(i)+b)1ξi, i=1,...,nξi0, i=1,...,n\min_{w,b}\space \frac{1}{2}||w||^2+C\sum_{i=1}^n\xi_i\\ s.t. \space \space y^{(i)}(w^{T}x^{(i)}+b)\ge1-\xi_i, \space i=1,...,n\\ \xi_i\ge0, \space i=1,...,n
其中 C是惩罚系数,即对误差的宽容度。C越高,说明越不能容忍出现误差,容易过拟合。C越小,容易欠拟合。

核函数

如果我们想要拟合一种比较复杂的情况,通常需要把样本映射到更高维,但如果样本量比较大的时候,模型就会变得很复杂,所以我们需要寻找一种新的表达方式。
对于给定的样本集(x(1),y1),(x(2),y2),...,(x(m),y(m))(x^{(1)},y^{1}),(x^{(2)},y^{2}),...,(x^{(m)},y^{(m)})
选取 l(1)=x(1),l(2)=x(2),...l(m)=x(m)l^{(1)}=x^{(1)},l^{(2)}=x^{(2)},...l^{(m)}=x^{(m)}
然后计算xxl(i)l^{(i)}之间的相似度,记作f(i)f^{(i)}
f(i)=similarity(x,l(i))f^{(i)}=similarity(x,l^{(i)})

其中f(0)=1f^{(0)}=1.
其中最常用的一种核函数就是高斯核函数。
高斯核函数计算相似度的公式为:
f(i)=similarity(x,l(i))=exp(xl(i)22σ2)f^{(i)}=similarity(x,l^{(i)})=exp(-\frac{||x-l^{(i)}||^2}{2\sigma^2})

原先的模型就变成了 h=g(θTf)h=g(\theta^Tf)
【机器学习】SVM和核函数
如果不用核函数,就是线性核,即h=g(θTx)h=g(\theta^Tx)
在用高斯核之前一定要先进行特征缩放。
【机器学习】SVM和核函数
当n很大,但m很小的时候,不建议用高斯核,因为样本量太少,不太好训练一个复杂的模型。
当n很小,但m很大时,也不建议用高斯核,因为高斯核算法训练地很慢。
只有当n比较小,m适中时,才推荐用高斯核。