机器学习——支持向量机

首先区分一对概念:

线性可分:存在一条直线或一个平面超平面,可以将样本集分开。

非线性可分:不存在......

机器学习——支持向量机_第1张图片

这里我们假设中间那条直线的方程为:\omega_1x_1+\omega_2x_2+b=0

权重(weight)\omega_1, \omega_2

偏置(bias)b

值得注意的是:在直线的两侧,直线方程分别 大于零小于零 ,这个规定可以是人为的。

接着用数学严格定义训练样本以及他们的标签:

假设:有N个样本和他们的标签。\{(X_1,y_1),(X_2,y_2),...,(X_N,y_N)\}

其中X_i=[x_{i1},x_{i2}]^T\ ,y_i=\{+1,-1\}

规定:如果 X_i\in c_1 ,则 y_i=+1 反之,-1

线性可分的严格定义:

一个训练样本集\{(X_1,y_1),(X_2,y_2),...,(X_N,y_N)\}i=1\sim N线性可分,是指存在(\omega_1,\omega_2,b),使得对i=1\sim N,有:

(1)若y_i=+1,则\omega_1x_1+\omega_2x_2+b>0

(2)若y_i=-1,则\omega_1x_1+\omega_2x_2+b<0

 我们也可以用向量的方式定义线性可分:

假设:X_i=\begin{bmatrix} x_{i1}\\x_{i2} \end{bmatrix}^T \omega=\begin{bmatrix} \omega_1\\\omega_2 \end{bmatrix}^T则:

(1)若y_i=+1,则\omega^TX_i+b>0

(2)若y_i=-1,则\omega^TX_i+b<0 

进一步我们可以化简为如下形式:

如果 y_i 就取 \pm1 那么一个训练样本集\{(X_i,y_i)\},在i=1\sim N线性可分,是指:

存在(\omega,b),使得对i=1\sim N,有:y_i(\omega^TX_i+b)>0

思考题:

(1)能否给出实际生活中,训练样本集是线性可分和不可分的例子?大多数实际生活中的例子是线性可分还是线性不可分?

(2)请对类别数大于2的情况,给出线性可分与线性不可分的严格数学定义。

(3)请通过数学定义严格证明:在二分类情况下,如果一个数据集是线性可分的,那么一定存在无数多个超平面将这两个类别完全分开。


Vladimir Vapnik提出的支持向量机算法分成如下两个步骤:

一、解决线性可分问题;

二、再将线性可分问题中,获得的结论推广到线性不可分的情况 

首先解决线性可分问题,对于那无数多个分开各个类别的超平面中,到底哪一个是最好的呢?

结合没有免费午餐定理,我们需要对为什么2号线最好的做出一定的假设(这种假设可以有很多种):假设训练样本的位置在特征空间上有测量误差,如图:

机器学习——支持向量机_第2张图片

 如果为1号线,则会导致分类错误。而二号线依旧能分类正确。换言之,二号线更能抵御训练样本位置的误差。接下来是个关键的问题,二号线是怎么画出来的?

基于最优化理论,对于任何一条分开圆圈和叉的直线,把这条直线朝一侧平行地移动,直到插到一个或几个训练样本为止,同时也朝另外一侧相同做法,如图所示:

 定义那两条直线为数据集的支持向量(support vector),而在其余样本上的平行直线称为:非支持向量把平行线之间地距离称为间隔(margin)。而我们想要求得的二号线是使间隔最大的线。为了使找到的线唯一,还需让这条线在上下两个平行线的中间

总而言之,支持向量机寻找最优分类直线应满足:

(1)该直线分开了两类。

(2)该直线最大化间隔。

(3)该支线处于间隔的中间,到所有支持向量的距离相等。

思考题:证明:在线性可分的条件下,有且只有唯一一条直线满足上面三个条件。

以下用严格的数学,把支持向量机,寻找最优分类超平面的问题写成一个最优化问题:

目标:最小化Minimize):\frac{1}{2}\|\omega\|^2 

限制条件y_i(\omega^Tx_i+b)\geq1(i=1\sim N)

可以看出来 是个凸优化问题( Convex Optimization )中的二次规划问题

二次规划的定义:

(1)目标函数(Objective Function)是二次项。

(2)限制条件是一次项。

凸优化问题要么无解,要么只有唯一的最小值。

