博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
机器学习技法(林轩田)学习笔记:Lecture 3 & Lecture 4
阅读量:5309 次
发布时间:2019-06-14

本文共 5342 字,大约阅读时间需要 17 分钟。

Lecture 3:Kernel Support Vector Machine

Kernel Trick

回顾Lecture 2中SVM的拉格朗日对偶问题:

669611-20180727104436175-767422932.png

对偶问题中,有n个变量需要求解,n个不等式约束条件和1个等式约束条件

整个问题只有在计算\(q_{n,m}\)时与\(\tilde d\)有联系:计算\(z_n,z_m\)的内积的时间复杂度是\(O(\tilde d)\)的,另外,在求解该对偶问题前,\(z_i\)都需要通过特征变换\(z_i=\Phi(x_i)\)来得到

为了彻底摆脱对\(\tilde d\)的联系,就要用到核技巧(kernel trick)了

首先看一个例子:特征变换\(\Phi(x)\)把原始特征\(x\)映射到二阶的\(z\)

669611-20180727104950688-228946060.png

(为了方便表示,把诸如x1x2和x2x1这样的两项都拆开写了)

\(x\)是d维的,\(z=\Phi_2(x)\)\(d^2+1\)维的,直接计算两个\(z_1,z_2\)的内积,时间复杂度是\(O(d^2)\)

