机器学习笔记——支持向量机SVM
一、间隔margin的理解
1.1 对margin的简单理解
-
在系统详细地接触SVM之前,我们需要明白SVM到底是来做什么的,或者说优化的方向是什么,那么我们不得不对间隔margins做进一步的理解。这也或许是学习SVM过程中为数不多的容易理解的地方…
-
给定训练样本集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } D=\{(x_1,y_1),(x_2,y_2),...,(x_m,y_m)\} D={(x1,y1),(x2,y2),...,(xm,ym)}, y ϵ { − 1 , + 1 } y\epsilon\{-1,+1\} yϵ{−1,+1},我们接触的分类问题最基本的想法就是基于训练集在样本空间中找到一个划分超平面,将不同类别的样本分开。为了方便理解,我们使用二维特征平面图的方式展示。
-
很多情况下,我们能找到的分类面可能很多,那么我们应该如何衡量一个分类面的好坏呢?回顾一下我们在二分类问题中, w T x + b > 0 w^Tx+b>0 wTx+b>0则我们可以把它分为正类, w T x + b < 0 w^Tx+b<0 wTx+b<0我们可以把它分为负类, w T x + b > > 0 w^Tx+b>>0 wTx+b>>0我们可以很有把握地把它分为正类, w T x + b < < 0 w^Tx+b<<0 wTx+b<<0我们可以很有把握地把它分为负类。所以说 w T x + b w^Tx+b wTx+b离0越远我们将其分类正确地可能性就越大。
-
图中的每一个分类面都可以用方程 w T x + b = 0 w^Tx+b=0 wTx+b=0表示,一组不同的 ( w , b ) (w,b) (w,b)对应一条不同的分类直线。因此在平面中离分类面越远的我们越有把握分对,而离分类面越近的样本点我们分类得到的置信度(confidence)就越低。所以我们想要保证离分类面最近的样本离分类面也保有一定的距离。
-
一组不同的 ( w , b ) (w,b) (w,b)对应一条不同的分类直线 w T x + b = 0 w^Tx+b=0 wTx+b=0,其中 w w w为法向量,决定了超平面的方向; b b b为位移项,决定了超平面与原点之间的距离。任意样本点到超平面的距离可以表示为: r = ∣ w T x + b ∣ ∣ ∣ w ∣ ∣ r=\frac{|w^Tx+b|}{||w||} r=∣∣w∣∣∣wTx+b∣.
-
假设超平面可以将所有的训练样本正确分类,即对于 ( x i , y i ) , y i = + 1 , w T x i + b > 0 ; y i = − 1 , w T x i + b < 0 (x_i,y_i),y_i=+1,w^Tx_i+b>0;y_i=-1,w^Tx_i+b<0 (xi,yi),yi=+1,wTxi+b>0;yi=−1,wTxi+b<0,得到:
-
距离超平面最近的这几个训练样本点使式子中的等号成立,它们被称为“支持向量”,两个异类支持向量到超平面的距离之和也就是间隔margin为:
-
我们想要找到具有最大间隔的划分超平面,也就是要找到满足约束的参数w与b使得margin最大。限制条件表达的意思是:所有样本必须分类正确。
-
进一步分析,我们为了最大化间隔,仅需最大化 ∣ ∣ w ∣ ∣ − 1 ||w||^{-1} ∣∣w∣∣−1,这也等价于最小化 ∣ ∣ w ∣ ∣ 2 ||w||^2 ∣∣w∣∣2,于是上述问题可以重写为如下所示。我们便得到了一个凸二次规划问题,该问题我们曾经在高数课上学习过。
1.2 函数间隔与几何间隔
- 针对一个简单的二分类问题,上图中ABC三点均分类正确。但相比之下,A距离分类面最远最有把握,C距离分类面最近最没有把握。分类超平面的函数表达为 w ∗ x + b = 0 w*x+b=0 w∗x+b=0,而 ∣ w ∗ x + b ∣ |w*x+b| ∣w∗x+b∣可以相对地表示点x距离超平面的远近, w ∗ x + b w*x+b w∗x+b与 y y y的符号是否一致可以判断分类是否正确。因此我们定义超平面 ( w , b ) (w,b) (w,b)与某样本点 ( x i , y i ) (x_i,y_i) (xi,yi)函数间隔为 γ i = y i ( w ∗ x i + b ) \gamma_i=y_i(w*x_i+b) γi=yi(w∗xi+b),而超平面与训练集之间的函数间隔定义为所有样本点中的最小值。
- 我们想要获得最小间隔的分类超平面,只最小化函数间隔是不合适的。因为只要成比例的改变 w 与 b w与b w与b,在超平面不动的情况下就可以改变函数间隔。因此函数间隔只可以用于确定分类面后比较不同样本点,而不同分类面之间需要统一标准,由此产生了几何间隔。
- 为了统一标准我们使得所有w与b均除以||w||,使得新得到的||w||为1。具体表达形式为: γ i = y i ( w ∣ ∣ w ∣ ∣ ∗ x i + b ∣ ∣ w ∣ ∣ ) \gamma_i=y_i(\frac{w}{||w||}*x_i+\frac{b}{||w||}) γi=yi(∣∣w∣∣w∗xi+∣∣w∣∣b)。
二、从优化目标到最大间隔分类器
2.1 sigmoid到hinge loss
- 首先我们回顾一下对数几率回归logistic中损失函数的定义(以下函数省略求和步骤,以单一样本为例)
- 当
y
=
1
y=1
y=1时,原来的损失函数只剩下下图所示形式,对应的函数图像也已经得到。我们想让损失尽可能为0(分类为正例且分类正确),就需要让
z
=
θ
T
x
z=\theta^Tx
z=θTx尽可能地远大于0。但其实
z
>
0
z>0
z>0表示正确分类,仍然有些许地损失,我们都分类正确了肯定希望没有损失,损失即便很小如果加之以大样本集地损失累积仍然可能影响结果。因此我们想更改损失函数为Hinge Loss(铰链损失)。
2.2 Logistic回归损失函数变式
- 该部分内容我们将从Logistic Regression的正则化交叉熵损失函数入手,逐步修改推导得到我们熟悉的SVM优化目标。通过这个过程体会SVM与Logistic Regression的区别与联系。
2.3 SVM又可理解为最大间隔分类器
- 首先我们来理解一下向量内积的性质。
- 我们有这样的优化目标,结合限制条件以及向量内积的图形化表示,我们可以得到SVM又可以理解为最大间隔Margin分类器。
三、SVM思想细节
3.1 SVM基本概念及思想
- 支持向量机学习的基本想法是求解能够正确划分训练数据集并且几何间隔最大的分离超平面。对于线性可分的训练数据集来说,线性可分分离超平面有无穷多个,但是几何间隔最大的分离超平面是唯一的(可证明)。
- 间隔最大化的直观解释是:对训练数据集找到几何间隔最大的超平面意味着以充分大的确信度对训练数据进行分类,也就是说不仅将正负实例点分开,而且对最难分的实例点(离超平面最近的点)也有足够大的确信度将其分开,这样的超平面应该对未知的新实例有很好的分类预测能力。
- 我们理解的SVM算法从最大化超平面与训练数据集的几何间隔出发,限制条件表达的意思是超平面关于每个样本点的几何间隔至少大于
γ
\gamma
γ才可以认为分类正确。考虑到几何间隔与函数间隔的关系,我们可以将问题改写为:
- 几何间隔代表了绝对距离不可随意更改,但函数间隔修改并不影响最优化问题的求解。因此我们完全可以把函数间隔
γ
^
=
1
\hat\gamma=1
γ^=1,最大化
1
∣
∣
w
∣
∣
\frac{1}{||w||}
∣∣w∣∣1也就相当于最小化
∣
∣
w
∣
∣
||w||
∣∣w∣∣。这样就得到了我们SVM优化问题的常见形式。
- 该问题是一个凸二次规划问题,我们先不管如何求解该问题,先梳理一下大体的思路。我们求得最优解 w ∗ 、 b ∗ w^*、b^* w∗、b∗,由此得到分离超平面 w ∗ x + b ∗ = 0 w^*x+b^*=0 w∗x+b∗=0和分类决策函数 f ( x ) = s i g n ( w ∗ x + b ∗ ) f(x)=sign(w^*x+b^*) f(x)=sign(w∗x+b∗)。
- 支持向量机中的支持向量又是什么含义呢?线性可分的情况下,在两条虚线的分类边界上的点便是支持向量,也就是说满足限制条件: y i ( w x i + b ) = 1 y_i(wx_i+b)=1 yi(wxi+b)=1的样本点。两条虚线分类边界之间的距离称之为间隔margin,间隔的大小只依赖于分类超平面的法向量w,等于 2 ∣ ∣ w ∣ ∣ \frac{2}{||w||} ∣∣w∣∣2。在决定分离超平面时只有支持向量起作用,而其他实例点不起作用。移动支持向量之外的点,甚至删除这些点都不会改变结果。支持向量的个数一般很少,所以支持向量机由很少的“重要的”训练样本确定。
3.2 求解最优化问题的对偶算法
- 上一部分我们已经简单梳理出了SVM算法的基本思路,只要求解出最优化问题的解 w ∗ 、 b ∗ w^*、b^* w∗、b∗,我们就解决了问题。但是往往该最优化问题并不好直接解决,因此我们就提出了SVM的对偶算法,通过求解其拉格朗日对偶问题来获得原始问题的最优解。对偶算法的优点主要在于:一是对偶问题往往更容易求解,二是自然引入了向量内积与核函数,进而推广到非线性分类问题。
- 首先带约束条件的最优化问题也就是凸二次规划问题,我们首先引入拉格朗如乘子构建拉格朗日函数。
- 我们的原始问题是 min w , b max α L ( w , b , α ) \min \limits_{w,b}\max \limits_{\alpha} L(w,b,\alpha) w,bminαmaxL(w,b,α),也就是极小极大问题。我们的对偶问题是 max α min w , b L ( w , b , α ) \max \limits_{\alpha}\min \limits_{w,b} L(w,b,\alpha) αmaxw,bminL(w,b,α),也就是极大极小问题。原始问题与对偶问题分别达到的最优值我们记为 p ∗ 、 d ∗ p^*、d^* p∗、d∗,也就是 p ∗ = min w , b max α L ( w , b , α ) p^*=\min \limits_{w,b}\max \limits_{\alpha} L(w,b,\alpha) p∗=w,bminαmaxL(w,b,α), d ∗ = max α min w , b L ( w , b , α ) d^*=\max \limits_{\alpha}\min \limits_{w,b} L(w,b,\alpha) d∗=αmaxw,bminL(w,b,α)。
- 先摆出我们的结论 d ∗ < = p ∗ d^*<=p^* d∗<=p∗,也就是说对偶问题所能达到的最优值要小于等于原始问题的最优值。形象化的理解是原始问题从一帮高个子中找到了一个最矮的,对偶问题从一帮矮个子中找到了一个最高的,高个子中最矮的要大于等于矮个子中最高的。
- 当原始问题取值取到 p ∗ p^* p∗时,有一组对应的参数 w p , b p , α p w^p,b^p,\alpha^p wp,bp,αp,也就是原始问题的最优解。当对偶问题取值取到 d ∗ d^* d∗,有一组对应的参数 w d , b d , α d w^d,b^d,\alpha^d wd,bd,αd,也就是对偶问题的最优解。只用当 d ∗ = p ∗ d^*=p^* d∗=p∗时,对偶问题的最优解才是原始问题的最优解记为 w ∗ , b ∗ , α ∗ w^*,b^*,\alpha^* w∗,b∗,α∗,也就是说可以用对偶问题来解决原始问题,且对偶问题更容易解决。
- 首先我们将原始问题转化为对偶问题:
1.将拉格朗日函数分别对w,b求偏导数并令其等于0。得到 w = ∑ i = 1 n α i y i x i , ∑ i = 1 n α i y i = 0 w=\sum_{i=1}^n\alpha_iy_ix_i,\sum_{i=1}^n\alpha_iy_i=0 w=∑i=1nαiyixi,∑i=1nαiyi=0。
2.将以上两个式子带入拉格朗日函数,也就是消去了拉格朗日函数中的w与b,现在只剩下 α \alpha α。得到原始问题的对偶最优化问题:
3.求解上述最优化问题可以得到 α ∗ = ( α 1 ∗ , α 2 ∗ , . . . , α N ∗ ) T \alpha^*=(\alpha^*_1,\alpha^*_2,...,\alpha^*_N)^T α∗=(α1∗,α2∗,...,αN∗)T。我们根据KKT条件可以推出原始问题的最优解。
根据我们由对偶问题求得的 w ∗ 、 b ∗ w^*、b^* w∗、b∗,我们可以写出分类超平面以及分类决策函数。
- 引入拉格朗日乘子后,我们对于支持向量的判别又有了新的方法。将训练集中对应于 α i ∗ > 0 \alpha_i^*>0 αi∗>0的样本点 ( x i , y i ) (x_i,y_i) (xi,yi)的实例向量称之为支持向量。根据这一定义,支持向量一定在分类边界上。
3.3 α ∗ \alpha^* α∗的求解方法SMO算法
- 可以发现通过对偶问题的转换,我们成功引入了向量内积(有助于进一步引入核方法与核函数)。新的最优化问题任然是个凸二次规划问题,但该问题的规模正比于训练样本数,这会在实际任务中造成很大的开销。为了更有效的解决该最优化问题我们提出了SMO算法。
- 前面已经讲过,我们想要用对偶问题的解来解决原问题的话要求是强对偶关系,也就是说只有我们求出的 α ∗ \alpha^* α∗满足KKT条件,才可以使用对偶问题求出的 α ∗ \alpha^* α∗去求解原始问题的 w ∗ 与 b ∗ w^*与b^* w∗与b∗。因此我们寻找对偶问题最优解的过程实际上就是不断逼近KKT条件的过程。
- SMO算法每次选择两个变量 α i \alpha_i αi和 α j \alpha_j αj并固定其他参数,这样参数初始化之后SMO不断执行如下两个步骤直至收敛。1.选取一对需更新的变量 α i \alpha_i αi和 α j \alpha_j αj。2.固定 α i \alpha_i αi和 α j \alpha_j αj以外的参数,求解并更新参数。
- 有关每次待更新的两个参数的选择策略,第一个参数要选择KKT条件违背程度最大的,则变量更新后可能导致的目标函数值增幅越大。第二个参数选取跟第一个参数对应样本之间间隔最大。
四、Hard SVM & Soft SVM
4.1 从hard SVM到soft SVM
- 以上我们讨论的都是严格线性可分的Hard SVM,也就是说存在分类超平面可以完全分类正确,或者说所有样本都满足最优化问题的限制条件。这样的要求过于苛刻使得Hard SVM很少有应用场景。
- 对此我们提出了有容错机制(或者说是乘法机制)的SVM,也就是Soft SVM。只出现部分奇异点时可以使用Soft SVM,如果分类错误的点过多或者说在该维度正负样本过于交错,就是无法线性可分了要去考虑核函数升维。
- 线性不可分意味着部分样本点不能满足函数间隔大于等于1的约束条件,也就是说无法分类正确,为了解决这个问题,可以对每个样本点引入一个松弛变量(或者说是惩罚) ξ i \xi_i ξi,使得函数间隔加上松弛变量后大于等于1也就是满足限制条件。 y i ( w x i + b ) > = 1 − ξ i y_i(wx_i+b)>=1-\xi_i yi(wxi+b)>=1−ξi。
- 最优化问题的原始问题变为如下形式:
- 这里C>0称为惩罚函数,C值大时对误分类的惩罚增大,C值小时对误分类的惩罚减小。最小化目标函数有两层含义,一是最小化 1 2 ∣ ∣ w ∣ ∣ 2 \frac{1}{2}||w||^2 21∣∣w∣∣2使得间隔尽量大,同时使得误分类点的个数尽量的少,而C相当于调和二者的系数。
4.2 soft SVM学习算法
- 首先根据实际问题情况以及调参经验选择合适的惩罚因子C>0,构造并求解得到原始问题的对偶问题(凸二次规划问题)。
求解该问题(SMO算法)得到最优解 α ∗ = ( α 1 ∗ , α 2 ∗ , . . . , α N ∗ ) T \alpha^*=(\alpha^*_1,\alpha^*_2,...,\alpha^*_N)^T α∗=(α1∗,α2∗,...,αN∗)T。 - 根据如下公式计算得到
w
∗
与
b
∗
w^*与b^*
w∗与b∗,从而得到分类超平面以及决策函数。
4.3 soft SVM的支持向量
- 软间隔的支持向量或者在分类边界上、或者在分类边界与分类超平面之间(分类正确)、或者在分类超平面误分的一侧。理解支持向量的位置特征需要结合KKT条件以及 ξ \xi ξ的物理含义。
- 若 α i ∗ < C \alpha^*_i<C αi∗<C则 ξ = 0 \xi=0 ξ=0,说明支持向量恰好落在分类间隔边界上。若 α i ∗ = C , 0 < ξ < 1 \alpha^*_i=C,0<\xi<1 αi∗=C,0<ξ<1则分类正确,支持向量恰好落在间隔边界与分类超平面之间。若 α i ∗ = C , ξ = 1 \alpha^*_i=C,\xi=1 αi∗=C,ξ=1则支持向量恰好在分类超平面上。若 α i ∗ = C , ξ > 1 \alpha^*_i=C,\xi>1 αi∗=C,ξ>1则支持向量位于分类超平面误分的一侧。
- 软间隔的KKT互补条件: α i ∗ ( y i ( w ∗ x i + b ∗ ) − 1 − ξ ) = 0 \alpha^*_i(y_i(w^*x_i+b^*)-1-\xi)=0 αi∗(yi(w∗xi+b∗)−1−ξ)=0
五、核函数与非线性支持向量机
5.1 线性可分与线性不可分
- 线性可分指的是能用一个超平面将所有样本点分为正负两类,两个特征的二维空间超平面为一维直线,三个特征的三维空间超平面为二维平面,更高维度的情况一次类推。
- 如果不能用超平面完成分类,只能用超曲面将正负例正确分开,则称这个问题为非线性可分问题。非线性问题往往不好求解,所以我们希望能用解线性分类问题的方法来解决这个问题,所采取的方法是进行一个非线性变换,将非线性问题变换为线性问题,通过解变换后的线性问题的方法来解原来的非线性问题。
5.2 核函数与核技巧
- 我们定义从低维空间到高维空间的映射函数为: ϕ ( x ) \phi(x) ϕ(x)。核函数 K ( x , z ) = ϕ ( x ) ∗ ϕ ( z ) K(x,z)=\phi(x)*\phi(z) K(x,z)=ϕ(x)∗ϕ(z)。其中 ϕ ( x ) ∗ ϕ ( z ) \phi(x)*\phi(z) ϕ(x)∗ϕ(z)代表两个向量内积。
- 核技巧的方法是:在学习与预测时只定义核函数 K ( x , z ) K(x,z) K(x,z),而不显式地定义映射函数 ϕ \phi ϕ,直接计算核函数容易,而通过计算映射函数地内积得到核函数非常复杂。并且某个固定地核函数 K ( x , z ) K(x,z) K(x,z),可能有多个特征空间对应,每个特征空间内部也有可能有多组映射,因此根本没有意义去关注映射函数。
5.3 核函数在SVM中的简单应用
- 之前我们在说为什么要把原始问题转换成对偶问题解决时有以下两点,第一点就是对偶问题便于解决,第二点则是对偶问题自然引出向量内积形式便于直接与核函数衔接。
- 在线性支持向量机的对偶问题中,无论是目标函数还是决策函数都只涉及输入实例与实例之间的内积,对偶问题的内积
x
i
∗
x
j
x_i*x_j
xi∗xj可以替换为特征空间中的内积
ϕ
(
x
i
)
∗
ϕ
(
x
j
)
\phi(x_i)*\phi(x_j)
ϕ(xi)∗ϕ(xj),从而进一步替换为核函数
K
(
x
i
,
x
j
)
K(x_i,x_j)
K(xi,xj)。
- 也就是说,在核函数 K ( x , z ) K(x,z) K(x,z)给定的条件下,可以利用解线性分类问题的方法求解非线性分类问题的支持向量机。学习是隐式地在特征空间进行的,不需要显式地定义特征空间与映射函数。