支持向量机是一种二分类模型,基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机;支持向量机包括核技巧,这使它称为实质上的非线性分类器。支持向量机的学习算法是求解凸二次规划的最优化算法。
由简至繁的模型:线性可分支持向量机、线性支持向量机和非线性支持向量机。当数据线性可分时,通过硬间隔最大化,学习线性可分支持向量机;当训练数据近似线性可分时,通过软间隔最大化,学习线性支持向量机;当训练数据线性不可分时,通过使用核技巧及软间隔最大化,学习非线性支持向量机。
线性可分支持向量机
假设分类问题的输入空间和特征空间不同。线性可分支持向量机、线性支持向量机假设这两个空间的元素一一对应,即能把输入映射为特征。非线性支持向量机用一个非线性映射将输入映射到特征。所以,输入都是映射到特征空间,支持向量机的学习都是在特征空间中进行的。
一般当训练数据线性可分时,存在无穷个分离超平面可将两类数据正确分开。感知机利用误分类最小的策略,求得分离超平面,不过这时解可能有很多。线性可分支持向量机利用间隔最大化求分离超平面,这时的解是唯一的。
在样本空间中,划分超平面可通过如下线性方程来描述
w T x + b = 0 w^Tx + b = 0 wTx+b=0
其中 w = ( w 1 ; w 2 ; . . . ; w d ) w = (w_1;w_2;...;w_d) w=(w1;w2;...;wd) 是法向量(即导数,斜率),决定了超平面的方向,b是位移。将超平面记为(w, b)。样本空间中任意点 x 到超平面的距离可写为(可以类比点到直线的公式):
r = W T x + b ∣ ∣ w ∣ ∣ r = \frac{W^Tx + b}{||w||} r=∣∣w∣∣WTx+b
若能正确分类训练集则满足以下公式
w T x i + b ≥ + 1 , y i = + 1 w^Tx_i + b \ge +1, y_i=+1 wTxi+b≥+1,yi=+1
w T x i + b ≤ − 1 , y i = − 1 w^Tx_i + b \le -1, y_i=-1 wTxi+b≤−1,yi=−1
下图,距离超平面最近的几个样本点是上述等式的等号成立,它们被称为“支持向量”,两个异类到超平面的距离之和为
γ = 2 ∣ ∣ w ∣ ∣ \gamma = \frac{2}{||w||} γ=∣∣w∣∣2
称为间隔。
欲找到“最大间隔”的划分超平面,也就是找到满足约束的 w 和 b,使得 γ \gamma γ 最大,即
m a x w , b 2 ∣ ∣ w ∣ ∣ max_{w, b} \frac{2}{||w||} maxw,b∣∣w∣∣2
s . t . y i ( w T x + b ) ≥ 1 , i = 1 , 2 , . . . , m s.t. \quad y_i(w^Tx + b) \ge 1,i=1,2,...,m s.t.yi(wTx+b)≥1,i=1,2,...,m
上述第一个式子转化后可以写成
m i n w , b ∣ ∣ w ∣ ∣ 2 2 min_{w,b} \frac{||w||^2}{2} minw,b2∣∣w∣∣2
这就是支持向量机(SVM)的基本型。间隔貌似只与 w 有关,事实上 b 通过约束隐式的影响着 w 的取值。这里的间隔最大化也叫硬间隔最大化。
支持向量机由很少的“重要的”训练样本确定。
對偶問題
求解上节最后的约束条件和最大化后得到间隔划分超平面对应的模型
f ( x ) = w T x + b f(x)=w^Tx+b f(x)=wTx+b
上式本身是一个凸二次规划问题,能直接求解,但可以有更高效的办法。
该问题的拉格朗日函数是
L ( w , b , α ) = ∣ ∣ w ∣ ∣ 2 2 + ∑ 1 = 1 m α i ( 1 − y i ( w T x + b ) ) L(w, b, \alpha) = \frac{||w||^2}{2} + \sum_{1=1}^m \alpha_i(1-y_i(w^Tx + b)) L(w,b,α)=2∣∣w∣∣2+1=1∑mαi(1−yi(wTx+b))
其中 α = ( α 1 ; α 2 ; . . . ; α m ) \alpha=(\alpha_1;\alpha_2;...;\alpha_m) α=(α1;α2;...;αm),令 L 对 w 和 b 求偏导并等于0,得
w = ∑ i = 1 m α i y i x i w = \sum_{i=1}^m \alpha_i y_i x_i w=i=1∑mαiyixi
0 = ∑ i = 1 m α i y i 0 = \sum_{i=1}^m \alpha_i y_i 0=i=1∑mαiyi
代入上式,对偶问题是
m a x α ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j x i T x j 公 式 ( 1 ) max_{\alpha} \sum_{i=1}^m \alpha_i - \frac{1}{2}\sum_{i=1}^m \sum_{j=1}^m \alpha_i \alpha_j y_i y_j x_i^Tx_j \quad\quad 公式(1) maxαi=1∑mαi−21i=1∑mj=1∑mαiαjyiyjxiTxj公式(1)
s . t . ∑ i = 1 m α i y i = 0 , α i ≥ 0 公 式 ( 1 ) s.t. \quad \sum_{i=1}^m \alpha_i y_i =0 , \alpha_i \ge 0 \quad\quad 公式(1) s.t.i=1∑mαiyi=0,αi≥0公式(1)
解出 α \alpha α 后,求出 w 和 b 即可得到模型
f ( x ) = w T x + b = ∑ 1 = 1 m α i y i x i T x + b f(x)=w^Tx + b = \sum_{1=1}^m \alpha_i y_i x_i^T x + b f(x)=wTx+b=1=1∑mαiyixiTx+b
上述过程需要满足KKT条件
α i ≥ 0 公 式 ( 2 ) \alpha_i \ge 0 \quad\quad 公式(2) αi≥0公式(2)
y i f ( x i ) − 1 ≥ 0 公 式 ( 2 ) y_i f(x_i)-1 \ge 0 \quad\quad 公式(2) yif(xi)−1≥0公式(2)
α i ( y i f ( x i ) − 1 ) = 0 公 式 ( 2 ) \alpha_i(y_if(x_i)-1)=0 \quad\quad 公式(2) αi(yif(xi)−1)=0公式(2)
那么如何求解对偶问题呢,其实从对偶问题的公式(1)看,这是一个二次规划问题,可以使用SMO算法求解。
SMO算法
SMO算法的基本思路是先固定 α i \alpha_i αi 之外的所有参数,然后求 α i \alpha_i αi 上的极值。由于存在约束 ∑ i = 1 m α i y i = 0 \sum_{i=1}^m \alpha_i y_i=0 ∑i=1mαiyi=0 ,若固定 α i \alpha_i αi 之外的其他变量,则 α i \alpha_i αi 可由其他变量导出。于是,SMO每次选择两个变量 α i \alpha_i αi 和 α j \alpha_j αj ,并固定其他参数。这样参数初始化后,SMO不断执行如下两个步骤直至收敛:
- 选取一对需更新的变量 α i \alpha_i αi 和 α j \alpha_j αj 。
- 固定 α i \alpha_i αi 和 α j \alpha_j αj 以外的参数,求解公式(1)获得更新后的 α i \alpha_i αi 和 α j \alpha_j αj 。
注意到只需要选取的 α i \alpha_i αi 和 α j \alpha_j αj 中有一个不满足KKT条件公式(2),目标函数就会在迭代后增大。直观来看KKT条件违背的程度越大,变量更新后可能导致的目标函数值增幅越大。于是SMO先取违背KKT条件程度最大的变量,第二个变量应选择一个使目标函数值增长最快的变量,但由于比较各变量所对应的目标函数值增幅的复杂度过高,SMO采用了一个启发式:使选取的两变量所对应样本之间的间隔最大(这样的两个变量有很大差别,与对两个相似变量进行对比,对它们进行更新会带给目标函数值更大的变化)。
SMO算法之所以高效,恰由于在固定其他参数后,仅优化两个参数的过程能做到非常高效。仅考虑 α i \alpha_i αi 和 α j \alpha_j αj 时,公式(1)中的约束可以重写为
α i y i + α j y j = c , α i ≥ 0 , α j ≥ 0 \alpha_i y_i + \alpha_j y_j=c, \quad \alpha_i \ge 0,\alpha_j \ge 0 αiyi+αjyj=c,αi≥0,αj≥0
其中
c = − ∑ k ≠ i , j α k y k c=- \sum_{k \ne i,j} \alpha_k y_k c=−k=i,j∑αkyk
是使 ∑ i = 1 m α i y i = 0 \sum_{i=1}^m \alpha_i y_i=0 ∑i=1mαiyi=0 成立的常数,用
α i y i + α j y j = c \alpha_i y_i+\alpha_j y_j=c αiyi+αjyj=c
消去公式(1)中的变量 α j \alpha_j αj ,则得到一个关于 α i \alpha_i αi 的单变量二次规划问题,仅有的约束是 α j ≥ 0 \alpha_j \ge 0 αj≥0 ,这样的二次规划问题有闭式解,于是不必调用数值优化算法即可高效的计算出更新后的 α i \alpha_i αi 和 α j \alpha_j αj
b b b 确定时,注意到对任意的支持向量 ( x s , y s ) (x_s, y_s) (xs,ys) 都有 y s f ( x s = 1 ) y_sf(x_s=1) ysf(xs=1) ,即
y s ( ∑ i ∈ S α i y i x i T x s + b ) = 1 y_s(\sum_{i \in S} \alpha_i y_i x_i^T x_s +b)=1 ys(i∈S∑αiyixiTxs+b)=1
其中 S = i ∣ α i > 0 , i = 1 , 2 , . . m S={i|\alpha_i \gt 0, i=1,2,..m} S=i∣αi>0,i=1,2,..m 是所有支持向量的下标。理论上可以选取任意支持向量通过求解上式获得 b b b ,但现实中通常选择:使用所有支持向量求解的平均值。
b = 1 ∣ S ∣ ∑ ( 1 y s − ∑ i ∈ S α i y i x i T x s ) b=\frac{1}{|S|}\sum(\frac{1}{y_s} - \sum_{i \in S} \alpha_i y_i x_i^T x_s) b=∣S∣1∑(ys1−i∈S∑αiyixiTxs)
但现实中通常选择:使用所有支持向量求解的平均值。
b = 1 ∣ S ∣ ∑ ( 1 y s − ∑ i ∈ S α i y i x i T x s ) b=\frac{1}{|S|}\sum(\frac{1}{y_s} - \sum_{i \in S} \alpha_i y_i x_i^T x_s) b=∣S∣1∑(ys1−i∈S∑αiyixiTxs)
参考
周志华《机器学习》
https://www.cnblogs.com/pinard/p/6111471.html