SVM学习笔记(一)

梯度下降法、拉格朗日乘子法、KKT条件回顾

感知器模型回顾

SVM线性可分

SVM线性不可分

核函数

SMO

重点:梯度下降法,拉格朗日乘子法,KKT条件

梯度下降法

梯度下降法常用于求解无约束情况下凸函数的极小值,是一种迭代类型的算法,因为凸函数只有一个极值点,故求解出来的极小值就是函数的最小值点。

由于梯度下降法中负梯度方向作为变量的方向,所以有可能导致最终求解的值是局部最优解,所以使用梯度下降的时候,一般需要进行一些调优策略:

学习率的选择:学习率过大,表示每次迭代更新时的变化比较大,有可能会跳过最优解;学习率过小,表示每次迭代更新时变化较小,就会导致迭代速度过慢,很长时间都不能结束。

算法初始参数的选择:初始值不同最终获得的最小值也有不同,因为梯度下降法求解的是局部最优解,所以一般情况下,选择多次不同初始值运算法,并最终返回损失函数最小情况下的结果值。

标准化:由于样本不同特征值的取值范围不同,可能导致在各个不同参数上迭代速度不同,为了减少特征取值的影响,可以将特征进行标准化操作。

梯度下降法种类:

批量梯度下降法(BGD):使用所有样本在当前点的梯度值来对变量参数进行更新操作;

随机梯度下降法(SGD):在更新变量参数的时候选取一个样本的梯度来更新参数。

小批量梯度下降法(MBDG):集合BGD和SDG的特性,从原始数据中,每次选择n个样本来更新参数值,一般n选择10

有约束优化问题

最优化问题一般是指对于某个函数而言,求解在其指定作用域上的全局最小值问题,一般分为一下三种情况(备注:以下几种方式求出来的都有可能是局部最小值,只有当函数是凸函数的时候,才可以得到全局最小值):

无约束问题:求解方式一般梯度下降法、牛顿法、坐标轴下降法等;

等式约束问题:求解方式一般为拉格朗日乘子法

不等式约束问题:求解方式一般为KKT条件

拉格朗日乘子法

拉格朗日乘子法就是当我们的优化函数存在等值约束的情况下的一种最优化求解方式;其中参数α称为拉格朗日乘子。

拉格朗日乘子法理解

拉格朗日乘子法的目的:为了定义一个新的无约束问题,等价原来的有约束问题,从而将约束问题无约束化。泛拉格朗日函数有如下定义:

原始问题

对偶问题

在优化问题中,目标函数f(x)存在多种形式,如果目标函数和约束条件都为变量的线性函数,则称问题为线性规划;如果目标函数为二次函数,则称最优化问题为二次规划。每个线性规划问题都有一个对应的对偶问题。对偶问题具有以下几个特性:

1.对偶问题的对偶是原问题;

2.无论原始问题是否是凸的;

3.对偶问题可以给出原始问题的一个下界;

4.当满足一定条件的时候,原始问题和对偶问题的解是完美等价的;

KKT条件

KKT条件是泛拉格朗日乘子法的一种形式;主要应用在当我们的优化函数存在不等值约束的情况下的一种最优化求解方式;KKT条件即满足不等式约束情况下的条件。

KKT条件理解

当可行解在约束内部区域的时候,令β=0即可消去约束。

对于参数β的取值而言,在等值约束中,约束函数和目标函数的梯度只要满足平行即可,而在不等式约束中,若β≠0,这说明可行解在约束区域的边界上,这时候可行解应该尽可能的靠近无约束情况下的解,所以在约束边界上,目标函数的梯度方向应该远离约束区域超无约束时的解,此时约束函数的梯度方向与目标函数的扶梯度方形应相同;从而可以得到β>0

KKT条件总结

1.拉尔朗日取得可行解的虫咬条件;

2.将不等式约束转换后的一个约束,称为松弛互补条件;

3.初始的约束条件;

4.不等式约束条件需要满足的条件;

感知器模型

感知器算法是最古老的分类算法之一,原理比较简单,不过模型的分类泛化能力比较弱,不过感知器模型是SVM、神经网络、深度学习等算法的基础。

感知器的思想很简单:比如班上有男生女生,感知器模型就是试图找到一条直线,能够把所有男学员和女学员分隔开,如果是高维空间中,感知器模型寻找的就是一个超平面,能够把所有的二元类别分割开。感知器模型的前提是:数据是线性可分的。

