Logistic 回归中,只要判定边界可以正确地分类所有训练样本,则优化过程就会停止,因为这时损失函数已经达到最低。
SVM 算法对于这类线性可分问题,不仅要正确的划分,还要找到所有的正确划分里最优的那个。
何为最优?
能最大化两个类别之间的间隔就是最优。换句话说,以一条决策边界为中心线,对其两边做平行线,使得这两条平行线分别经过两边最近的样本点,则这两条平行线会形成一条”街道“,最优的决策边界就是使得这条”接到“最宽的那个决策边界
SVM 通过最大化决策边界和最近训练样本之间的距离来增强模型的泛化能力。
算法推导
前面我们知道存在一条最宽的”街道“使得模型最优,接下来就是要求出这个最优的决策边界
假设如下街中心线为要求的决策边界,街宽为 width,作街中心线的法向量 w
总是可以取法向量 w 的一个合适的长度,以及一个合适的常量 b,使得在训练集中:
{w⋅u++b⩾1w⋅u−+b⩽−1
其中,u+ 是正样本,,u− 是负 样本,若正样本的 yi 为 1,负样本的 yi 为 −1,则上式可以合并为:
yi(w⋅ui+b)⩾1,∀i
街边的点则满足:
yi(w⋅ui+b)=1
对于直线 l:Ax+By+C=0,法向量为 (A,B)
街边的点对于决定决策边界起决定作用,也被称为 支持向量(Support Vector)
由向量减法的几何意义可得:
width=(u+−u−)⋅∥w∥w=∥w∥u+∙w−∥w∥u−∙w=∥w∥1−b−∥w∥−1−b=∥w∥2
因为要求最大街宽,则优化目标是:
max(∥w∥2)⇒min(∥w∥)⇒min(21∥w∥2)
根据前面的条件,最终得到问题是:
{min(21∣∣w∣∣2)s.t.yi(x⋅w+b)−1≥0,∀i
可以看出这是一个很典型的条件极值问题,可以用拉格朗日乘数法来求解,假设有 m 个样本,拉格朗日函数为:
L=21w2−i=1∑mβi[yi(x⋅w+b)−1](βi≥0)
根据KKT条件,上述的拉格朗日函数求解问题变为:
β≥0maxw,bminL(w,b,β)
什么是 KKT 条件?
在优化理论中,特别是涉及约束优化问题时,Karush-Kuhn-Tucker (KKT) 条件是非常关键的一组必要条件,用于确定一个问题的最优解
KKT条件由以下几个部分组成:
-
Stationarity(稳定性):
- 拉格朗日函数 L(w,b,β) 对决策变量 w 和 b 的偏导数应等于零。
∇wL=0,∂b∂L=0
-
Primal feasibility(原始可行性):
- 原始问题的所有约束必须被满足。
yi(wTxi+b)≥1,∀i
-
Dual feasibility(对偶可行性):
- 所有拉格朗日乘数 βi 必须非负。
βi≥0,∀i
-
Complementary slackness(互补松弛性):
- 每个约束的拉格朗日乘数和该约束的等式部分的乘积必须为零。
βi[yi(wTxi+b)−1]=0,∀i
对 w,b 的偏导数为0,可以得到以下两个条件:
∂w∂L=0⟹w−i=1∑mβiy(i)x(i)=0⟹w=i=1∑mβiy(i)x(i)∂b∂L=0⟹−i=1∑mβiy(i)=0⟹i=1∑mβiy(i)=0
带入优化函数 L 中,得:
{ℓ(β)=∑i=1mβi−21∑i=1,j=1mβiβjy(i)y(j)x(i)Tx(j)s.t.∑i=1mβiy(i)=0,βi≥0,i=1,2,...,m
其中,βi>0 对应的 xi 是支持向量,因为如果 βi=0 表示该样本对于求极值没有约束,则不是支持向量。
ℓ(β) 具体计算公式
ℓ(β)=21∥w∥22+i=1∑mβi[1−y(i)(wTx(i)+b)]=21∥w∥22−i=1∑mβi[y(i)(wTx(i)+b)−1]=21wTw−i=1∑mβiy(i)wTx(i)−i=1∑mβiy(i)b+i=1∑mβi=21wTi=1∑mβiy(i)x(i)−wTi=1∑mβiy(i)x(i)−bi=1∑mβiy(i)+i=1∑mβi=−21wTi=1∑mβiy(i)x(i)+i=1∑mβi=−21(j=1∑mβjy(j)x(j))T(i=1∑mβiy(i)x(i))+i=1∑mβi=−21j=1∑mβjy(j)x(j)Ti=1∑mβiy(i)x(i)+i=1∑mβi=i=1∑mβi−21i=1∑mj=1∑mβiβjy(i)y(j)x(j)Tx(i)
通过对 w,b 极小化后,得到的最终函数只跟 β 相关,此时直接极大化优化函数,得到 β 的值(使用SMO算法求解),即可得到最终的 w,b 值
对以上的步骤进行总结,即对于线性可分的 m 个样本数据 {(x(1),y(1)),(x(2),y(2)),...,(x(m),y(m))},其中 x 为 n 维的特征向量,y 是二元输出,取值为 1 或者 −1 ,使用 SVM 算法流程如下:
-
构造约束优化条件
{minβ≥021∑i=1,j=1mβiβjy(i)y(j)x(i)Tx(j)−∑i=1mβis.t:∑i=1mβiy(i)=0
-
使用 SMO 算法求出上式优化中对应的最优解 β∗
-
找出所有的支持向量集合 S:
S={(x(i),y(i))∣βi>0,i=1,2,...,m}
-
更新参数 w∗,b∗ 的值:
w∗=i=1∑mβi∗y(i)x(i)b∗=S1s=1∑S(ys−i=1∑mβi∗y(i)x(i)Txs)
-
构建最终的分类器:
f(x)=sign(w∗∙x+b∗)
sign() 函数图像如下
线性可分
前面的模型推导都是基于数据集是线性可分的。这里来补充几个概念:
- 线性可分(Linearly Separable):在数据集中,如果可以找出一个超平面,将两组数据分开,那么这个数据集叫做线性可分数据
- 线性不可分(Linear Inseparable):在数据集中,没法找出一个超平面,能够将两组数据分开,那么这个数据集就叫做线性不可分数据
- 分割超平面(Separating Hyperplane):将数据集分割开来的直线/平面叫做分割超平面
- 支持向量(Support Vector):离分割超平面最近的那些点叫做支持向量
- 间隔(Margin):支持向量数据点到分割超平面的距离称为间隔
线性可分 SVM 要求数据必须是线性可分的,但是数据可不是我们想如何就如何,往往会存在个别异常点,而这些异常点则会导致数据不可分。
如下面这张图,大部分数据都是线性可分,存在两个异常点导致不能直接分类,这样子是很亏的,这时可以通过引入软间隔来解决
硬间隔
在讲软间隔之前,先来讲讲硬间隔
-
线性划分 SVM 中的距离度量就是硬间隔
-
线性划分 SVM 中,要求函数距离必须大于1
-
最大化 硬间隔条件为
{minw,b21∥w∥22;s.ty(i)(wTx(i)+b)≥1,i=1,2,...,m
硬间隔就是前面推导的那一堆。
软间隔
再来讲讲软间隔:
松弛因子(ξ)越大,表示样本点离超平面越近,如果松弛因子大于1,表示允许该样本点分错,所以说加入松弛因子是有成本的,过大的松弛因子可能会导致模型分类错误,所以最终的目标函数就转换成为:
w,bmin21∥w∥22+Ci=1∑mξis.t:y(i)(wTx(i)+b)≥1−ξi,i=1,2,...,mξi≥0,i=1,2,...,m
-
函数中的 C>0 是惩罚参数,是一个超参数,类似 L1/L2 norm 参数
-
C 越大表示对误分类的惩罚越大,也就是越不允许存在分错的样本
-
C 越小表示对误分类的惩罚越小,也就是表示允许更多的分错样本存在
-
C值的给定需要调参
软间隔模型算法流程:
-
选择一个惩罚系数 C>0,构造约束优化问题
min21i=1,j=1∑mβiβjy(i)y(j)x(i)Tx(j)−i=1∑mβis.t:i=1∑mβiy(i)=0,0≤βi≤C,i=1,2,...,m
-
使用 SMO 算法求出上式优化中对应的最优解 β∗
-
找出所有的支持向量集合 S:
S={(x(i),y(i))∣0<βi<C,i=1,2,...,m}
-
更新参数 w∗,b∗ 的值:
w∗=i=1∑mβi∗y(i)x(i)b∗=S1s=1∑S(ys−i=1∑mβi∗y(i)x(i)Txs)
-
构建最终的分类器:
f(x)=sign(w∗∙x+b∗)
软间隔模型优点:
- 提供一种处理现实世界数据中常见的杂乱无章或异常情况的方式
- 引入惩罚项系数(松弛因子),增加模型的泛化能力,即鲁棒性;
非线性可分
对于非线性可分的数据,可以将低纬度的数据映射到高纬度,从而可以使用线性可分的方法来解决问题。
比如使用多项式扩展,将二维空间中不是线性可分的数据,映射到高维空间中线性可分的数据。
如一个二维线性模型:
hθ(x1,x2)=θ0+θ1x1+θ2x2(x1,x2)多项式扩展(x1,x2,x12,x22,x1x2)
扩展后变为五维线性模型:
hθ(x1,x2)=θ0+θ1x1+θ2x2+θ3x12+θ4x22+θ5x1x2等价hθ(x1,x2)=θ0+θ1z1+θ2z2+θ3z3+θ4z4+θ5z5
映射到高维空间后,数据就变为线性可分,可以使用线性可分 SVM 模型或者 软间隔来处理
定义一个从低维特征空间到高维特征空间的映射函数 ϕ,则非线性可分 SVM 的优化目标函数为:
⎩⎨⎧min21i=1,j=1∑mβiβjy(i)y(j)ϕ(x(i))∙ϕ(x(j))−i=1∑mβis.t:i=1∑mβiy(i)=0,0≤βi≤C,i=1,2,...,m
与前面的目标函数相比,只需要将低维空间中的两个向量点积转为高维向量两个向量点积即可
但是这样有个问题,高纬度的计算呈现爆炸增长,如果原始空间是 n 维,仅仅二阶多项式的扩展就会得到 2n(n+3) 的新空间,计算量太大,这时就有了一个好东西——核函数
核函数
假设函数 ϕ 是一个从低维特 征空间到高维特征空间的一个映射,那么如果存在函数 K(x,z),对于任意的低维特征向量 x 和 z,都有:
K(x,z)=ϕ(x)∙ϕ(z)
则函数 K(x,z) 称为核函数(Kernal Function)
核函数允许我们在不实际计算映射后的新特征空间中的点的坐标的情况下,计算数据点在高维空间中的点积。这种方法被称为“核技巧”(kernel trick),它极大地简化了计算过程,因为直接在高维空间中操作通常是不切实际的,尤其是当映射空间的维数非常高甚至是无限的时候。
举个例子,有如下数据,并进行二阶多项式扩展:
计算内积,可以看出
- 高维的计算量为:11次乘法+4次加法;
- 近似计算的计算量为:3次乘法+2次加法;
- 加系数后的近似计算的计算量为:4次乘法+2次加法;