——在实际当中,如果一个问题是凸优化问题,那么我们会把它当成一个已经解决的问题,

因为凸优化问题只有唯一的一个全局极值。我们可以应用梯度下降的算法,可以很方便求得它的解。

求解凸优化问题是一门专门的课程。

这里需要注意的是,已知:训练样本集\{(X_i,y_i)\}i=1\sim N      待求(\omega,b)

想要推出以上式子,需要知道以下事实:

事实1\omega^Tx+b=0 与 (a\omega^T)x+(ab)=0 是同一个超平面 (a\neq0)

事实2:一个点X_0到超平面\omega^Tx+b=0的距离d=\frac{|\omega^T x_0+b|}{\|\omega\|}

基于事实1,我们可以用 a 去缩放 \omega b   :(\omega,b)\to(a\omega,ab)

最终使在支持向量 x_0 上有:|\omega^Tx_0+b|=1   

而在支持向量外侧,非支持向量上有:|\omega^Tx_0+b|>1

从而有了限制条件y_i(\omega^Tx_i+b)\geq1,\ i=1\sim N (其中:y_i 是为了协调超平面的左右。)

值得注意的是如果把上式的 1 改成 2,那么(\omega,b) 会比原来相差一个 a ,仍代表同一个平面。

根据事实2,支持向量 x_0 到超平面的距离将会变为d=\frac{|\omega^T x_0+b|}{\|\omega\|}=\frac{1}{\|\omega\|}

最大化支持向量到超平面的距离 等价于 最小化 \|\omega\|,为了后续求导会更加方便,

把优化问题定为:最小化 \frac{1}{2}\|\omega\|^2

思考题:支持向量机的限制条件如果从大于1变成大于等于2,则(w,b)会变成(aw,ab),如果Xi和w都是M维的向量,那么算出a是多少?——我猜是2.


如果训练样本集是线性不可分的,那么以上优化问题的解是什么呢?

显然无解,这时需要适当地放松限制条件,使上面的最优化问题变得有解。

思路:设置松弛变量 \delta_i(slack variable)

限制条件改写为:y_i(\omega^TX_i+b)\geq1-\delta_i,(i=1\sim N)

当然我们还应该加入新的限制使每一个\delta_i 能够尽量小。

改造后的支持向量机优化版本:

目标:最小化Minimize):\frac{1}{2}\|\omega\|^2+C\sum^N_{i=1}\delta_i 或者  \frac{1}{2}\|\omega\|^2+C\sum^N_{i=1}\delta_i^2

 限制条件\begin{array}{lcl} (1)\delta_i\geq0,(i=1\sim N)\\ (2)y_i(\omega^TX_i+b)\geq 1-\delta_i,(i=1\sim N) \end{}

——比例因子C起到了平衡两项的关键作用,是人为设定的,我们把认为事先设定的参数叫做算法的超参数(Hyper Parameter)

一般在实际应用中,会不断变化C的值,同时测试算法的识别率,再选取合适的超参数C。

支持向量机是超参数很少的算法模型。

以下是求得的结果,显然未达到求解的目的。那么问题出在哪里呢?

 机器学习——支持向量机_第3张图片

问题在于:我们的算法模型是线性的,即我们假设分开两类的函数是线性的,但是线性模型的表现力是不够的。因此我们只有扩大可选的函数范围,使它超越线性,才有可能应对各种复杂的线性不可分场景。

思考题:对于上图,需要有一个椭圆,来分开圆圈和叉,另一个方面,我们也可以对特征空间的两个维度x1和x2做某种非线性变换从而把本来线性不可分的线性样本集变为线性可分。这个变换如何设计?


 支持向量机在扩大函数可选范围方面可谓独树一帜:

神经网络采取的是多层的非线性函数的组合的方式,而支持向量机的做法则是通过特征空间由低维映射到高维,然后在高位的特征空间当中仍然用线性超平面对数据进行分类

映射函数:\varphi(x):   

例如:机器学习——支持向量机_第4张图片

原本线性不可分的数据集变成了线性可分。

一般结论:

假设在一个M维空间上随机取N个训练样本,随机的对每一个训练样本赋予标签+1或-1,同时假设这些训练样本线性可分的概率为P(M)则有当M趋于无穷大时,P(M)=1.

将训练数据从低维映射到高维,会增大线性可分的概率。