我们把\(\Phi_2(x)^T\Phi_2(x')\)展开:

669611-20180727105346676-1734462094.png

如果我们跳过计算\(\Phi_2(x),\Phi_2(x')\),以及\(\Phi_2(x)^T\Phi_2(x')\),而是直接计算最后的\(x^Tx'\),时间复杂度就降到了\(O(d)\)

我们定义特征变换\(\Phi_2\)对应的核函数

\[K_{\Phi_2}(x,x')=1+x^Tx'+(x^Tx')(x^Tx')=\Phi_2(x)^T\Phi_2(x')\]

使用简单的核函数代替内积,就可以让这一过程的时间复杂度与\(\tilde d\)无关了

669611-20180727133208286-792255937.png

类似地,我们把b和\(g(x)\)中的w表示成\(\sum_{n=1}^N\alpha_ny_nz_n\),然后用核函数代替其中\(z_n,z_s\)的内积,如上图。这样就能让计算内积的过程与\(\Phi,z,\tilde d\)无关了

669611-20180727131218312-197025545.png

使用核技巧后,之前的SVM算法流程如上图,其中:

  • (1)中获得每个\(q_{n,m},p\)的时间复杂度就变成了$O(n^2)\cdot $(计算核函数K的时间复杂度)
  • (2)是一个n个变量、n+1个约束条件的特殊二次规划问题
  • (3)和(4)的时间复杂度都是O(支持向量个数)·(计算核函数K的时间复杂度)

Polynomial Kernel

一般的Q阶多项式核函数形式如下:

669611-20180727131544022-1686213385.png

其中,\(\zeta,\gamma\)是参数

加入多项式核函数的SVM被称为多项式核SVM

线性核是多项式核的特殊情形,即Q=1,\(\zeta=0,\gamma=1\),此时就相当于是原始特征\(x,x'\)的内积:

669611-20180727132200097-1766005783.png

在实践中,我们应该尽量先尝试比较简单的假设函数,所以要优先尝试用线性核函数

Gaussian Kernel

我们来看这个特殊的核函数:

\[K(x,x')=\exp(-\gamma \|x-x'\|^2),\gamma>0\]

首先看x为标量时的情况:

669611-20180727132619912-1862162346.png

我们可以把这个核函数看作是对两个\(\Phi(x),\Phi(x')\)的内积,特征变换\(\Phi(x)\)将标量x映射为无限维的向量

高斯核SVM的假设函数为:

669611-20180727133622775-1955017685.png

其中,\(\sum_{SV}\alpha_n\gamma_n\exp(\cdots)\)可以视为是若干个以\(x_n\)(\(\alpha_n>0\)的支持向量)为中心、方差相同的高斯分布的线性组合

总结:带核函数的SVM的大间隔保证了泛化能力(\(E_{in}\approx E_{out}\));而核函数则让原始特征映射到高维(甚至无限维)空间中,使得决策边界变得复杂,\(E_{in}\)很小

669611-20180727134512239-772313969.png

选取合适的高斯核参数\(\gamma\)十分重要,\(\gamma\)越大,每个高斯分布就越"尖",如上图所示,\(\gamma\)太大会引起过拟合

Comparison of Kernels

本节课最后比较了各种核函数的优缺点

线性核

优点:

  • 简单,在实践中应该首先尝试简单的线性核函数
  • 运算速度快
  • 最后可以很容易得到有实际意义的\(w\)

缺点:

  • 过于简单

多项式核

优点:

  • 可以表示出比线性核更复杂的边界
  • 通过阶数Q的大小,可以控制决策边界的复杂程度

缺点:

  • Q太大时,\(|\zeta+\gamma x^Tx'|<1\)时K趋于0,\(|\zeta+\gamma x^Tx'|>1\)时K趋于正无穷
  • 参数更多,有三个参数\(\zeta,\gamma,Q\),不方便选取

高斯核

优点:

  • 把原始特征映射到无限维向量,可以表示出比线性核、多项式核更复杂的边界
  • K始终在\([0,1]\)内,这一点比多项式核好很多
  • 只有一个参数\(\gamma\)

缺点:

  • 无法得到\(w\)
  • 比线性核更慢
  • \(\gamma\)太大时容易过拟合

另外补充一点,核函数可以视为对两个向量的相似度的度量

K是有效的核函数的充要条件是,对于任意n个向量\(x_1,\cdots,x_n\),矩阵\(K\)(其中\(k_{ij}=K(x_i,x_j)\))是半正定的

Lecture 4:Soft-Margin Support Vector Machine

Motivation and Primal Problem

之前介绍的SVM是hard-margin的,即不允许任何训练样本被错误分类,这样的SVM只适用于训练集可分的情况。

669611-20180727151458357-776673556.png

soft-margin的motivation是允许少量的训练样本被错误分类。我们用松弛变量\(\xi_n\)表示第n个样本被错误分类的程度(上图中紫色的violation),soft-margin SVM的优化目标为:

669611-20180727151904907-1466971450.png

其中:

  • \(\xi_n=0\)表示样本点没有越过margin(\(y_n(w^tz_n+b)\geq 1\))
  • \(\xi_n>0\)时,\(\xi_n\)越大,表明越过margin的violation越大
  • \(C\)是惩罚因子,用于平衡边界最大化与violation的程度,C越大,表明越希望所有训练样本的violation越小

该问题有\(\tilde d+n+1\)个变量(\(w_i,\xi_n,b\)),2n个不等式约束条件

Dual Problem

对应于这个优化目标的拉格朗日函数是:

669611-20180727152625688-1156860513.png

其中,\(\alpha_n,\beta_n\)是拉格朗日乘子

拉格朗日原始问题为:

\[\min_{b,w,\xi}\max_{\alpha_n\geq 0,\beta_n\geq 0}\mathcal L(b,w,\xi,\alpha,\beta)\]

拉格朗日对偶问题为:

\[\max_{\alpha_n\geq 0,\beta_n\geq 0}\min_{b,w,\xi}\mathcal L(b,w,\xi,\alpha,\beta)\]

为了让内层的min(...)取最小值,令\(\frac{\partial \mathcal L}{\partial \xi_n}=0\),得:

\[\frac{\partial \mathcal L}{\partial \xi_n}=C-\alpha_n-\beta_n=0\ \ \cdots \cdots (1)\]

从而有\(\beta_n=C-\alpha_n\geq 0\),又\(\alpha_n\geq 0\),那么约束条件可以概括为\(0\leq \alpha_n \leq C\ \ \cdots\cdots (2)\)

回顾拉格朗日对偶问题:

\[\max_{\alpha_n\geq 0,\beta_n\geq 0}\min_{b,w,\xi} \frac 1 2 w^Tw+C\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_{\alpha_n\geq 0,\beta_n\geq 0}\min_{b,w,\xi} \frac 1 2 w^Tw+\sum_{n=1}^N\alpha_n(1-y_n(w^Tz_n+b))+\sum_{n=1}^N(C-\alpha_n-\beta_n)\xi_n\]

将(1)式、约束条件(2)代入可得

\[\max_{0\leq \alpha_n\leq C,\beta_n=C-\alpha_n}\min_{b,w,\xi} \frac 1 2 w^Tw+\sum_{n=1}^N\alpha_n(1-y_n(w^Tz_n+b))\ \ \cdots\cdots (3)\]

为了让内层min(...)取最小值,我们令(...)对w,b求导:

\[\nabla_w(\cdots)=w-\sum_{n=1}^N\alpha_ny_nz_n=0\]

\[\frac{\partial (...)}{\partial b}=-\sum_{n=1}^Ny_n\alpha_n=0\]

从而可得\(w=\sum_{n=1}^N\alpha_ny_nz_n\),代入(3)

\[\max_{0\leq \alpha_n\leq C}\sum_{n=1}^N\alpha_n-\frac 1 2 \sum_{n=1}^N\sum_{m=1}^N \alpha_n\alpha_my_ny_mz_n^Tz_m\]

\[\min_{0\leq \alpha_n\leq C}\frac 1 2 \sum_{n=1}^N\sum_{m=1}^N \alpha_n\alpha_my_ny_mz_n^Tz_m-\sum_{n=1}^N\alpha_n\ \ \cdots\cdots (4)\]

对偶问题可以表示为:

669611-20180727155550496-42396042.png

可以发现,soft-margin的对偶问题与hard-margin的对偶问题相比,就是约束条件里\(\alpha_n\)多了上界C

Messages behind Soft-Margin SVM

我们也可以对soft-margin SVM加入核函数,和hard-margin SVM的情形类似,就是把\(z_n,z_m\)的内积替换成\(K(x_n,x_m)\)

669611-20180727155954967-931447566.png

现在只剩下问题:b怎么求?

在soft-margin SVM对偶问题与原始问题最优解等价的KKT条件里的互补松弛条件,可得:

\[\alpha_n(1-\xi_n-y_n(w^Tz_n+b))=0\]

\[-\beta_n\xi_n=0\]

将(1)代入可得:

669611-20180727160509749-309601027.png

  • \(\alpha_s>0\)时,第一个互补松弛条件表明\(1-\xi_s-y_s(w^Tz_s+b)=0\)\(b=y_s-y_s\xi_s-w^Tz_s\),我们称样本点s是支持向量(SV)
  • \(\alpha_s<C\)时,第二个互补松弛条件表明\(\xi_s=0\),即样本点s在margin的边缘或外侧,我们称样本点s是自由的(free)

因此我们可以将所有样本点按\(\alpha_n\)的取值分类:

669611-20180727162438095-1495895025.png

  • \(\alpha_n=0\),表明样本点不是支持向量,不在margin内
  • \(0<\alpha_n<C\),表明样本点是自由支持向量(图中方形),在margin边缘,可以用自由支持向量推出b的值
  • \(\alpha_n=C\),表明样本点是支持向量,但越过了对应的margin边缘(图中三角形),其\(\xi_n\)表明越过对应margin边缘的程度(violation)

Model Selection

高斯核的soft-margin SVM有两个参数\(\gamma,C\),选取参数的过程就是模型选择问题,需要用交叉验证,而\(E_{CV}(\gamma,C)\)不是光滑的函数,只能枚举一系列的离散的\(\gamma,C\),从中选取\(E_{CV}\)最小的

如果我们采用Leave-One-Out cross validation选取参数的话,有一个有趣的性质:对于某个参数为\(\gamma,C\)的SVM而言,其\(E_{loocv}\leq\) (用整个训练集训练该SVM,得到的支持向量个数)/(训练样本总数N)

证明:

假设现在用\((x_n,y_n)\)作验证样本,其他N-1个样本用于训练

  • (1)若用整个训练集训练出的\(\alpha_n=0\),表明\((x_n,y_n)\)不是支持向量,因此去掉它以后训练的SVM和不去掉它训练出的SVM是一样的,而且因为\((x_n,y_n)\)不是支持向量,它是分类正确的点,所以\((x_n,y_n)\)作验证样本时验证误差为0

  • (2)若用整个训练集训练出的\(\alpha_n>0\),则用\((x_n,y_n)\)作验证样本时验证误差<=1

综上可得\(E_{loocv}\leq \frac{SV}{N}\)

转载于:https://www.cnblogs.com/qpswwww/p/9377102.html

你可能感兴趣的文章
Android ViewPager 动画效果
查看>>
pip和easy_install使用方式
查看>>
博弈论
查看>>
Redis sentinel & cluster 原理分析
查看>>
我的工作习惯小结
查看>>
把word文档中的所有图片导出
查看>>
浏览器的判断;
查看>>
ubuntu 18.04取消自动锁屏以及设置键盘快捷锁屏
查看>>
Leetcode 589. N-ary Tree Preorder Traversal
查看>>
机器学习/深度学习/其他开发环境搭建记录
查看>>
xml.exist() 实例演示
查看>>
判断是否为空然后赋值
查看>>
zabbix监控日志文件
查看>>
正则表达式
查看>>
pip install torch on windows, and the 'from torch._C import * ImportError: DLL load failed:' s...
查看>>
环套树
查看>>
java基础(一):我对java的三个环境变量的简单理解和配置
查看>>
arcgis api 4.x for js 结合 Echarts4 实现散点图效果(附源码下载)
查看>>
YTU 2625: B 构造函数和析构函数
查看>>
apache自带压力测试工具ab的使用及解析
查看>>