前言
本章总结支持向量机。关于SVM的理解,我建议自己手推一遍,多看几遍相关视频,推不出来的地方着重看一下。手推公式不是目的,通过手推公式理解SVM才是真谛。
☆☆☆ 算法目录导航页,包含基础算法、高级算法、机器学习算法等☆☆☆
一、概念
在讲SVM之前,先通俗理解下面几个概念:
① 凸二次规划:二次规划是指目标函数是二次函数,约束条件是线性函数。如果目标函数是凸函数,那么就是凸二次规划问题。
② 拉格朗日乘子法: 我认为简单理解就是去除等式约束的一种方法。
③ 对偶问题:举个例子,我一套房屋出租,租金最大化为2000块;你要租我的房子,想让租金最小化。那么你的租金最小化其实是我的租金最大化。不管咱俩怎么谈判,怎么优化,实际成交价格很可能就是2000块(因为我就是要最大化租金,你不租我租给别人啊,但是谈判的时候我可能会说最少就2000不能再低了,其实是套路 ,嘿嘿 ),所以租金最优化之后的本质通常是一致的。
那么,在这个例子中,原问题是我的租金最大化,它的对偶问题就是你的租金最小化,到头来结果确是一致的。
所以,对偶问题简单理解就是,对于同一个问题从不同的角度去观察、去优化,最后的结果是一样的。
二、什么是SVM
支持向量机(Support Vector Machine, SVM)是一类按监督学习(supervised learning)方式对数据进行二元分类(binary classification)的广义线性分类器(generalized linear classifier),其决策边界是对学习样本求解的最大间隔超平面(maximum-margin hyperplane) 。
SVM被提出于1963年,在二十世纪90年代后得到快速发展并衍生出一系列改进和扩展算法,包括多分类SVM 、最小二乘SVM(Least-Square SVM, LS-SVM) 、支持向量回归(Support Vector Regression, SVR) 、支持向量聚类(support vector clustering)、半监督SVM(semi-supervised SVM, S3VM) 等,在人像识别(face recognition)、文本分类(text categorization)等模式识别(pattern recognition)问题中有广泛应用 。
简单理解,svm就是用来解决分类问题的函数。
三、SVM分类
① Hard-Margin SVM
② Soft-Margin SVM
③ Kernel SVM
四、如何建模(就是分隔超平面 - 直线或平面)
思考:如果是线性分类问题,考虑一下,哪一条直线最优呢?
你可能会告诉我,C直线最优,为什么呢?它的鲁棒性最好。那么我们怎么去定义C?
我们发现,好像间隔最大,鲁棒性就越好,OK我们得到了目标函数(不是损失):
max margin ( w , b , x ) \max \operatorname{margin}(w, b,x) maxmargin(w,b,x)
那这个margin(w,b)怎么去定义?定睛一看,这不就是点到直线的距离么?为了保证样本能正确分开,求点到直线的最小距离即可,则margin可表示为
min distance ( w , b , x ) \min\operatorname{distance}(w,b,x) mindistance(w,b,x)
目标函数变为: max min distance ( w , b ) \max \min \operatorname{distance}(w, b) maxmindistance(w,b)
二维平面中,点到直线距离公式:
distance = ∣ a x + b y + c ∣ a 2 + b 2 \operatorname{distance}=\frac{|a x+by+c |}{\sqrt{a^{2}+b^{2}}} distance=a2+b2∣ax+by+c∣
映射到高维(w,x都是向量,不单独标记),其中二范数表示欧氏距离:
distance = ∣ w x + b ∣ ∥ w ∥ \operatorname{distance}=\frac{\left|wx+b\right|}{\|w\|} distance=∥w∥∣wx+b∣
损失函数变为:
max min ∣ w x + b ∣ ∥ w ∥ \operatorname{max \ min}\frac{|w x+b|}{\|w\|} max min∥w∥∣wx+b∣
继续化简损失函数:我们一开始有个前提条件,决策边界wx + b=0 能将正负样本分开,所以有
{ w x + b > 0 ⇒ y = + 1 w x + b < 0 ⇒ y = − 1 \left\{\begin{array}{l}{w x+b>0 \Rightarrow y=+1} \\ {w x+b<0 \Rightarrow y=-1}\end{array}\right. {wx+b>0⇒y=+1wx+b<0⇒y=−1
去掉损失函数分子的绝对值,得:
max min y i ( w i x i + b ) ∥ w i ∥ \max \min \frac{y_{i}\left(w_{i} x_{i}+b\right)}{\left\|w_{i}\right\|} maxmin∥wi∥yi(wixi+b)
将此式: min y i ( w i x i + b ) ∥ w i ∥ \frac{\min\ y_{i}\left(w_{i} x_{i}+b\right)}{\left\|w_{i}\right\|} ∥wi∥min yi(wixi+b)
中分子分母等比缩放,分子最小取1,得到: { max 1 ∥ w i ∥ s . t y i ( w i x i + b ) ≥ 1 , i = 1 , … , n \left\{\begin{array}{l}{\max \frac{1}{\|w_{i}\|}} \\ \\ {s . t \ \ \ \ \ y_{i}\left(w_{i} x_{i}+b\right) \geq 1, i=1, \dots, n}\end{array}\right. ⎩⎨⎧max∥wi∥1s.t yi(wixi+b)≥1,i=1,…,n
继续化简,最终得到了我们的损失函数: { min 1 2 ∥ w i ∥ 2 s . t y i ( w i x i + b ) ≥ 1 , i = 1 , … , n \left\{\begin{array}{l}{\min \frac{1}{2}\ \|w_{i}\|^2} \\ \\ {s . t \ \ \ \ \ y_{i}\left(w_{i} x_{i}+b\right) \geq 1, i=1, \dots, n}\end{array}\right. ⎩⎨⎧min21 ∥wi∥2s.t yi(wixi+b)≥1,i=1,…,n
它是一个凸二次规划问题。
以上也可以理解为SVM三宝:间隔、对偶、核技巧中,最大间隔的推导过程。
五、如何求loss的参数
经过我们对建模过程的分析和推导,最终得到了一个凸二次规划问题,那么我们需要用凸优化的方法求解出w和b,使用拉格朗日乘子法,通俗理解就是去掉线性约束条件,整合到目标函数中,便于继续求解。
L ( w , b , λ ) = 1 2 ∥ w i ∥ 2 + ∑ i = 1 n λ i ( 1 − y i ( w i x i + b ) ) \mathcal{L}(w, b, \lambda)=\frac{1}{2}\|w_{i}\|^{2}+\sum_{i=1}^{n} \lambda_{i}\left(1-y_{i}\left(w_{i} x_{i}+b\right)\right) L(w,b,λ)=21∥wi∥2+i=1∑nλi(1−yi(wixi+b))
原目标函数变为:
{ min max L ( w i , b , λ i ) s . t λ i ≥ 0 , i = 1 , … , n \left\{\begin{array}{l}{\min \max \ \mathcal{L}(w_{i}, b, \lambda_{i})} \\ \\ {s . t \ \ \ \ \ \lambda_{i} \geq 0, \ \ i=1, \dots, n}\end{array}\right. ⎩⎨⎧minmax L(wi,b,λi)s.t λi≥0, i=1,…,n
对偶问题引出 :
由于原问题是极小极大问题求解不方便,换成求解它的对偶问题极大极小 ( 宁为鸡头不为凤尾,所以做了 鸡头 --> 即原问题的对偶函数 ):
min
max
L
(
w
i
,
b
,
λ
i
)
≥
max
min
L
(
w
i
,
b
,
λ
i
)
\min \max \ \mathcal{L}(w_{i}, b, \lambda_{i})\geq\max \min \ \mathcal{L}(w_{i}, b, \lambda_{i})
minmax L(wi,b,λi)≥maxmin L(wi,b,λi)
当满足KKT条件时,上述等式恒等,所以原目标函数转化为它的强对偶函数来进行优化,目标函数变为: { max min L ( w i , b , λ i ) s . t λ i ≥ 0 , i = 1 , … , n \left\{\begin{array}{l}{ \max \min \ \mathcal{L}(w_{i}, b, \lambda_{i})} \\ \\ {s . t \ \ \ \ \ \lambda_{i} \geq 0, \ \ i=1, \dots, n}\end{array}\right. ⎩⎨⎧maxmin L(wi,b,λi)s.t λi≥0, i=1,…,n
KKT条件
什么是KKT条件?
库恩塔克条件(Kuhn-Tucker conditions)是非线性规划领域里最重要的理论成果之一,是确定某点为极值点的必要条件。如果所讨论的规划是凸规划,那么库恩-塔克条件也是充分条件。KKT条件有4个特性:
① 原可行性, 1 − y i ( w i x i + b ) ≤ 0 1-y_{i}\left(w_{i} x_{i}+b\right) \leq 0 1−yi(wixi+b)≤0
② 对偶可行性, λ i ≥ 0 \lambda_{i} \geq 0 λi≥0
③ 互补松弛条件, λ ∗ [ 1 − y i ( w i x i + b ) ] = 0 \lambda *\left [1-y_{i}\left(w_{i} x_{i}+b\right) \right] = 0 λ∗[1−yi(wixi+b)]=0
④ 拉格朗日平稳性,
{ ∇ w L ( w , b , λ ) = 0 ∇ b L ( w , b , λ ) = 0 ∇ λ L ( w , b , λ ) = 0 \left\{\begin{array}{l}{ \nabla_{\mathbf{w}} \mathcal{L}\left(\mathbf{w},b, \lambda\right)=\mathbf{0}} \\ \\ {\nabla_{\mathbf{b}} \mathcal{L}\left(\mathbf{w},b, \lambda\right)=\mathbf{0}} \\ \\ \nabla_{\mathbf{\lambda}} \mathcal{L}(\mathbf{w}, b, \lambda) = \mathbf{0} \end{array}\right. ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧∇wL(w,b,λ)=0∇bL(w,b,λ)=0∇λL(w,b,λ)=0
简单总结下这4个条件:
约束条件 + 拉格朗日乘子 + 前两个条件同时满足 + 优化问题的套路参数求导等于0。
求参数过程:
将拉格朗日函数L(w,b,λ)分别对w和b求偏导并令其为0:
∂ L ∂ w = 0 ⇒ w = ∑ i = 1 n λ i y i x i ∂ L ∂ b = 0 ⇒ 0 = ∑ i = 1 n λ i y i \begin{array}{l}{\frac{\partial L}{\partial w}=0 \Rightarrow w=\sum_{i=1}^{n} \lambda_{i} y_{i} x_{i}} \\ \\ {\frac{\partial L}{\partial b}=0 \Rightarrow 0=\sum_{i=1}^{n} \lambda_{i} y_{i}}\end{array} ∂w∂L=0⇒w=∑i=1nλiyixi∂b∂L=0⇒0=∑i=1nλiyi
将上述式子代入目标函数,并化简得:
{ max ∑ i = 1 n λ i − 1 2 ∑ i = 1 n ∑ j = 1 n λ i λ j y i y j x i x j s.t. ∑ i = 1 n λ i y i = 0 λ i ≥ 0 , i = 1 , 2 , … , n \left\{\begin{array}{l}{\max \sum_{i=1}^{n} \lambda_{i}-\frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n} \lambda_{i} \lambda_{j} y_{i} y_{j}x_{i}x_{j}} \\ \\ {\text {s.t.} \sum_{i=1}^{n} \lambda_{i} y_{i}=0} \\ \\ {\quad \lambda_{i} \geq 0, \quad i=1,2, \ldots, n}\end{array}\right. ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧max∑i=1nλi−21∑i=1n∑j=1nλiλjyiyjxixjs.t.∑i=1nλiyi=0λi≥0,i=1,2,…,n
添加符号,换成求最小值:
{ min 1 2 ∑ i = 1 n ∑ j = 1 n λ i λ j y i y j x i x j − ∑ i = 1 n λ i s.t. ∑ i = 1 n λ i y i = 0 λ i ≥ 0 , i = 1 , 2 , … , n \left\{\begin{array}{l}{\min \frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n} \lambda_{i} \lambda_{j} y_{i} y_{j}x_{i}x_{j}- \sum_{i=1}^{n}\lambda_{i}} \\ \\ {\text {s.t.} \sum_{i=1}^{n} \lambda_{i} y_{i}=0} \\ \\ {\quad \lambda_{i} \geq 0, \quad i=1,2, \ldots, n}\end{array}\right. ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧min21∑i=1n∑j=1nλiλjyiyjxixj−∑i=1nλis.t.∑i=1nλiyi=0λi≥0,i=1,2,…,n
根据KKT条件③可求出b也是关于λ的,所以w 和 b都是关于λ的:
w ∗ = ∑ i = 1 n λ i y i x i b ∗ = y i − ∑ i = 1 n λ i y i x i ⋅ x j \begin{array}{l}{w^{*}=\sum_{i=1}^{n} \lambda_{i} y_{i} x_{i}} \\ \\ {b^{*}=y_{i}-\sum_{i=1}^{n} \lambda_{i}y_{i}x_{i} \cdot x_{j}}\end{array} w∗=∑i=1nλiyixib∗=yi−∑i=1nλiyixi⋅xj
最后,只要使用SMO算法求出λ
。SMO是求解对偶问题的算法,这里就不再叙述。请参考SMO或者小蓝书等资料。
以上就是整个求参过程。
至此,我们完成了Hard-Margin SVM的建模和求参过程!
六、Soft-Margin SVM
上面我们讲了那么一堆了,好腻害,数据就这么完美,就没有一点噪声么?
上图中,正负样本能够正确分开,没问题。但是,正样本中好像有一个点比较特殊,棒打出头鸟,忽略它吧。这个点就是我们所谓的噪声点,一下子把模型的泛化能力给拉低了。那我们能不能允许少量噪声点的存在而拉高模型的泛化能力呢?答案是肯定的,这就是soft-margin svm要干的事:允许一点噪声的存在。
因此,引入了松弛变量 ξ ,可以理解为样本越界程度。
令
ξ
i
=
1
−
y
i
(
w
i
x
i
+
b
)
,
且
ξ
i
≥
0
ξ_i = 1-y_{i}\left(w_{i} x_{i}+b\right) ,且ξ_i \geq 0
ξi=1−yi(wixi+b),且ξi≥0
则建模后可写成:
{ min 1 2 ∥ w i ∥ 2 + C ∑ i = 1 N ξ i s . t y i ( w i x i + b ) ≥ 1 − ξ i , i = 1 , … , n , 且 ξ i ≥ 0 \left\{\begin{array}{l}{\min \frac{1}{2}\ \|w_{i}\|^2 +C \sum_{i=1}^{N} \xi_{i}} \\ \\ {s . t \ \ \ \ \ y_{i}\left(w_{i} x_{i}+b\right) \geq 1 - \xi_{i}, i=1, \dots, n,且ξ_i \geq 0}\end{array}\right. ⎩⎨⎧min21 ∥wi∥2+C∑i=1Nξis.t yi(wixi+b)≥1−ξi,i=1,…,n,且ξi≥0
ξ 的进一步理解
关于 ξ i ξ_i ξi的理解,想一下,在hard-margin的基础上,怎么去定义loss?可以使用样本点数,不满足那个s.t.条件的点都算loss,但是此时函数曲线是跳跃的,不利于求导。那么就使用距离
{ y i ( w i x i + b ) ≥ 1 , l o s s = 0 y i ( w i x i + b ) < 1 , l o s s = 1 − y i ( w i x i + b ) \left\{\begin{array}{l}{y_{i}\left(w_{i} x_{i}+b\right) \geq 1\ , \ loss=0} \\ \\ {y_{i}\left(w_{i} x_{i}+b\right) < 1\ ,\ loss = 1-y_{i}\left(w_{i} x_{i}+b\right) }\end{array}\right. ⎩⎨⎧yi(wixi+b)≥1 , loss=0yi(wixi+b)<1 , loss=1−yi(wixi+b)
令 z = 1 − y i ( w i x i + b ) z=1-y_{i}\left(w_{i} x_{i}+b\right) z=1−yi(wixi+b),则loss可表示为 l o s s = m a x { 0 , 1 − z } loss=max\{\ 0\ , 1-z\ \} loss=max{ 0 ,1−z }
推导过程跟硬间隔类似。损失函数
C
∑
i
=
1
N
ξ
i
C \sum_{i=1}^{N} \xi_{i}
C∑i=1Nξi ,而前一项是L2正则。也就是说硬间隔不存在损失函数,软间隔才有。
l
o
s
s
=
m
a
x
{
0
,
1
−
z
}
loss=max\{\ 0\ , 1-z\ \}
loss=max{ 0 ,1−z }是Hinge Loss,合页损失函数
。大于等于1时,loss是0,小于1时,loss就是1-z。y = 1-z的图像是这样的:
七、核函数
考虑一下这种情况,数据在低维空间线性不可分,高维空间可分。
事实上,大部分时候数据并不是线性可分的,这个时候满足这样条件的超平面就根本不存在。在上文中,我们已经了解到了SVM处理线性可分的情况,那对于非线性的数据SVM咋处理呢?对于非线性的情况,SVM 的处理方法是选择一个核函数 κ(⋅,⋅) ,通过将数据映射到高维空间,来解决在原始空间中线性不可分的问题。
具体来说,在线性不可分的情况下,支持向量机首先在低维空间中完成计算,然后通过核函数将输入空间映射到高维特征空间,最终在高维特征空间中构造出最优分离超平面,从而把平面上本身不好分的非线性数据分开。(此处解释摘自July博客)
总结下,核函数就为了解决线性不可分的情况,低维空间计算,计算完成后再映射到高维空间。核函数计算的是两个向量的内积,也就是相似度。
常用的核函数有:
① 线性核,我们上面的目标函数中 x_i * x_ j就是线性核,通用表示 φ(x_i) * φ(x_ j);
② 多项式核;
③ 高斯核(RBF)。
关于核函数参考。
介绍完毕!