机器学习算法完整版见fenghaootong-github

SVM

  • Linear Support Vector Machine
  • Dual Support Vector Machine
  • Kernel Support Vector Machine
  • Soft-Margin Support Vector Machine

Linear Support Vector Mahine

对于一个线性分类器,怎么的线性分类器才是最好的呢?

  • 保证它的强壮性(就是可以容忍更多的噪声),就是让离这个分类器最近的点到这个分类器的距离间隔最大,这就是我们接下来要做的事情

  • 首先我们要找到一个分类器可以分割开数据,并且使这个分类器最胖,专业一点表示如下

maxw\max\limits_w fatness(w)fatness(w)
目标是: ww分类器使每个(Xn,ynX_n,y_n)都正确,fatness(ww) = minn=1,...N\min\limits_{n=1,...N} distance(xnx_n,ww)

maxw\max\limits_w margin(w)margin(w)
目标是: 每个ynWTxn>0y_nW^Tx_n>0,margin(ww) = minn=1,...N\min\limits_{n=1,...N} distance(xnx_n,ww)

  • 加上常数项

maxb,w\max\limits_{b,w} margin(b,w)margin(b,w)
目标是: 每个yn(WTxn+b)>0y_n(W^Tx_n+b)>0,margin(b,wb,w) = minn=1,...N1wyn(wTxn+b)\min\limits_{n=1,...N} \frac{1}{||w||}y_n(w^Tx_n+b)

  • minn=1,...Nyn(wTxn+b)=1\min\limits_{n=1,...N} y_n(w^Tx_n+b)=1时候 margin(margin(b,w)=1w)= \frac{1}{||w||}

maxb,w1w\max\limits_{b,w} \frac{1}{||w||}

目标是: 每个yn(WTxn+b)>0y_n(W^Tx_n+b)>0minn=1,...Nyn(wTxn+b)=1\min\limits_{n=1,...N} y_n(w^Tx_n+b)=1

  • 最后的变形,这就是SVM的最初形式

minb,w12wTw\min\limits_{b,w} \frac{1}{2}w^Tw

目标是: 每个yn(WTxn+b)>1y_n(W^Tx_n+b)>1 对所有的n成立

  • 这是一个关于(b,w)(b,w)二次目标函数
  • 约束条件线性
  • 所以可以使用二次规划QP很容易的解决最优化问题

如果不是线性的

  • 可以通过特征转换: zn=Φ(xn)z_n = \Phi(x_n)

SVM和正则化的区别

minimize constraint
regularization EinE_in wTw<=Cw^Tw <= C
SVM wTww^Tw Ein=0E_in=0[any more]

Dual Support Vector Machine

  • 非线性支持向量机

非线性支持向量机

minb,w12wTw\min\limits_{b,w} \frac{1}{2}w^Tw

目标是: 每个yn(WTzn+b)1y_n(W^Tz_n+b)\ge1 对所有的n成立

  • 在解决非线性问题时,二次规划问题有d~+1\widetilde{d} + 1个变量和N个条件
  • 如果d~\widetilde{d}很大,或者无限怎么办?

首先我们用拉格朗日函数去掉限制

L(b,w,α)=12wTw+n=1Nαn(1yn(wTzn+b))\mathcal{L}(b,w,\alpha) = \frac{1}{2}w^Tw + \sum\limits_{n=1}^N\alpha_n(1-y_n(w^Tz_n+b))

SVMminb,w(maxallαn0L(b,w,α))=minb,wSVM \equiv\min\limits_{b,w}(\max\limits_{all \alpha_n\ge0} \mathcal{L}(b,w,\alpha)) = \min\limits_{b,w}($\infty $if violate; $\frac{1}{2} $if feasible)

经过一系列证明,得出强对偶关系

minb,w(maxallαn0L(b,w,α))=maxallαn0(minb,wL(b,w,α))\min\limits_{b,w}(\max\limits_{all \alpha_n\ge0} \mathcal{L}(b,w,\alpha)) = \max\limits_{all \alpha_n\ge0}(\min\limits_{b,w}\mathcal{L}(b,w,\alpha))

maxallαn0(minb,w12wTw+n=1Nαn(1yn(wTzn+b)))\max\limits_{all \alpha_n\ge0} (\min\limits_{b,w} \frac{1}{2}w^Tw + \sum\limits_{n=1}^N\alpha_n(1-y_n(w^Tz_n+b)))

去掉b,wb,w

maxallαn0,ynαn=0,w=αnynzn12n=1Nαnynzn2+n=1αn\max\limits_{all \alpha_n\ge0, \sum y_n\alpha_n=0,w=\sum\alpha_ny_nz_n}-\frac{1}{2}||\sum\limits_{n=1}^N\alpha_ny_nz_n||^2 + \sum\limits_{n=1}\alpha_n

使用KKT条件从最优的α\alpha得出(b,w)(b,w)