其实很好理解,当我们增加特征空间的维度时,待估参数(w,b)的维度也增加。即整个算法模型的自由度增加。当然就更有可能分开低维时候无法分开的数据集。

如何构造\varphi(x) 就成了一个关键性的问题。这里先假设\varphi(x) 已经确定,那么原先的优化问题只需改变一点点:

 目标:最小化Minimize): \frac{1}{2}\|\omega\|^2+C\sum^N_{i=1}\delta_i或者   \frac{1}{2}\|\omega\|^2+C\sum^N_{i=1}\delta_i^2

 限制条件\begin{array}{lcl} (1)\delta_i\geq0,(i=1\sim N)\\ (2)y_i(\omega^T\varphi(X_i)+b)\geq 1-\delta_i,(i=1\sim N) \end{}      (\omega 的维度与 \varphi(X_i) 相同)

 我们仍然可用凸优化理论求解。


为了具体研究\varphi(x_i)的形式,我们引入核函数:

理念是这样的:我们可以不用知道\varphi(x)的具体形式,取而代之,如果对任意两个向量X1和X2.

我们知道K(X_1,X_2)=\varphi(X_1)^T\varphi(X_2) 那么我们仍然能够通过一些技巧获得一个测试样本的类别信息,从而完成对测试样本类别的预测。在这里我们定义K(X_1,X_2)核函数(Kernel Function

并且结果是一个实数。核函数K和映射\varphi 是一一对应的关系。

——需要指出的是核函数的形式不能随意的取。需要满足一定的条件才能分解为两个\varphi内积的形式。

K(X_1,X_2)能写成\varphi(X_1)^T\varphi(X_2)的充要条件:

(1)K(X_1,X_2)=K(X_2,X_1) (交换性

(2)\forall C_i(i=1\sim N),\forall N \Sigma^N_{i=1}\Sigma^N_{j=1}C_iC_jK(X_iX_j)\geq0半正定性

虽然无法知道\varphi(x)的值,但却可以通过核函数有办法知道\omega^T\varphi(x)+b的值。

引入原问题和对偶问题:

原问题(Prime problem):

                最小化:f(\omega)  自变量为:\omega 多维向量

                限制条件(Subject to):\begin{array}{clc} g_i(\omega)\leq0\quad i=1\sim K\\ h_i(w)=0\quad i=1\sim m \end{array}

定义该原问题的对偶问题过程如下:

首先定义一个函数:\begin{array} {lcr} L(\omega,\alpha,\beta)=f(\omega)+\Sigma^K_{i=1}\alpha_i g_i(\omega)+ \Sigma^K_{i=1}\beta_ih_i(\omega)=f(\omega)+\alpha^T g(\omega)+ \beta^T h(\omega) \end{array}

其中:\begin{array}{lcl} \alpha=[\alpha_1,\alpha_2,...,\alpha_K]^T\\ \beta=[\beta_1,\beta_2,...,\beta_M]^T\\ g(\omega)=[g_1(\omega),g_2(\omega),...,g_K(\omega)]^T\\ h(\omega)=[h_1(\omega),h_2(\omega),...,h_M(\omega)]^T \end{array}

对偶问题如下:

最大化\theta(\alpha,\beta)=inf\ L(\omega,\alpha,\beta)

(意思是:遍历所有定义域内的\omega,找到使L最小的\omega,并把这个L值赋给\theta(\alpha,\beta)

限制条件\alpha_i\geq0, i=1\sim K

综合员问题和对偶问题定义得到:

定理一:

        如果\omega^*是原问题的解,(\alpha^*,\beta^*)是对偶问题的解,则有f(\omega^*)\geq\theta(\alpha^*,\beta^*)

其中: g(\omega^*)\leq0h(\omega^*)=0, \alpha(\omega^*)\geq0

我们把f(\omega^*)-\theta(\alpha^*,\beta^*)定义为对偶差距(Duality Gap)

强对偶定理:

如果g(\omega)=A\omega+b,h(\omega)=C\omega+df(\omega)为凸函数,则有f(\omega^*)=\theta(\alpha^*,\beta^*),即对偶差距为0.

换言之,如果原问题的目标函数是凸函数,而限制条件是线性函数,那么原问题的解和对偶问题的解就会相等  

KKT条件:

f(\omega^*)=\theta(\alpha^*,\beta^*),则定理一中必然能够推出,对于所有的i=1\sim K

要么\alpha_i=0,要么g_i(\omega^*)=0

将支持向量机的原问题转化为对偶问题:

1. 首先证明支持向量机的原问题满足强对偶定理:

为了将限制条件全部写成小于等于0的形式,先将\delta_i变号,整理一下得到:

最小化:\frac{1}{2}\|\omega\|^2-C\sum^N_{i=1}\delta_i 或者 \frac{1}{2}\|\omega\|^2-C\sum^N_{i=1}\delta_i^2

限制条件:\begin{array}{lcl} (1)\delta_i\leq0,\quad (i=1\sim N)\\ (2)1+\delta_i- y_i \omega^T\varphi(X_i)- y_ib \leq 0, (i=1\sim N) \end{}

可以看到这两个限制条件都是线性的,而目标函数是凸的。所以满足强对偶定理。

值得注意的是这里的 \omega 自变量指的是 (\omega,b,\delta_i)的组合。

在这个问题当中没有等式约束条件,不存在h_i(\omega)

对偶问题如下:

最大化:\theta(\alpha,\beta)=\inf_{\omega,\delta_i,b}\{ \frac{1}{2}\|\omega\|^2-C\Sigma^N_{i=1}\beta_i\delta_i+\Sigma^N_{i=1}\alpha_i[1+\delta_i-y_i \omega^T\varphi(X_i)- y_ib ]\}

限制条件:\begin{array}{lcl} (1)\alpha_i\geq0\\ (2)\beta_i \geq 0\end{}

因为是遍历每一个(\omega,b,\delta_i)的组合,我们可以分别对三个变量求导,并令导数为0。可以得到:机器学习——支持向量机_第5张图片

 将获得的三个式子代入表达式中,进一步转化对偶问题为:

最大化:\theta(\alpha,\beta)=\Sigma^N_{i=1}\alpha_i-\frac{1}{2}\Sigma^N_{i=1} \Sigma^N_{j=1}y_iy_j\alpha_i\alpha_j\varphi(X_i)^T\varphi(X_j)

限制条件:\begin{array}{lcl} (1)0\leq\alpha_i\leq C ,(i=1\sim N)\\ (2)\Sigma^N_{i=1}\alpha_iy_i=0 ,(i=1\sim N)\end{}

基于此对偶问题给出支持向量机算法的统一流程:

首先把对偶式子中的\varphi(X_i)^T\varphi(X_j)K(X_i,X_j)代替。解出所有的\alpha_i ,(i=1\sim N)

可以根据第一个求导的式子:\omega=\Sigma^N_{j=1}\alpha_jy_j\varphi(X_j) 得到:

\omega^T\varphi(X_i)=\Sigma^N_{j=1}\alpha_jy_j\varphi(X_j)^T\varphi(X_i) =\Sigma^N_{j=1}\alpha_jy_jK(X_i,X_j)

再由第一个对偶问题根据KKT定理得到:

机器学习——支持向量机_第6张图片

而如果对某个i\alpha_i\neq 0\alpha_i\neq c,则根据KKT条件,必有\delta_i=0;且:

机器学习——支持向量机_第7张图片

 所以只需要找一个0<\alpha_i<c ,就能得到b

机器学习——支持向量机_第8张图片

 算出了b,那么测试样本的类别信息也就知道了\omega^T\varphi(X)+b

根据之前的式子展开得到:\omega^T\varphi(X)+b= \Sigma_{i=1}^N\alpha_iy_iK(X_i,X)+b

这一结论被称为核函数戏法(Kernel Trick)

最后得到如下判别标准:

机器学习——支持向量机_第9张图片

 我们一旦知道了所有的\alpha_ib,我们就完成了支持向量机的训练过程。

思考题:推到目标函数中\delta_i^2的支持向量机训练和测试流程。

我们在应用SVM工具包的时候需要对两个超参进行人为设置:

-c 、-g:

机器学习——支持向量机_第10张图片
机器学习——支持向量机_第11张图片

机器学习——支持向量机_第12张图片

 这里gama就是\frac{1}{\sigma^2}         

基于人工的经验我们用网格搜索,搜索参数的最佳取值:

机器学习——支持向量机_第13张图片

 暂时先想写这么多了。。。

你可能感兴趣的:(机器学习系列,机器学习,支持向量机)