SVM算法其实不难主要是思路不好整理。本篇博客的资料来源于西瓜书,邹博,白板书笔记三处。具体的理论背景就不做具体介绍了,直接上公式。
SVM这章的内容主要打算分为三块:
第一部分:硬间隔
知识点一:从单边Margin开始讲起:
SVM的目标就是找到一个划分超平面把两类数据划分开来,通过下面这张图可以发现这样的超平面有非常多,但是凭直觉发现粗的那跟线(超平面)划分效果最好。
补充:超平面的公式??
单边margin的计算:【即,点到直线距离公式】
公式描述:
公式中的直线方程为Ax+By+C=0,点P的坐标为(x0,y0)。
d=∣∣∣∣A2+B2Ax0+By0+C∣∣∣∣
根据点到直线的距离,每一类样本中的所有样本点到直线的距离为:
margin=r=∥w∥∣∣wTxi+b∣∣
将上述最小的值(min)作为单侧的 margin
双侧margin的计算
margin=2×w,b,ximin∥w∥∣∣wTxi+b∣∣
注1:刚开始学总以为单侧margin可以取到0,实际上这里漏加了一个条件。设置标签yi∈{−1,+1}
{wTxi+b>0wTxi+b<0yi=+1yi=−1
加入了这个条件后,保证了分类一定正确。
注2:这里的y的标签一定为{+1,-1} ?
答:否,y只是一个标签而已,可以为其余值,只需要满足上式的分类准则而已。但是这里取1,确实为了计算方便,见下面如何去掉绝对值的过程,就能体会到y为啥取正负1
去除margin中的绝对值
根据注1可以推导出,条件满足于yi(wTxi+b)≥0,yi与(wTxi+b)同号
margin=2×w,b,ximin∥w∥∣∣wTxi+b∣∣=2×w,b,ximin∥w∥yi(wTxi+b)
决策函数:让这个margin最大
maxw,b∥w∥12×minxi,yiyi(wTxi+b) s.t. yi(wTxi+b)>0,i=1,…,m
关键难点:让单边margin强制为1,则条件也跟着变,条件取等号代表分界线过支持向量
yi(wTxi+b)>0⇒∃γ>0, s.t. min yi(wTxi+b)=γ
令γ=1:
s.t. min yi(wTxi+b)=γ⇒yi(wTxi+b)≥1,i=1,…,N
上述可以这样做的原因:
- yi是标签,之前已经讲过了这是一个无意义的值,可大可小
- yi(wTx+b)没有物理意义,需要除以∥w∥才是模
- 设置为1,首先保证yi(wTx+b)一定不为0,即肯定存在margin(类似于高数中的极小值,无论有多小,但是总是存在一个值,这里的γ也是起的这个作用。)【因为点到直线的绝对距离在每次做SVM中都不一样,有点类似于归一化的味道,归一化点到直线的最小距离为1这个标准。】
- yi(wTx+b)的取值除了取决于x,y还取决于w,相当于对∥w∥做出了约束。
综上上述条件可以变为:
maxw,b∥w∥2 s.t. yi(wTxi+b)≥1,i=1,2,…,m
进一步可以简化为:
minw,b21∥w∥2s.t.yi(wTxi+b)≥1,i=1,2,…,m
知识点二:对偶问题(dual problem)
凸二次规划问题:
- 上述的基本目标函数是二次的,约束条件是线性的,这是一个
凸二次规划
问题
-
当目标函数和约束条件都为变量的线性函数
– 线性规划问题
-
当目标函数为:变量的二次函数
;当约束条件为:变量的线性函数
– 二次规划问题
-
当目标函数和约束条件都为非线性函数
– 非线性规划问题
不等式条件约束转换为拉格朗日函数:
L(w,b,α)=21∥w∥2+i=1∑mαi(1−yi(wTxi+b))s.t.αi≥0
构造出拉格朗日函数之后,与原问题的联系【让上式中右项为0】:
f(x)=21∥w∥2=αmaxL(w,b,α)
则目标函数则变为:
w,bmin21∥w∥2=w,bminαmaxL(w,b,α)
参考文章: https://www.cnblogs.com/ooon/p/5723725.html
根据两个补充知识点一、二(本节最后) 可得对偶条件:
w,bminαmaxL(w,b,α)⇔αmaxw,bminL(w,b,α)s.t.αi≥0
⭐️插入KKT条件:
L(x,α,β)=f(x)+i=1∑mαihi(x)+j=1∑nβigi(x)
∇xL(x,α,β)βjgj(x)hi(x)gj(x)βj=0=0,j=1,2,…,n=0,i=1,2,…,m≤0,j=1,2,…,n≥0,j=1,2,…,n
介绍KKT条件比较好的博客:https://www.cnblogs.com/ooon/p/5721119.html
根据KKT第一个结论可有:
w,bminL(w,b,α) → ∇w/∇bL(w,b,λ)=0
求导后可得:
w^=0=i=1∑nαiyixii=1∑nαiyi
将w^代入拉格朗日条件:
L(w,b,x)===21∥w∥2+i=1∑nαi(1−yi(wTxi+b))21i,j=1∑nαiαjyiyjxiTxj+i=1∑nαi−i=1∑nαiyi(i=1∑nαiyixiTxj)−i=1∑nαiyib−21i,j=1∑nαiαjyiyjxiTxj+i=1∑nαi
求b^ :【根据SVM最大间隔分界线可得】
yi(wTxi+b)−1=0yiyi(wTxi+b)−yi=0b^=yi−wTxi
其实这里省略了很多能内容,为啥子b是在最大间隔分界上求到的b,因为根据KKT的松弛互补条件,可知只有在分界线上拉格朗日乘子αi才有可能大于0,分界线外的样本对建模无意义,所以b^必满足与等式yi(wTxi+b)−1=0,在正则化那章有过更为详细的分析,见下。
⭕️综上整理可得:
- 第一步:根据SVM天生满足极大极小充要于极小极大条件。故第一步先 ⇒minw,b
- 第二步:求偏导等于0:
w^=b^=i=1∑nαiyixiyi−wTxi
- 第三步:将w^可以代入拉格朗日方程可得,对偶问题【dual problem】
L(w,b,x)=−21i,j=1∑nαiαjyiyjxiTxj+i=1∑nαis.t.i=1∑nαiyi=0,αi≥0,i=1,2,…,n
f(x)=wTx+b=i=1∑mαiyixiTx+b
补充条件
补充1:KKT(互补松弛条件)【slackness complementory】
这是不等式的条件约束问题化为无条件约束问题。
-
当(1−yi(wTxi+b)≤0时,则maxα αi(1−yi(wTxi+b)=0 ⇒minw,bL=21∥w∥2
-
当(1−yi(wTxi+b)>0时,则maxα αi(1−yi(wTxi+b)→+∞ ⇒再求最小值无意义。
故经过上述分析,可以得若要满足上述,天然满足1这个条件。
补充2:对偶问题【极大极小值互换】
这里若要讲清楚还是比较有困难的。对偶关系分为两类,强对偶关系以及弱对偶关系。
-
弱对偶关系【简单记忆:鸡头凤尾】
min max L(w,b,α)≥max min L(w,b,α)
-
强对偶关系:若等号存在,则为强对偶。【SVM 天生满足强对偶条件】
故这里极小极大等价于极大极小。
第二部分:软间隔与正则化问题
允许分类存在一点点的错误
Loss函数的设计
- 把分类错误的个数作为损失函数
Loss=i=1∑NI{yi(wTxi+b)<1}
令z=yi(wTxi+b)<1作为分类正确,则计数为1,损失函数显见为 0-1损失,这是一个非凸的函数,在求解的过程中,存在很多的不足,通常在实际的使用中将0-1损失函数作为一个标准 。
然而,l0/1非凸、非连续、数学性质不好,不容易直接求解,于是用其余的函数来替代l0/1,称为“替代损失”(surrogate loss)。替代损失函数具有较好的额数学性质,通常凸的连续函数且是l0/1的上界。西瓜书提供了三种常用的替代损失函数:
-
Loss:hinge损失函数(见上图)
根据距离的远近设置损失函数。
{yi(wTxi+b)≥1yi(wTxi+b)<1Loss=0Loss=1−yi(wTxi+b)
可以发现上面的公式,就是hinge损失嘛!
Loss=max{0,1−yi(wTxi+b}
- 其余两个替代损失函数:
- 指数损失(exponential loss):ℓexp(z)=exp(−z)
- 对数损失(logistic loss):ℓlog(z)=log(1+exp(−z))
正则化公式:
若采用的是hinge损失:
min21wTw+C⋅loss=min21wTw+C⋅i=1∑nmax{0,1−yi(wTxi+b}
一般我们不用上述合页损失的公式。
令ξi=1−yi(wTxi+b),故可有ξi≥0
最终可以推出:
⇒min21wTw+Ci=1∑nξ(i)s.t.yi(wTxi+b)≥1−ξ(i),i=1,2,…,ns.t. ξi≥0
拉格朗日乘子法:
L(w,b,α,ξ,μ)=21∥w∥2+Ci=1∑mξi+i=1∑mαi(1−ξi−yi(wTxi+b))−i=1∑mμiξi
其中,αi≥0,μi≥0是拉格朗日乘子。
直接求偏导:
w0C=i=1∑mαiyixi=i=1∑mαiyi=αi+μi
得对偶问题(dual problem):
maxα s.t. ∑i=1mαi−21∑i=1m∑j=1mαiαjyiyjxiTxj∑i=1mαiyi=00⩽αi⩽C,i=1,2,…,m
与硬间隔的区别是对偶变量的约束不同:前者0⩽αi⩽C,后者是0⩽αi
KKT条件:
⎩⎪⎪⎨⎪⎪⎧C⩾αi⩾0,μi⩾0yif(xi)−1+ξi⩾0αi(yif(xi)−1+ξi)=0ξi⩾0,μiξi=0
根据之前已经得到的公式:
f(x)=wTx+b=i=1∑mαiyixiTx+b
模型取决于w,进一步取决于αi
可以经过以下四种分析:
-
当αi=0时,yif(xi)−1+ξi可等于零,也可以大于0。说明:边界外的样本权重必为零,即对模型没有影响。
-
当αi>0时,yif(xi)−1+ξi必为零,说明边界上的权重不为零,即模型建模主要却决与支持向量。
-
当αi=C时,则μi必为零【根据公式:C=αi+μi】,则ξi取值任意。
- ξi>1:错误分类
- ξi⩽1:样本落在最大间隔的内部。
-
当αi<C时,μi必大于零【根据公式:C=αi+μi】,进一步必有ξi=0。即样本就在最大分类边界上。
总结对于支持向量的结论:
- 支持向量⇒ ξi=0,yif(xi)−1+ξi=0⇒ 错误分类为0
- 很明显的看的出,C值越大,αi可取的值越大,即建模的时候越看重支持向量,即越不能分错。
对于惩罚数C值的讨论:
- C 趋近与无穷大 , 只需要 min 右边的惩罚项式子(即,新增损失项)就可以让整个式子非常小。【极限:硬分类】
- C 趋近与0,相当于无论我怎么犯错,右项都可以很小,那我只要负责左项最小即可,但是注意条件,相当于比起之前,扩展了margin区域,而这种扩展后带来的错误又可以被忽略,也就是强行不管有没有错,我就是要扩展,没人来约束我。【极限:软分类】
现在的问题就是,假设C=0,这种margin扩展,就是在之前的边界上平行远离吗?
相关博客:https://blog.csdn.net/lin_limin/article/details/81135754
为什么不用对数损失函数去替代损失函数?
若使用对率损失函数来替代0/1损失,几乎可以得到对率回归模型(Logisitc回归)
其优点:
1. 输出具有自然概率意义。
2. 可用于处理多分类任务
而SVM的输出不具备概率意义且多分类任务需要推广。对率损失是光滑的单调递减函数,SVM的解要求具有稀疏性,hinge有一块平坦的区域可以满足这个条件。而若需要用对率回归则需要更多的训练样本,开销大【这部分理解的不是很好,但是是西瓜书的内容,就记在这把!】
【我对这句话的理解】:
对hinge损失求导,一定是一个常数。而对sigmoid求导,则是一系列连续值。
L(w,b,α,ξ,μ)=21∥w∥2+Ci=1∑mξi+i=1∑mαi(1−ξi−yi(wTxi+b))−i=1∑mμiξi
∇ξ(i)L=C−αi−μi=0
第三部分 高斯核函数
核函数的意义:
将相近的点映射到一个空间,将远的点分到另一个空间
核函数的诀窍在于解决了映射后高维空间中样本距离∥Φ(xi)−Φ(xj)∥的计算,但又不显式地展示出映射函数Φ(⋅)。
通常表示为:
κ(x1,x2)=<Φ(x1),Φ(x2)>
从而有:
∥Φ(xi)−Φ(xj)∥2=<Φ(x1)−Φ(x2),Φ(x1)−Φ(x2)>=<Φ(x1),Φ(x1)>−2<Φ(x1),Φ(x2)>+<Φ(x2),Φ(x2)>=κ(x1,x1)−2κ(x1,x2)+κ(x2,x2)
高斯核函数将原始特征空间映射成了无限维空间
多项式核
取κ(x,z)=<x,z>2,这里x=(x1,x2),z=(z1,z2)T∈R2故有;
κ(x,z)=<x,z>2=(x1z1+x2z2)2=(x1z1)2+2x1x2z1z2+(x2z2)2
取Φ(x)=(x12,x1x2,x22).则有成κ(x,z)=<Φ(x),Φ(z)>成立。也就是说此时映射函数将二维特征空间(x1x2)映射成了三维空间⎝⎛x12x1x2x22⎠⎞ Φ:R2→R3。
高斯核
κ(x,z)=exp(−2σ2∥x−z∥2)
指数泰勒展开:
ex=1+1!x+2!x2+3!x3+…=n=0∑∞n!xn
根据泰勒级数,展开高斯核:
κ(x,z)=exp(−2σ2∥x−z∥2)=exp[−2σ21<x−z,x−z>]=exp[−2σ21(∥x∥2+∥z∥2−2xTz)]=exp(γ∥x∥2)∗exp(γ∥z∥2)∗exp(−2γxTz),γ=−2σ21
其中指数部分根据泰勒展开:
exp(γ∥x∥2)=n=0∑∞n!(γ∥x∥2)n=n=0∑∞n!γn(x12+x22+…xk2)n,x=(x1,x2⋯xk)T
K 是有限数,指数可以映射为无限维空间。
也就是说,exp(γ∥x∥2)含有了无穷多项的多项式,对应的映射函数Φ(⋅)将k维空间映射成了无限维空间,即::Φ:Rk→R∞。
σ的理解
区分:γ
γ=−2σ21
σ→0,−2σ2∥x−z∥2→−∞,κ(x,z)→0
∣Φ(x)−Φ(z)∣2=κ(x,x)−2κ(x,z)+κ(z,z)=2−2κ(x,z)=2
两个相同的点高斯核为1,不同点的高斯核为0,推出不同的点映射后距离都为2,故不存在聚类,自成一类。
σ→∞,−2σ2∥x−z∥2→0,κ(x,z)→1
∣Φ(x)−Φ(z)∣2=κ(x,x)−2κ(x,z)+κ(z,z)=2−2κ(x,z)=0
不同点的高斯核为1,推出:不同点映射后得距离都为0,故聚类为一点。
综上: 参数σ越小,分的类别会越细,也就是说越容易导致过拟合;参数σ越大,分的类别会越粗,导致无法将数据区分开来。
这部分内容来源于:https://blog.csdn.net/lin_limin/article/details/81135754
第四部分:二分类判别扩展成多分类
SVM多分类的判别是基于二分类的基础上的。
拆分策略:
-
One vs one : N(N-1)/2 【投票】
-
One vs Rest: N 【结果比对:一正余负】
说明:当类别N很大,尽管one vs one 需要训练的分类器多,但是每次训练的时候,只需要把两个类别的训练数据取出来生成模型。判断的时候将单个样本的数据输入训练好的分类器进行**投票。**故反而比OvR速度要快很多。
识别率上面: 要看样本而定,基本差不多。
- Many vs Many
缺点:上面两个决策思路,正类总是只是一个分类。而 MvM 的思路上将 OvR 再进行扩展将多个分类视作正类
核心:编码思想引入类别拆分。
注意观察:测试示例与C3进行比较,发现f2分类器分类错了,但是最后欧氏距离依然最小。则说明MvM有一丝的容错性。
特点:
-
码长越长,需要训练的分类器就越多,纠错能力更强。(但太长,就失去意义了因为组合数目是有限的)
我的理解:在上例中,一共只有四个类别。而编码方式只有0000(十进制:10)-1111(十进制:15)种组合,故这里极限是训练16个分类器。
-
纠错能力好,但是可能导致的问题就是训练的难度比较大。因为不同的划分类别子集的区分性不同。最终的模型性能谁强谁弱没有最后的结果。