primal feasible:yn(WTzn+b)1y_n(W^Tz_n+b)\ge1
dual feasible:αn0\alpha_n\ge0
dual-inner optimal:ynαn=0,w=αnynzn\sum y_n\alpha_n=0,w=\sum\alpha_ny_nz_n
primal-inner optimal:αn(1yn(wTzn+b))=0\alpha_n(1-y_n(w^Tz_n+b))=0

变成标准的对偶形式

minα12n=1Nm=1NαnαmynymZnTzmn=1Nαn\min\limits_\alpha \frac{1}{2}\sum\limits_{n=1}^N\sum\limits_{m=1}^N\alpha_n\alpha_m y_ny_mZ_n^Tz_m - \sum\limits_{n=1}^N\alpha_n

n=1Nynαn=0;\sum\limits_{n=1}^Ny_n\alpha_n = 0;
αn0\alpha_n \ge 0,对于n=1,2,…N

这看起来像是N个变量,N+1个条件
使用QP解决

这时如果N过大的化,也很难解
需要特殊的求解器

想到KKT条件αn(1yn(wTzn+b))=0\alpha_n(1-y_n(w^Tz_n+b))=0

如果αn0\alpha_n \ge0b=ynwTznb=y_n-w^Tz_n
刚好αn>0\alpha_n > 0时,就是在边界上的点(SV)

所以只需要用边界上的点计算w:w=n=1Nαnynzn=SVαnynznw=\sum\limits_{n=1}^N\alpha_ny_nz_n = \sum\limits_{SV}\alpha_ny_nz_n
只需要用边界上的点计算b:b=ynwTznb=y_n-w^Tz_n

原始SVM和对偶SVM比较

变量从d~+1\widetilde{d} + 1到N,使用所有的点
限制条件从N到N+1,仅使用边界上的点

但这时候并没有与d~\widetilde{d}完全脱离关系
qn,mq_{n,m}=ynymznTzm=y_ny_mz_n^Tz_m 仍然是 d~\widetilde{d}维中计算内积

Kernel Support Vector Machine

qn,mq_{n,m}=ynymznTzm=y_ny_mz_n^Tz_m d~\widetilde{d}维中计算内积
**znTzm=ϕ(xn)Tϕ(xm)z_n^Tz_m=\phi(x_n)^T\phi(x_m) **

用二次多项式作为例子

ϕ2(x)=(1,x1,..,xd,x12,...x1xd,x2x1,x22....,x2xd,...,xd2)\phi_2(x) = (1,x_1,..,x_d,x_1^2,...x_1x_d,x_2x_1,x_2^2....,x_2x_d,...,x_d^2)

