线性SVM的推导
线性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:
注意!这里出现了新变量\(\tilde \gamma\),是geometrical margin
;\(\hat \gamma\)则表示functional margin
;\(\gamma\)则表示向量\(\vec x\)和\(\vec x_0\)之间的距离。显然,\(\tilde \gamma\)和\(\hat \gamma\)只相差一个缩放因子\(||\vec w||\),而且他们都是大于0的值。
最大化几何距离\(\tilde \gamma\)
前面引入了超平面、几何距离等概念。显然超平面上的点其所属类别是模糊的,而当超平面上的点离开超平面,离开的越远,其所属分类就越明晰,也有人称为:当点到超平面的margin越大,分类的confidence越大。总之,要让分类效果明显,就应当设法最大化margin。成千上万的数据点,都去计算margin肯定不行,而且显然只需要考虑距离超平面最近的那些点:这些点就是支持向量,支持向量到超平面的margin是所有点中最小的那一撮,设法最大化它们的margin就能完成最终的分类任务了。
那么,该最大化哪个margin呢?\(\tilde \gamma\)还是\(\hat \gamma\)呢?\(\tilde \gamma\)表示的是几何距离,直觉上应该选择它。试着考虑其具体表达式:
对于一个确定的超平面,\(\vec w\)和\(b\)的取值并不唯一,\(||\vec w||\)可大可小,通过缩放\(\vec w\)和\(b\)能保持超平面不变。但\(\frac{\vec w}{||\vec w||}\)和\(\frac{b}{\vec w}\)是唯一的,因而考虑最大化\(\tilde \gamma\)。实际上,不妨取\(||\vec w||=1\),那么等比例缩放\(b\),就能保持等式成立,而且此时\(\hat \gamma\)和\(\tilde \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}\alpha_i(y_i(\vec w^T \vec x_i+b)-1)=\frac{1}{2}||\vec w||2-\sum_{i=1}\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}\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}\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