斯坦福公开课Machine Learning笔记(五)–Support Vector Machine
这系列笔记其实已经手写好, 现在一次性发上来, 主要是怕丢. 内容以Andrew Ng的讲义为主,主要以公式推导与理解为主,引入和介绍省略.对于最后的Reinforcement Learning部分, 由于没有讲义以及对其实在不熟悉, 就没有笔记了(主要还是因为没有讲义).
1.函数间隔和几何间隔
在二维空间中的数据点,我们可以用一条线来把数据分成两类.但这可能并不是最好的分隔线,因为新的数据可能就在分隔线附近,这样会对预测造成误差.
而每个数据点到分隔线都有一个距离,我们可以通过这个距离来找到最佳的分隔线.
函数间隔:
γ^(i)=y(i)(wTx+b),y(i)∈{1,−1}
γ^=mini=1,2,...,mγ^(i)
但是当w和b成倍数增长时,函数间隔也会变大,但分隔线却没变.而几何间隔就不会.
通过函数间隔计算某个点的几何间隔:
A点在分隔线外,B点在分隔线上,过A点做垂线经过B点.
AB的距离为
γ^(i)
,A点的x为
x(i)
,那么B点的x为:
x(i)−γ^(i)w||w||
∵ B点在分隔线 wTx+b=0 上
∴wT(x(i)−γ^(i)w||w||)+b=0
∴γ^(i)=wTx(i)+b||w||=(w||w||)Tx(i)+b||w||
∴γ^(i)=y(i)((w||w||))T+b||w||)
γ=mini=1,2,...,mγ(i)
可以看到,当
||w||=1
时,函数间隔就等于几何间隔.而无论如何取w和b,都不会影响距离.
那如何通过间隔来找到最佳的分隔线呢?
- 空间中的点分隔开后,点投影到线上,投影肯定是越分散越容易让人分辨,而不是挤在一块.也就是投影的点的方差最大化。
- 还有另外一种理解。当要预测新的x时,如果x点在分割线附近,就很容易产生误差。那么,我们尽量把空间内的数据分隔开,即尽量让所有的点都远离分割线。也就是最大化所有点到分割线的距离。
我们要最大化 γ :
maxγ,w,bγ
y(i)(wTx(i)+b)≥γ,i=1,2,...,m
||w||=1
但是 ||w||=1 会导致非凸集,去掉这个约束:
maxγ,w,bγ||w||
y(i)(wTx(i)+b)≥γ,i=1,2,...,m
||w||=1 是保证函数间隔等于几何间隔, γ=γ^||w||
但 γ^||w|| 不是凸函数,是双曲线,所以通过缩放增加约束: γ^=1
∴γ^||w||=1||w||
∴min12||w||2
y(i)(wTx(i)+b)≥1,i=1,2,...,m
∴ 我们是要最小化 ||w||2 , 加上2次是为了变成2次函数,这是典型的凸函数.
2. Lagrange duality
这里先介绍一下拉格朗日对偶问题.
当我们碰到最优化问题:
minwf(w)
hi(w)=0,i=1,2,...,l
然后使用拉格朗日乘数法:
解出 w 和
现在这里多了一个不等式的约束条件:
minwf(w)
gi(w)≤0,i=1,2,...,k
hi(w)=0,i=1,2,...,l
还是使用拉格朗日乘数法,先定义:
当不满足约束条件,即 gi(w)>0,hi(w)≠0 , 只要增加 αi和βi,θP(w)→∞ .而当满足条件时, θP(w)=f(w)
∴θP(w)={f(w)∞gi(w)≤0,hj(w)=0otherwise
∴minwθP(w)=minwmaxα,β:αi≥0L(w,α,β)
转化为对偶优化问题:
θD(α,β)=minwL(w,α,β)
maxα,β:αi≥0θD(α,β)=maxα,β:αi≥0minwL(w,α,β)
且 d∗=maxα,β:αi≥0minwL(w,α,β)≤minwmaxα,β:αi≥0L(w,α,β)=P∗
当在特定条件下 d∗=P∗ :
f和gi 为凸函数, hi 为仿射函数,类似于 hi(w)=αTiw+b , gi(w)≤0 绝对成立,即 ∃w对∀i gi(w)≤0
满足上面假设后就一定存在 w∗,α∗,β∗ 满足 d∗=P∗ .
同时还满足一下KKT条件:
经常有: α∗i≠0⟺gi(w∗)=0
而当 gi(w)∗=0 ,则成为active constraint
回到前面:
min12||w||2
y(i)(wTx(i)+b)≥1,i=1,2,...,m
改写一下不等式:
gi(w)=−y(i)(wTx(i)+b)+1≤0
当
gi(w)=0
时,函数间隔为1,即:
只有那些靠近分隔线的点的函数间隔为1,其他的点都大于1:
αi=0,gi(w)≤0
.这些函数间隔为1的点称为支持向量,只有他们会影响到分隔线(超平面).
同样适用拉格朗日乘数法:
对于对偶问题:
θD(α,β)=minwL(w,α,β)
∵∇wL(w,α,β)=w−∑mi=1αiy(i)x(i)=0
∴w=∑mi=1αiy(i)x(i)
∵∇bL(w,b,α)=−∑mi=1αiy(i)=0
∴∑mi=1αiy(i)=0
把 w=∑mi=1αiy(i)x(i) 和 ∑mi=1αiy(i)=0 带入 L(w,b,α)
∴L(w,b,α)=∑i=1mαi−12∑mi=1∑mj=1y(i)y(j)αiαj<xi,xj>
∵maxα,β:αi≥0θD(α,β)=maxα,β:αi≥0minL(w,α,β)
∴maxαW(α)=∑mi=1αi−12∑mi=1∑mj=1y(i)y(j)αiαj<xi,xj>
αi≥0,i=1,2,...,m
∑mi=1αiy(i)=0
通过KKT条件来求解,用对偶问题代替原始问题.
而
b=maxi:y(i)=−1w∗Tx(i)+mini:y(i)=1w∗Tx(i)2
也就是当确定w后,平移超平面,平移到最佳位置即可.
当求出w和b后,可以对新数据点进行分类了.
wTx+b=(∑i=1mαiy(i)x(i))Tx+b=∑i=1mαiy(i)<x(i),x>+b
如果每次把训练集遍历一边会很慢,但其实大部分
αi=0
,只有少数
αi≠0
的支持向量.后面还会介绍kernel来计算x的内积.
Kernels
对于kernel的个人理解是:当数据在低维线性不可分时,把数据映射到更高维的空间,让其线性可分.
定义kernel函数:
K(x,z)=ϕ(x)Tϕ(z)
代替
<ϕ(x),ϕ(z)>
<script type="math/tex" id="MathJax-Element-3017"><\phi(x),\phi(z)></script>
Ng举了个例子:
x,z∈Rn
K(x,z)=(xTz)2 =(∑i=1nxizi)(∑j=1nxjzj) =∑i=1n∑j=1nxixjzizi =∑i,j=1n(xixj)(zizj)
假设
n=3
ϕ(x)=⎡⎣⎢⎢x1x1⋮x3x3⎤⎦⎥⎥
这样直接计算
ϕ(x)Tϕ(z)
的复杂度为
O(n2)
,而计算Kernel函数的复杂度为
O(n)
.
推广到加上常数项:
K(x,z)=(xTz+c)2=∑ni,j=1(xixj)(zizj)+∑ni=1(2c−−√xi)(2c−−√zi)+c2
继续推广:
K(x,z)=(xTz+c)d→(n+dd)
特征空间
但是复杂度从
O(nd)→O(n)
我们上面找到了
ϕ
,但是我们并不在意
ϕ
.
Gaussian kernel
K(x,z)=exp(||x−z||22σ2)
其中
σ
的取值并不影响.这个函数是个无限维的映射.
那如何确定某个函数是否可以作为kernel函数呢?
如果要找到
ϕ
来确定kernel,但是
ϕ
并不好找.
我们先定义一个kernel矩阵:
Kij=K(x(i),x(j))
如果
kij
是kernel函数,可以证明
kij
是个半正定矩阵.维基百科对半正定矩阵的定义
证:
这里证明了只要 K 是个kernel函数,那么k矩阵一定是半正定矩阵,通过Mercer’s theorem,其实这是个充要条件.
Regularization and non-separable case
当数据集中异常点时,我们不可能为了这些异常点而改变超平面.那么如何忽略这些点呢?
我们可以加入优化,正则化.
y(i)(wTx(i)+b)≥1−ξi
ξi≥0,i=1,2,...,m
加入正则的理解其实就是让某些点的函数间隔可以小于1.
那么,其对偶问题:
maxαW(α)=∑mi=1αi−12∑mi,j=1y(i)y(j)αiαj<x(i),x(j)>
0≤αi≤c
∑mi=1αiy(i)=0
和之前相比, αi的取值变为了0≤αi≤c
当 αi=0时,⟹y(i)(wTx(i)+b)≥1
当 αi=c时,⟹y(i)(wTx(i)+b)≤1
当 0<αi<c时,⟹y(i)(wTx(i)+b)=1 .
The SMO algorithm
在求解最大或者最小值问题时,经常会使用坐标上升(下降)法.Coordinate ascent(descent):
Loop until convergence{
for i = 1 to m{
αi:=argmaxαi^W(α1,...,αi,...,αm)
}
}
不停迭代,每次只改变某一维度来最优化.
把几个最优化算法比较一下:
- 牛顿法:收敛快,但是每次计算代价大
- 坐标上升(下降):收敛慢,计算代价小
- 梯度下降:不适合高纬度.
而对于如何求解对偶问题,如果要使用坐标上升法,只改变一个
α
值,就无法保证在
∑mi=1αiy(i)=0
,在固定其他
α
时,
α1
也是固定的.
所以我们可以改变2个变量:
α1y(1)+α2y(2)=−∑mi=1αiy(i)=ξ
把 α1=(ξ−α2y(2))y(1) 代入 W(α) 中得到关于 α2 的二次函数,然后最优化求解.这里要注意约束条件.