ϕ2(x)Tϕ2(x)=1+i=1dxixi+i=1dj=1dxixixjxj=1+i=1dxixi+i=1dxixij=1dxjxj=1+xTx+(xTx)(xTx)\phi_2(x)^T\phi_2(x^{'})\\= 1 + \sum\limits_{i=1}^d x_ix_i^{'} + \sum\limits_{i=1}^d\sum\limits_{j=1}^d x_ix_i^{'}x_jx_j^{'}\\=1 + \sum\limits_{i=1}^d x_ix_i^{'} + \sum\limits_{i=1}^dx_ix_i^{'}\sum\limits_{j=1}^d x_jx_j^{'}\\=1+x^Tx^{'} +(x^Tx^{'})(x^Tx^{'})

通过转换可以把复杂度降低O(d2)O(d^2)O(d)O(d)

这就是核函数

Kϕ(x,x)=ϕ(x)Tϕ(x)K_\phi(x,x^{'})=\phi(x)^T\phi(x^{'})
Kϕ2(x,x)=1+xTx+(xTx)(xTx)K_{\phi_2}(x,x^{'})=1+x^Tx^{'} +(x^Tx^{'})(x^Tx^{'})

qn,mq_{n,m}=ynymznTzm=ynymK(xn,xm)=y_ny_mz_n^Tz_m=y_ny_mK(x_n,x_m)

这时候的b,用SVxs,ys)(x_s,y_s)
b=yswTzs=ys(n=1Nαnynzn)T=ysn=1NαnynK(xn,xs)b=y_s-w^Tz_s=y_s-(\sum\limits_{n=1}^N\alpha_ny_nz_n)^T=y_s-\sum\limits_{n=1}^N\alpha_ny_nK(x_n,x_s)

optimal hypothesis gSVMg_{SVM}: test input:x

gSVM=sign(wTϕ(x)+b)=sign(n=1NαnynK(xn,x)+b)g_{SVM}=sign(w^T\phi(x) + b) = sign(\sum\limits_{n=1}^N\alpha_ny_nK(x_n,x)+b)

这时候就与d~\widetilde{d}完全无关了
时间复杂度为O(N2)O(N^2)
仅仅使用SV进行预测

转换成一般的二项式核函数

k2(x,x)=(1+γxTx)2γ>0k_2(x,x^{'})=(1+\gamma x^Tx^{'})^2 \\\gamma>0

一般的多项式核函数
kQ(x,x)=(ζ+γxTx)Qγ>0ζ0k_Q(x,x^{'})=(\zeta+\gamma x^Tx^{'})^Q \\\gamma>0\\\zeta\ge0

高斯核函数(RBF)
k(x,x)=exp(γxx2)γ>0k(x,x^{'})=exp(-\gamma||x-x^{'}||^2) \\\gamma>0

γ\gamma太大,也会过拟合

线性核的优点和缺点

K(x,x)=xTxK(x,x^{'})=x^Tx^{'}

优点:

  • 做什么问题都要从最简单的线性开始
  • 解起来比较快
  • 用W和SVs可以解释所有

缺点

  • 不能解决线性不可分的点

多项式核的优点和 缺点

kQ(x,x)=(ζ+γxTx)Qk_Q(x,x^{'})=(\zeta+\gamma x^Tx^{'})^Q

优点:

  • 比线性的限制少

缺点:

  • 当Q大的时候不容易解
  • 参数多,不宜选择

高斯核优点和缺点

k(x,x)=exp(γxx2)k(x,x^{'})=exp(-\gamma||x-x^{'}||^2)

优点:

  • 比线性和多项式核更有力度
  • 边界点数量少
  • 一个参数,容易选择

缺点:

  • 容易过拟合
  • 比线性核慢

怎么样避免高斯核和其他核的过拟合?

Soft-Margin Support Vector Machine

之前的方法都是Hard-Margin SVM,即所有的样本都正确分类才行,这往往需要更多更复杂的特征转换,甚至造成过拟合。

本节课将介绍一种Soft-Margin SVM,目的是让分类错误的点越少越好,而不是必须将所有点分类正确,也就是允许有noise存在。这种做法很大程度上不会使模型过于复杂,不会造成过拟合,而且分类效果是令人满意的。

把SVM转换成如下形式:

minb,w12wTw+Cn=1N[​[ynsign(wTzn+b)]​]\min_{b,w} \frac{1}{2}w^Tw + C\cdot \sum_{n=1}^{N}[\![y_n \ne sign(w^Tz_n + b)]\!]
对于正确的点 yn(wTzn+b)1 y_n(w^Tz_n + b) \ge 1
对于错误的点 yn(wTzn+b) y_n(w^Tz_n + b) \ge -\infty

两式合并:
minb,w12wTw+Cn=1N[​[ynsign(wTzn+b)]​]\min_{b,w} \frac{1}{2}w^Tw + C\cdot \sum_{n=1}^{N}[\![y_n \ne sign(w^Tz_n + b)]\!]
条件:
yn(wTzn+b)1[​[ynsign(wTzn+b)]​] y_n(w^Tz_n + b) \ge 1 - \infty \cdot [\![y_n \ne sign(w^Tz_n + b)]\!]

上面的式子只是说点是否犯错误,但有的点犯得错误小有的大,上式中并没有区分,通过引入一个ξn\xi_n来表示每个点犯错误的程度值。

minb,w12wTw+Cn=1Nξn\min_{b,w} \frac{1}{2}w^Tw + C\cdot \sum_{n=1}^{N}\xi_n
条件:
yn(wTzn+b)1ξn,ξn0 y_n(w^Tz_n + b) \ge 1 - \xi_n, \xi_n \ge 0

参数C表示尽可能选择宽边界和尽可能不要犯错两者之间的权衡,因为边界宽了,往往犯错误的点会增加。large C表示希望得到更少的分类错误,即不惜选择窄边界也要尽可能把更多点正确分类;small C表示希望得到更宽的边界,即不惜增加错误点个数也要选择更宽的分类边界。

与之对应的QP问题中,由于新的参数 ξn\xi_n 的引入,总共参数个数为 $\hat d+1+N $,限制条件添加了 ξn0\xi_n\geq0 ,则总条件个数为2N。

对偶问题

拉格朗日函数表示为:

L(b,w,ξ,α,β)=12wTw+Cn=1Nξn+n=1Nαn(1ξnyn(wTzn+b))+n=1Nβn(ξn)\mathcal{L}(b,w,\xi,\alpha,\beta) = \frac{1}{2}w^Tw + C\cdot \sum_{n=1}^{N}\xi_n + \sum_{n=1}^{N}\alpha_n(1-\xi_n-y_n(w^Tz_n + b)) + \sum_{n=1}^{N}\beta_n(-\xi_n)

转换成对偶的形式:

maxαn0,βn0(minb,w,ξ12wTw+Cn=1Nξn+n=1Nαn(1ξnyn(wTzn+b))+n=1Nβn(ξn))\max_{\alpha_n\ge 0,\beta_n\ge 0} ( \min_{b,w,\xi} \frac{1}{2}w^Tw + C\cdot \sum_{n=1}^{N}\xi_n + \sum_{n=1}^{N}\alpha_n(1-\xi_n-y_n(w^Tz_n + b)) + \sum_{n=1}^{N}\beta_n(-\xi_n) )

SVM算法经典实例

SVM算法经典实例

posted on 2018-03-07 15:51  一小白  阅读(360)  评论(0编辑  收藏  举报