支持向量机是一种用于分类的算法。如果数据是线性可分的,只需要将直线放置在让点距离平面距离最大的位置,寻找这个最大间隔的过程叫做最优化;如果数据不是线性可分的,需要用核函数改变维度,用超平面做分类……
线性 SVM·
如图,数据显然是线性可分的,这些将它们分类的直线称为 决策面,每个决策面对应一个线性分类器。但是将它们分开的直线显然不止一条。目前 H2 和 H3 的分类效果相同,但如果再增加一个点(在 H2 和 H3之间),就会出现分类错误。
图中虚线的位置由决策面的方向和距离决策面最近的几个样本位置决定,虚线穿过的样本点称为 支持向量,中间的部分是分类间隔。具有最大间隔的决策面就是 SVM 要找的最优解。
数学建模·
- 目标函数:希望使得什么指标最好,即分类间隔
- 优化对象:可以改变的影响因素,即决策面
优化对象(决策面)·
在二维空间中,一条直线可以表示为
ωTx+γ=0
设其中 ω=[ω1,ω2]T,x=[x1,x2]T,ω 是这条直线的法向量,γ 是截距。把二维平面的直线推广到 n 维空间,就得到了超平面方程
ωTx+γ=0
此时的 ω=[ω1,ω2,⋯,ωn]T,x=[x1,x2,⋯,xn]T。
目标函数(分类间隔)·
分类间隔的大小是支持向量的样本点到决策面距离的二倍,二维平面中,点到直线的距离公式是
d=A2+B2Ax0+By0+C
推广到多维
d=∣∣ω∣∣∣ωTx+γ∣
分类间隔 2d越大,表示对应的超平面分类效果越好。
约束条件·
图中有两类点,分别对它们做标记,蓝色的标记为 1,规定为正样本;绿色的标记为 −1,规定为负样本。
yi={+1,Blue−1,Green
如果超平面能对上图样本点正确分类,则有
{ωTxi+γ>0,∀yi=1ωTxi+γ<0,∀yi=−1
再提高一点要求,决策面处于分类间隔的中间,则
⎩⎨⎧∣∣ω∣∣∣ωTxi+γ∣≥d,∀yi=1∣∣ω∣∣∣ωTxi+γ∣≤−d,∀yi=−1
所有标签为 1 的样本到决策面的距离都大于等于 d,标签为 −1 的点到决策面的距离都小于等于 −d.
两边同除 d,得到
{ωdTxi+γd≥1,∀yi=1ωdTxi+γd≤−1,∀yi=−1
其中 ωdT=∣∣ω∣∣dω,γd=∣∣ω∣∣dγ,综合两个式子可以得到一个 约束条件
yi(ωdTxi+γd)≥1,∀[xi,yi]
并且,支持向量满足 yi(ωdTxi+γd)=∣(ωdTxi+γd)∣=1,则目标函数可以简化为
d=∣∣ω∣∣1
于是最大化 d 的问题转化为最小化 ∣∣ω∣∣ 的问题。
最终最优化问题的建模为
min21∣∣ω∣∣2s.t. yi(ωdTxi+γd)≥1,i=1,2,⋯,n
最优化问题·
Lagrange 乘数法·
Lagrange 乘数法
minf(x1,x2,⋯,xn)s.t. hk(x1,x2,⋯,xn)=0,k=1,2,⋯,l
令 L(x,λ)=f(x)+k=1∑lλkhk(x),函数 L 称为 Lagrange 函数,λ 为 Lagrange 乘子
⎩⎨⎧∂xi∂L=0,i=1,2,⋯,n∂λk∂L=0,k=1,2,⋯,l
其中 xi 和 λi 均为优化变量。
上一部分得出的优化问题的约束条件是一个不等式,现在需要引入 松弛变量,将其转化为等式约束条件,同时松弛变量也是一个优化变量。
原优化问题
min21∣∣ω∣∣2s.t. yi(ωdTxi+γd)≥1,i=1,2,⋯,n
设 f(ω)=21∣∣ω∣∣2,gi(ω)=1−yi(ωdTxi+γd),引入松弛变量 ai2,得到新的等式约束条件为 hi(ωi,ai)=gi(ω)+ai2=0
并得到 Lagrange 函数为
L(ω,λ,a)=f(ω)+i=1∑nλihi(ω)=f(ω)+i=1∑nλi[gi(ω)+ai2],λi≥0
联立必要条件的方程得
⎩⎨⎧∂ω∂L∂λi∂L∂ai∂Lλi=∂ω∂f+i=1∑nλi∂ω∂g=0=gi(ω)+ai2=0=2λiai=0≥0
当 λi>0 时,ai=0,则 gi(ω)=0,λigi(ω)=0;当 λi=0 时,λigi(ω)=0,则方程组转化为
⎩⎨⎧∂ω∂L=∂ω∂f+i=1∑nλi∂ω∂g=0λigi(ω)=0λi≥0, gi(ω)≤0
即不等式约束优化问题的 KKT 条件。
目标 min21∣∣ω∣∣2,即 minL(ω,λ,a)
L(ω,λ,a)=f(ω)+i=1∑nλihi(ω)=f(ω)+i=1∑nλi[gi(ω)+ai2]=f(ω)+i=1∑nλigi(ω)+i=1∑nλiai2,λi≥0
其中 i=1∑nλiai2≥0,则目标可以转化为 minL(ω,λ)
L(ω,λ)=f(ω)+i=1∑nλigi(ω)
其中 i=1∑nλigi(ω)≤0,假设 min21∣∣ω∣∣2=p,minL(ω,λ)≤p,现在要找到最优的 λ,使得 L(ω,λ) 接近 p,则问题转化为 λmaxL(ω,λ).
λmaxL(ω,λ)=⎩⎨⎧∞,gi(ω)≥021∣∣ω∣∣2,gi(ω)≤0
min(∞,21∣∣ω∣∣2)=21∣∣ω∣∣2
此时最优化问题转化为
ωminλmaxL(ω,λ)s.t. λi≥0
对偶性·
∀f,有 minmaxf≥maxminf.
最大的里面挑出个最小的比最小的里面的最大的大~
当等号成立时满足 强对偶关系,f 是凸优化问题
minmaxf=maxminf
SVM 最优化流程·
目标函数与约束条件:
ω,γminλmaxL(ω,γ,λ)=21∣∣ω∣∣2+i=1∑nλi[1−yi(ωTxi+γ)]s.t. λi≥0
强对偶性转化:
λmaxω,γminL(ω,γ,λ)
对参数求偏导
∂ω∂L∂γλL=ω−i=1∑nλixiyi=0=−i=1∑nλiyi=0
得到
i=1∑nλixiyii=1∑nλiyi=ω=0
代入到目标函数
L(ω,γ,λ)=21∣∣ω∣∣2+i=1∑nλi[1−yi(ωTxi+γ)]=21i=1∑nj=1∑nλiλjyiyj(xi⋅xj)+i=1∑nλi−i=1∑nj=1∑nλiλjyiyj(xi⋅xj)−γi=1∑nλiyi=i=1∑nλi−21i=1∑nj=1∑nλiλjyiyj(xi⋅xj)
此时最优化问题为
λmax[i=1∑nλi−21i=1∑nj=1∑nλiλjyiyj(xi⋅xj)]s.t. i=1∑nλiyi=0,λi≥0
SMO 算法
由 i=1∑nλiyi=0,选择 λi≥0 和 λj≥0,设 λiyi+λjyj=c,其中 c=−k=i,j∑λkyk,由此得出
λj=yic−λiyi
此时,相当于将问题转化为只有一个约束条件 λi≥0 的最优化问题,之后利用 Lagrange 乘数法求最优解 λ∗ 即可。
再由 ω=i=1∑nλixiyi 可以求得 ω,所有 gi(ω)=0 即 λi>0 的点都是支持向量,找到后带入 yi(ωixi+γ)=1 即可求得 γ,最后就能构造出超平面
ωTx+γ=0
分类决策函数为 f(x)=sign(ωTx+γ)
(sign)(x)=⎩⎨⎧−101,x<0,x=0,x>0
对于验证集的点,带入决策函数即可得到其分类。
未完待续……
参考资料·
- Support vector machine(Wikipeda)
- KKT 条件,原来如此简单 | 理论+算例实践
- Python3《机器学习实战》学习笔记(八):支持向量机原理篇之手撕线性 SVM
- Python3《机器学习实战》学习笔记(九):支持向量机实战篇之再撕非线性 SVM
- 【机器学习】支持向量机 SVM(非常详细)
讨论
评论