直接使用梯度下降法就可以对损失函数求解,不过由于这里的m分类错误的样本集合,不是固定的,所以我们不能使用批量梯度下降法(BGD求解,只能使用随机梯度下降法(SGD)或者小批量梯度下降(MBGD);一般在感知器模型中使用SGD来求解。

SVM

支持向量机(Support Vector Machine,SVM)本身是一个二元分类算法,是感知器算法模型的一种扩展,现在的SVM算法支持线性分类和非线性分类的应用,并且也能够直接将SVM应用于回归应用中,同时通过OVR或者OVO的方式我们也可以将SVM应用在多元分类领域中。在不考虑集成学习算法,不考虑特定的数据集的时候,在分类算法中SVM可以说是特别优秀的。

线性可分SVM

线性可分SVM

SVM模型是让所有的分类点在各自类别的支持向量的两边,同时要求支持向量尽可能的远离这个超平面,用数学公式表示如下:

线性可分SVM

SVM目标函数/损失函数为:

将此时的目标函数和约束条件使用KKT条件转换为拉格朗日函数,从而转换为无约束的优化函数.

引入拉格朗日乘子后,优化目标变成:

根据拉格朗日对偶化特性,将该优化目标转换为等价的对偶问题来求解,从而优化目标变成:

所以对于该优化函数而言,可以先求优化函数对于w和b的极小值,然后再求解对于拉格朗日乘子β的极大值。

首先求让函数L极小化的时候w和b的取值,这个机制可以直接通过对函数L分别求w和b的偏导数得到:

将求解出来的w和吧带入优化函数L中,定义优化之后的函数如下:

通过对w、b极小化后我们最终得到的优化函数只和β有关,所以此时我们可以直接极大化我们的优化函数,得到β的值,从而可以得到最终得到w和b的值。

假设存在最优解β*;根据w、b和β的关系,可以分别计算对应的w值和b值(一般使用所有支持向量的计算均值来作为实际的b值);

线性可分SVM的算法流程

线性可分SVM总结

  1. 要求数据必须是线性可分的;
  2. 纯线性可分的SVM模型对于异常数据的预测可能会不太准;
  3. 对于线性可分的数据,SVM分类器的效果非常不错。

SVM的软间隔模型

线性可分SVM中要求数据必须是线性可分的,才可以找到分类的超平面,但是有的时候线性数据中存在少量的异常点,由于这些异常点导致了数据集不够线性划分;直白来讲就是:正常数据本身是线性可分的,但是由于存在异常点数据,导致数据集不够线性可分;

如果线性数据中存在异常点导致没法直接使用SVM线性分割模型的时候,我们可以通过引入软间隔的概念来解决这个问题;

硬间隔:可以认为线性划分SVM中的距离度量就是硬间隔,在线性划分SVM中,要求函数距离一定大于1的,最大化的硬间隔条件为:

软间隔:SVM对于训练集中每个样本都引入一个松弛因子(ε),是的函数距离加上松弛因子后的值是大于等于1;这表示相对于硬间隔,对于样本到超平面距离的要求就放松了。

松弛因子(ε)越大,表示样本点距离超平面就越近,如果松弛因子大于1,那么表示允许样本点分错,所以说加入松弛因子是有成本的,过大的松弛因子可能会导致模型分类错误,所以最终的目标函数就转换成为:

C越大表示对误差分类的惩罚越大,C越小表示对误分类的惩罚越小;C值的给定需要调参。

将w、b、ε的值带入L函数中,就可以消去优化函数中的w、b、ε,定义优化之后的函数如下:

最终优化后的而目标函数/损失函数和线性可分SVM模型基本一样,除了约束条件不同而已,也就是说也可以使用SMO算法来求解.

在硬间隔最大化的时候,支持向量比较简单,就是离超平面的函数距离为1的样本点就是支持向量.

在软间隔中,根据KKT条件中的对偶互补条件:β(y(wx+b)-1+ε)=0,从而有:

SVM软间隔模型的算法流程

SVM的软间隔模型总结

  1. 可以解决线性数据中懈怠异常点的分类模型构建的问题;
  2. 通过引入惩罚项系数(松弛因子),可以增加模型的泛化能力,即鲁棒性;
  3. 如果给定的惩罚项系数越小,表示模型构建时,就允许存在越多的分类错误样本,也就是表示此时的模型在训练集上的准确率比较低,在测试集上的准确率比较高;如果惩罚项系数越大,表示在模型构建的时候,就越不允许存在分类错误的样本,也就表示此时的模型在训练集上的准确率较高,在测试集上的准确率较低.

非线性可分SVM

不管是线性可分还是加入惩罚系数后的软间隔线性可分SVM其实都要求数据本身是线性可分的,对于完全不可以线性可分的数据,这两种算法模型就没法解决这个问题了。

多项式回归回顾

在线性回归中,我们可以通过多项式扩展将低微的数据扩展成为高维的数据,从而可以使用线性回归模型来解决问题。也就是说对于二维空间中不是线性可分的数据,将其映射到高维空间中,变成了线性可分的数据。

结合多项式回归在处理非线性可分数据事的作用,在SVM的线性不可分的数据上,如果将数据映射到高维空间中,那么数据就会变成线性可分的,从而可以使用线性可分SVM模型或者软间隔线性可分SVM模型。

也就是说,对于线性不可分SVM模型来讲,重点就是将低维特征数据到高维特征数据之间的映射。

定义一个从低维到高维特征空间的映射函数,非线性可分SVM的优化目标函数:

可以看到的是,只需要将原来的低维空间中的两个向量的点积转换为高维空间中两个向量的点积即可。

这样一来问题就解决了吗?似乎是的:拿到非线性数据,就找到一个映射,然后一股脑把原来的数据映射到新空间中,再做线性SVM即可。不过事实上没有这么简单!其实刚才的方法稍想一下就会发现有问题:在最初的例子里做了一个二阶多项式的转换,对于二维空间做映射,选择的新空间是原始空间的所有一阶和二阶的组合,得到了5个维度;如果原始空间是三维,那么我们会得到9维的新空间;如果原始空间是n位,那么我们会得到一个n(n+3)/2维的新空间;这个数目是呈爆炸性增长的,这给计算带来了非常大的困难,而且如果遇到无穷维的情况,就根本无从计算。

核函数

假设函数是从一个低维特征空间到高维特征空间的一个映射,那么如果存在函数K(x,z),对于任意的低维特征向量x和z,都有:

称函数K(x,z)为核函数(Kernal funcation)

核函数在解决线性不可分问题的时候,采取的方式是:使用低维空间上的计算来避免在高维空间中向量内记得恐怖计算量;也就是说此时SVM模型可以应用在高维特征空间中数据可线性分割的优点,同时又避免了引入这个高维特征空间恐怖的内积计算量。

核函数总结

  1. 核函数可以自定义;核函数必须是征订和函数,即Gram举证是半正定矩阵;
  2. 核函数的价值在于它虽然也是特征进行从低维到高维的转换,但核函数它事先在低维上进行计算,而将实质上的分类效果表现在了高维上,也就如上文所说的避免了直接在高维空间中的复杂计算;
  3. 通过核函数,可以将非线性可分的数据转换为线性可分数据;

高斯核函数公式证明(扩展)

SMO

序列最小优化算法(Sequential minimal optimization,SMO)是一种用于解决SVM训练过程中产生的优化问题的算法。论文详见:Sequencial Minimal Optimization-a Fast Alg for Training SVM.pdf

从而可以得到解决问题的思路如下:

首先,初始化一个β值,让它满足对偶问题的两个初始限制;

然后不断优化这个β值,使得由它确定的分割超平面满足g(x)目标条件,而且在优化过程中,始终保证β满足初始限制条件。

备注:这个求解过程中,和传统的思路不太一样,不是对目标函数求最小值,而是让g(x)目标条件尽可能的满足。

在这样一个过程中,到底如何优化这个β值呢?整理可以发现β值的优化必须遵循以下两个基本原则:

每次优化的时候,必须同时优化β的两个分量;因为如果只优化一个分量的话,新的β值就没法满足初始限制条件中的等式约束条件了。

每次优化的两个分量应该是违反g(x)目标条件比较多的。也就是说,本来应当是大于等于1的,越是小于1违反g(x)目标条件就越多。

或者换一种思路来理解,因为目标函数中存在m个变量,直接优化比较难,利用启发式的方法E/M算法思想,每次优化的时候,只优化两个变量,将其他的变量看成常数项,这样SMO算法就将一个复杂的优化算法转换成一个比较简单的两变量优化问题了。

可以发现SMO算法中,是选择两个合适β变量迭代,其他变量作为常量来进行优化的一个过程,那么两个变量怎么选择呢???

每次优化的时候,必须同时优化β的两个分量;因为如果只优化一个分量的话,新的β值就设法满足初始限制条件中的等式约束条件了。

每次优化的两个分量应该是违反g(x)目标条件比较多的。也就是说,本来应该是大于等于1的,越是小于1违反g(x)目标条件就越多。

SMO计算阈值b和差值Ei

SMO算法流程总结

SVR(回归问题的SVM)

SVM和决策树一样,可以将模型直接应用到回归问题中;在SVM的分类模型(SVC)中,目标函数条件如下:

在简答的线性回归中,我们最小化一个正则化的误差函数:

scitit-learn SVM算法库概述

猜你喜欢

转载自blog.csdn.net/weixin_41797870/article/details/82355881
今日推荐