简介:
清明过后,也快一周的时间了,毕设还在计划中进行。昨天晚上和一个考研到西安交通大学的朋友聊天,也互相交流了一下看法,因为他是做蚁群算法的,所以说也都算是算法类的毕设。能够感觉到他对自己的要求也很高,也都是自己独立推导数学公式,优化算法,哈哈,以后又多了一个能够交流的小伙伴。然后也跟哈深的基友交换了看法,都是感觉自己能够看懂别人的算法,但是自己独立实现还是有困难,enmmmmm还是自身底蕴不够,努力吧。
这几天一直在看svm 支持向量机的内容,整整推导了三天的公式,9张A4纸,还是挺骄傲的,毕竟自己以前很不务实。
今天只有一个目的,就是讲清楚svm的数学推导以及简化版的smo算法。
支持向量机:
概述:
首先支持向量机是一种监督学习算法,无论训练集还是数据集都是需要标注标签的。那么什么是支持向量?在这之前需要先介绍“分隔超平面”的概念。
分隔超平面:
借用AILearning社区的图片进行说明:
可以看到,在二维的图形中,可以用一条直线将线性可分的数据集分开。那么如果数据集由二维上升到三维呢?是的,可以用一个面,可以是平面,也可以是曲面进行分割。那么当维度上升到n维时,依照规律,则可以使用n-1维度的对象进行分割,那么我们用来分割的对象,便叫做“分割超平面”。
再看一张图:
支持向量:
支持向量实质是数据点,并且是离分割超平面距离最近的数据点,比如上图的苹果。
机:
机也不表示机器,表示的是一种算法。
那么字面意义的支持向量机,就很轻松的讲解完成了。接下来我们讲解支持向量机的数学推导和smo简化版算法。
数学建模及推导:
分割超平面:
西瓜书中直接给出了,分割超平面的线性方程:
W T x + b = 0 W^Tx+b=0 WTx+b=0
我觉得推导过程还是很有必要的,那么我的推导过程如下:
- 首先直线的情况下,方程为:
y = a x + b y=ax+b y=ax+b
- 微调一下:
x 1 = a x 2 + b x_1=ax_2+b x1=ax2+b
- 移项:
a x 2 − x 1 + b = 0 ax_2-x_1+b=0 ax2−x1+b=0
- 向量化:
[ a , − 1 ] ∗ [ x 2 , x 1 ] T + b = 0 [a,-1]*[x_2,x_1]^T+b=0 [a,−1]∗[x2,x1]T+b=0
- 那么令向量
W T = [ a , − 1 ] W^T=[a,-1] WT=[a,−1]
X = [ x 2 , x 1 ] T X=[x_2,x_1]^T X=[x2,x1]T
则最后便可得到公式:
W T x + b = 0 W^Tx+b=0 WTx+b=0
而维度便是由
W
T
W^T
WT的维度来决定。那么由高等数学的知识可知:
向量
W
T
W^T
WT便是分割超平面的法向量,也就决定了分割超平面的方向,那么b也就是分割超平面的截距,也就是位移项。
点到分割超平面的距离:
在高等数学中,我们学习过点到直线的距离:
d = ∣ A x 0 + B y 0 + C A 2 + B 2 ∣ d=|\frac{Ax_0+By_0+C}{\sqrt{A^2+B^2}}| d=∣A2+B2Ax0+By0+C∣
那么将距离公式扩展到多维:
d = ∣ ∣ W T X + B ∣ ∣ ∣ W ∣ ∣ ∣ d=|\frac{|W^TX+B|}{||W||}| d=∣∣∣W∣∣∣WTX+B∣∣
分母即为向量W的模
好了,在理解了点到分割超平面的距离之后,我们来谈一下,对于图6-2来说,什么才是最好的分割方法呢?我们依靠什么来判断分割平面的好与坏呢?
分类器的好坏的评定依据是分类间隔W=2d的大小,即分类间隔W越大,我们认为这个超平面的分类效果越好。此时,求解超平面的问题就变成了求解分类间隔W最大化的问题。W的最大化也就是d最大化的。
而在周志华老师的西瓜书中,我们直接把“间隔”定义为:
两个异类支持向量到超平面的距离之和
问题转换:
请看下图:
可以看到,我们把左侧的五角星支持向量,还有右侧的圆球支持向量到分割超平面的距离为d,也就是支持向量对应:
∣ W T x + b ∣ = 1 |W^Tx+b|=1 ∣WTx+b∣=1
那么:
γ = 2 ∣ ∣ W ∣ ∣ \gamma=\frac{2}{||W||} γ=∣∣W∣∣2
即为图中2d的值。那么现在我们所求的“最大间隔”问题,就被转换成了
γ
\gamma
γ的最大值问题,也就是
1
∣
∣
w
∣
∣
\frac{1}{||w||}
∣∣w∣∣1的最大值问题,也就是
∣
∣
w
∣
∣
2
||w||^2
∣∣w∣∣2的最小值问题:
则可以将问题重新定义为:
满足
m
i
n
(
1
2
∣
∣
w
∣
∣
2
)
min(\frac{1}{2}||w||^2)
min(21∣∣w∣∣2)时,求对应的w,b
注意:可能有些人会问为什么多了个系数,实则很简单,为了求导方便
约束条件:
在以上的论述中,已经顺利获得了目标函数的数学形式,我们重新整理一下。
求解最大间隔 -----(等价于)------
γ
\gamma
γ的最大值----(等价于)
m
i
n
(
1
2
∣
∣
w
∣
∣
2
)
min(\frac{1}{2}||w||^2)
min(21∣∣w∣∣2)
为了求解最大间隔,首先我们要找到支持向量点,那么又怎么在众多数据点中顺利找出支持向量点呢?
为了能够解决以上问题,我们以二维平面为例,对于二维平面上的两类点,我们依次做不同的标记:
如图所示:
做标记如下:
红球:
y
i
=
+
1
y_i=+1
yi=+1
蓝五角星:
y
i
=
−
1
y_i=-1
yi=−1
那么根据图示我们知道,只有支持向量才满足:
∣ W T x + b ∣ = 1 |W^Tx+b|=1 ∣WTx+b∣=1
所以,支持向量以外的点则满足:
∣ W T x + b ∣ > 1 |W^Tx+b|>1 ∣WTx+b∣>1
那么我们进一步细分:
- 如果x属于红球,也就是 y i = + 1 y_i=+1 yi=+1时
W T x + b > 1 W^Tx+b>1 WTx+b>1
- 如果x属于蓝球,也就是 y i = − 1 y_i=-1 yi=−1时
W T x + b < − 1 W^Tx+b<-1 WTx+b<−1
那么综上所述,我能够得到一个关系式,也就是一个约束条件:
y i ∗ ( W T x + b ) > 1 y_i*(W^Tx+b)>1 yi∗(WTx+b)>1 对于任意的 x i x_i xi恒成立。
重写数学关系式:
求什么:
m i n ( 1 2 ∣ ∣ w ∣ ∣ 2 ) min(\frac{1}{2}||w||^2) min(21∣∣w∣∣2)
约束条件是什么:
y i ∗ ( W T x + b ) > 1 y_i*(W^Tx+b)>1 yi∗(WTx+b)>1 对于任意的 x i x_i xi恒成立。
以上便是支持向量机(svm)的基本型
拉格朗日对偶问题:
其实这个板块,在我们考研数学复习中出现过,也就是拉格朗日参数法,然后求极值或或者最值,如果不了解的话,请看一下考研相关数学资料,不过对偶问题我没有深入研究,毕竟我现在主要是应用,这个就按照西瓜书的公式直接运算啦。
- 那么我们使用拉格朗日乘子法,对上述数学关系式添加约束 α i ≥ 0 \alpha_i\geq0 αi≥0,得到对应的拉格朗日函数为:
L ( w , b , α ) = 1 2 ∣ ∣ w ∣ ∣ 2 + ∑ i = 1 n α i ( 1 − y i ( w T x i + b ) ) L(w,b,\alpha)=\frac{1}{2}||w||^2+\sum_{i=1}^{n}\alpha_i(1-y_i(w^Tx_i+b)) L(w,b,α)=21∣∣w∣∣2+∑i=1nαi(1−yi(wTxi+b)) (*)
那么下面依次求L对
w
w
w、
α
\alpha
α偏导数:
求导过程很简单,自己推导就可以了,得到结果:
w = ∑ i = 1 n α i y i x i w=\sum_{i=1}^{n}\alpha_iy_ix_i w=∑i=1nαiyixi
∑ i = 1 n α i y i = 0 \sum_{i=1}^{n}\alpha_iy_i=0 ∑i=1nαiyi=0
好,我们将以上这两个式子代回 L ( w , b , α ) L(w,b,\alpha) L(w,b,α)中可知, w w w、 b b b就能够被消去,得到结果:
L ( w , b , α ) = ∑ i = 0 n α i − 1 2 ∑ i , j = 1 n α i α j y i y j x i T x j L(w,b,\alpha)=\sum_{i=0}^{n}\alpha_i-\frac{1}{2}\sum_{i,j=1}^{n}\alpha_i\alpha_jy_iy_jx_i^Tx_j L(w,b,α)=∑i=0nαi−21∑i,j=1nαiαjyiyjxiTxj
那么这个便是*式的对偶问题数学表达式。于是问题变转化为:
m a x α i : ∑ i = 0 n α i − 1 2 ∑ i , j = 1 n α i α j y i y j x i T x j max_{\alpha_i}: \sum_{i=0}^{n}\alpha_i-\frac{1}{2}\sum_{i,j=1}^{n}\alpha_i\alpha_jy_iy_jx_i^Tx_j maxαi:∑i=0nαi−21∑i,j=1nαiαjyiyjxiTxj
应该满足的条件为:
∑ i = 1 n α i y i = 0 \sum_{i=1}^{n}\alpha_iy_i=0 ∑i=1nαiyi=0
α i ≥ 0 \alpha_i\geq0 αi≥0
那么现在的问题就变成了求解 α \alpha α的值,不过目前这个问题属于二次规划问题,在大数据、大样本下如果使用通法来解决则会造成很大的开销,由此我们使用著名的smo算法求解,那么接下来,我们将讲解smo算法的过程,也就是数学逻辑推导。
smo算法
SMO算法的工作原理是:每次循环中选择两个alpha进行优化处理。一旦找到了一对合适的alpha,那么就增大其中一个同时减小另一个。这里所谓的”合适”就是指两个alpha必须符合以下两个条件,条件之一就是两个alpha必须要在间隔边界之外,而且第二个条件则是这两个alpha还没有进进行过区间化处理或者不在边界上。
算法步骤:
- 计算误差:
E i = f ( x i ) − y i = ∑ i = 1 n a j y j x i T x j + b − y i E_i=f(x_i)-y_i=\sum_{i=1}^{n}a_jy_jx_i^Tx_j+b-y_i Ei=f(xi)−yi=∑i=1najyjxiTxj+b−yi
- 计算上下界:
L = m a x ( 0 , a j o l d − a i o l d ) , H = m i n ( C , C + a j o l d − a i o l d ) L=max(0,a_j^{old}-a_i^{old}),H=min(C,C+a_j^{old}-a_i^old) L=max(0,ajold−aiold),H=min(C,C+ajold−aiold) if y i ! = y j {y_i} !={y_j} yi!=yj
L = m a x ( 0 , a j o l d + a i o l d ) , H = m i n ( C , a j o l d + a i o l d ) L=max(0,a_j^{old}+a_i^{old}),H=min(C,a_j^{old}+a_i^{old}) L=max(0,ajold+aiold),H=min(C,ajold+aiold) if y i = y j {y_i} ={y_j} yi=yj
- 计算 η \eta η
η = x i T x i + x j x j T − 2 x i T x j \eta=x_i^Tx_i+x_jx_j^T-2x_i^Tx_j η=xiTxi+xjxjT−2xiTxj
- 更新 α j \alpha_j αj
α j n e w = α i o l d + y i ( E i − E j ) η \alpha_j^{new}=\alpha_i^{old}+\frac{y_i(E_i-E_j)}{\eta} αjnew=αiold+ηyi(Ei−Ej)
- 修正 α j \alpha_j αj:
α n e w , c l i p p e d = H \alpha^{new,clipped}=H αnew,clipped=H,if α 2 n e w ≥ H \alpha_2^{new}\geq H α2new≥H
α n e w , c l i p p e d = α 2 n e w \alpha^{new,clipped}=\alpha_2^{new} αnew,clipped=α2new ,if L ≤ α 2 n e w ≤ H L\leq\alpha_2^{new}\leq H L≤α2new≤H
α n e w , c l i p p e d = L \alpha^{new,clipped}=L αnew,clipped=L ,if α 2 n e w ≤ L \alpha_2^{new}\leq L α2new≤L
- 更新 α i \alpha_i αi
a i n e w = a i o l d + y i y j ( a j o l d − a j n e w , c l i p p e d ) a_i^{new}=a_i^{old}+y_iy_j(a_j^{old}-a_j^{new,clipped}) ainew=aiold+yiyj(ajold−ajnew,clipped)
- 更新b1和b2:
b 1 n e w = b o l d − E i − y i ( α i n e w − α i o l d ) x i T x i − y j ( α j n e w − α j o l d ) x j T x i b_1^{new} = b^{old} -E_i-y_i(\alpha_i^{new}-\alpha_i^{old})x_i^Tx_i-y_j(\alpha_j^{new}-\alpha_j^{old})x_j^Tx_i b1new=bold−Ei−yi(αinew−αiold)xiTxi−yj(αjnew−αjold)xjTxi
b 2 n e w = b o l d − E i − y i ( α i n e w − α i o l d ) x i T x j − y j ( α j n e w − α j o l d ) x j T x j b_2^{new} = b^{old} -E_i-y_i(\alpha_i^{new}-\alpha_i^{old})x_i^Tx_j-y_j(\alpha_j^{new}-\alpha_j^{old})x_j^Tx_j b2new=bold−Ei−yi(αinew−αiold)xiTxj−yj(αjnew−αjold)xjTxj
- 根据b1、b2更新b:
b = b 1 b=b_1 b=b1 , 0 ≤ α i n e w ≤ C 0\leq\alpha_i^{new} \leq C 0≤αinew≤C
b = b 2 b=b_2 b=b2, 0 ≤ α 2 n e w ≤ C 0\leq\alpha_2^{new}\leq C 0≤α2new≤C
b = b 1 + b 2 2 b=\frac{b_1+b_2}{2} b=2b1+b2 ,others
我在这里重申一下,我只是把推导公式后的smo算法的步骤全部罗列了下来,大家如果对推导感兴趣,有以下方式可以查看到:
- jack_cui机器学习专栏
- 南瓜书——专注于西瓜书的公式推导
- 可以关注我的公众号,回复“smo公式推导”,我会把我的手动推导过程呈献给大家。这里解释一下吧,主要是我推导的公式字迹太乱了,最近也没有太多的时间重新推导,所以只能是以这种方式,等重新手动推导结束,过一段时间上传至优快云、Coder引力(个人微信公众号)二维码如下:
总结&计划:
- svm不是很好理解,一定要沉下心来手动推导公式,才能真正理解smo算法的整体流程
- 支持向量机这一块,我只学习了以上这些内容,例如核函数、核方法、软间隔等问题还没有深入学习,这个就留在研究生阶段好好攻克了,现在的首要任务还是做毕设。
- 要赶快动手写代码了,nlp处理还要做的更加精细,尝试在原有基础上使用word2Vec工具。
鸣谢:
- 毕设老师提供的学习思路
- Jack_cui机器学习专栏
- 西瓜书、南瓜书