支持向量机(SVM)
目录
·简介
·凸二次规划
·拉格朗日乘数法与KKT条件
·拉格朗日对偶问题
·支持向量机(SVM)
·再生核希尔伯特空间、核函数与核技巧
·软间隔(softmargin)与正则化
·SVM与逻辑回归
·SVM与神经网络
·支持向量回归机(SVR)
·SVR与多项式回归
·顺序最小化算法(SMO)
·半监督SVM
Cover定理
对于一个复杂的模式分类问题,若该分类问题的样本空间不是稠密的,则将其分类问题非线性地投射到高维空间将比投射到低维空间更可能是线性可分的。
根据cover定理,若原问题线性不可分,则将其映射到比原空间更高的维度空间上,其更容易线性可分,但是也可能线性不可分的,定理中只说了更容易线性可分。但是如果样本空间中维度是有限维的,定理中还证明,一定存在一个映射,将其映射到更高维上时,问题线性可分。
本证明的详细推导参照Geometrical and Statistical Properties of Systems of
Linear Inequalities with Applications in Pattern
Recognition---
THOMAS M. COVER
所以上面的是存在的。
既然映射存在,那么我们的重点就放到了找核函数上。在介绍核函数之前,我们先介绍Hilbert空间。
Hilbert空间
什么是希尔伯特空间,希尔伯特空间的定义是完备的内积空间。
更直观的理解是:先定义一个线性空间,既空间对数乘和加法封闭,然后再在这个空间上定义范数,既对范数三原则,这个空间就是赋范线性空间,范数是可以定义距离的,在这个赋范线性空间上再定义角度,既定义了内积,此时这个空间就是内积空间,在再这个内积空间上定义极限,并且对极限有封闭性,既完备性,此时就形成了完备的内积空间,既希尔伯特空间。
由定义可以看出,多项式函数构成的空间就是一个希尔伯特空间,这个希尔伯特空间是无限维的,欧几里得空间也是一个希尔伯特空间,这个希尔伯特空间是有限维的。
对于希尔伯特空间而言,有限维的希尔伯特空间研究起来意义不大,无限维的希尔伯特空间研究起来才有意义。
有了希尔伯特空间的定义,我们就可以定义核函数。
核函数
首先我们要严格定义核函数。
定义:(核函数或正定核函数)
都成立。其中(·)表示Hilbert空间中的内积。
个是超级困难的。所以我们
才引入核函数来解决这个问题。到此,貌似问题绕了一圈又绕回来了,那我们怎么直接找到核函数呢。有以下核函数定理给出。
定理(核函数定理)
设X为输入空间, ( ·,·)是定义在上的二元对称函数,则 是核函数,当且仅当对于任意的数据集,"核矩阵"K(Gram矩阵)都是半正定的:
证明:此定理分两部分,第一部分:首先我们证明当 是核函数时,K是半正定的。
因为是核函数,所以.
所以,矩阵K是对称矩阵。
由核函数的定义,我们可以得到,对于数据集D中任意的样本点(注意这里是这些都是样本点,既都是向量),有以下公式:
对于任意的m维列向量,有:
所以,由半正定举证的定义,可以得到,K是半正定矩阵。
第二部分:以下证明当K是半正定矩阵的时候,是一个核函数(正定核函数),
当K是半正定矩阵时,因为任意对称矩阵都可以在实数域上进行特征分解,既任意实对称矩阵都正交相似于一个对角矩阵,且对角线上的元素都是该矩阵的特征值,
因为半正定矩阵的特征值都为非负数,所以有:
其中,U 为与由K的特征列向量构成的正交矩阵。
设则
,
所以:
其中:
所以:设,所以对任意的数据集,
又因为,此时映射完以后,还是在m维的欧式空间中,欧式空间是希尔伯特空间的一个特例,所以\kappa(·,·)符合核函数的定义,我们构造性的证明了在这种定义的下,是核函数,
这里的证明并不完美,因为我们没有找到将映射到更高维的空间中的,更没有研究映射到无限维的希尔伯特空间的.
下面我们给出第二部分的完美证明。
这里我们先证明以下4个引理。
以下引理中为定义在上的一个函数。我们要证明这个是核函数。
引理1
若集合S由所有的下列元素组成:
其中l维任意的正整数,,.则S是一个线性空间。
证明:对人意的,有:
所以S对加法有封闭性。
对人意的
所以S对数乘也满足封闭性。
所以S是一个线性空间。
由上面S的元素可以看出,S是一个函数空间,里面都元素都是函数。
引理2
对于上面S中的任意两个元素:
定义运算*:
并由此定义SxS 上的函数:
则该函数关于任意的的Gram矩阵都是半正定的。
证明:任意的,函数对应的Gram矩阵为K:
由运算*的定义可以得到,所以K是对称矩阵。
对人意的,有:
所以K是一个半正定矩阵。所以引理得到证明。
引理3
对于上面定义的运算*,对任意的,有以下不等式:
证明:任取
由上面定理得到,核函数关于f,g的Gram矩阵都是半正定的,所以
所以:
所以引理得到证明。
引理4
上面定义的运算* ,是S上的内积运算。
证明:是不是内积,只需要看一看是不是满足内积定义的三个条件。
第一对称性:有*的定义得到
第二线性:有*的定义得到
第三正定性:有上面的引理2得到,半正定性质
当时,
所以这里我们只需要证明当时,即可
对应函数, 很显然他是S中的一个元素。且有以下公式:
又根据引理3得到:
当时,
所以对任意的x,f(x)=0,所以.
所以引理的证。
此时我们在线性空间S上定义了内积,我们设H是S中的一个闭包,那么H对极限具有封闭性,也就是完备性,所以H是一个完备的内积空间,所以H是希尔伯特矩阵。
有了上面4个引理。我们再证明核函数定理的第二部分。
若矩阵K是半正定矩阵,设如下定义:
所以 是X到Hilbert空间H的一个映射。
所以:
所以:是一个上的一个核函数。
所以,核函数定理得到证明。
在介绍再生核希尔伯特空间前,我们先给出再生核的概念。
再生核
接下来引入再生核的概念:
X是非空集,H是定义在X上的希尔伯特空间。核满足下面的两条性质就称为H的再生核:
1、对于每个作为y的函数属于空间H.
2、任意x属于X和属于H,有
再生核希尔伯特空间
有了再生核的定义,我们就可以给出再生核希尔伯特空间的定义。
定义:一个希尔伯特空间 H 是一个再生核希尔伯特空间,当且仅当它有一个再生核
由上面的证明我们可以看出,
这个被称为核函数的再生性,即用核函数来再生两个函数值的内积,在这个过程中,我们不需要知道 的具体形式。
到此,我们只要找到一个对称的函数,对应的矩阵为半正定矩阵,我们既可以把这个函数当作核函数。利用核函数的再生性,既可以在不知到低维到高维的映射的前提下,就可以球的连个函数值的内积.由上面的定义可以看出,我们将原来的样本空间X,由低维映射到了高位,这个映射所在的空间为希尔伯特空间。而再在上面找到核函数(再生核)后,这个空间就成了再生核希尔伯特空间。这就是这些定义之间的关系。
核技巧
由上面介绍,我们知道,一个样本空间,在低维不一定线性可分,Cover定理告诉我们,将其映射到高维上,线性可分的概率变大。但这个映射具体是什么我们不知道,我们使用了核函数的方法,在不知道映射具体表达式的情况下,通过核函数直接求得两个函数值的内积。到此,所有的问题归结在了核函数上。怎么寻找核函数,我们给出了核函数定理,知道一个对称的二元函数对应的Gram矩阵如果是半正定的,那么这个二元函数就是核函数。
知道怎么判断核函数后,我们就可以具体寻找核函数。
下面我们列出常用的核函数:
线性核(Linear Kernel)
多项式核(Polynomial Kernel)
高斯核(Gaussian Kernel)
为函数的宽度参数
径向基核函数(Radial Basis Function)
径向基函数是指取值仅仅依赖于特定点距离的实值函数.既满足下面公式:
被称作径向量函数
拉普拉斯核(Laplacian Kernel)
Sigmoid核(Sigmoid Kernel)
这里以高斯核为例,证明其为核函数,且研究一下其到底是怎么作用的。
证明其是很函数。
证明:对任意的,其高斯核对应的Gram矩阵为:
对于任意的有:
所以K一定式正定的。所以高斯核是核函数。
我们研究下高斯核是怎么起作用的。
由于
所以上式中的可化为:
所以由低维映射到高维德映射为:
所以可以看到,这个映射将有限维样本空间X映射到无限维空间。在无限维空间中,样本点分布更稀疏,由Cover定理跟容易线性可分。所以高斯核实质上起了这个作用。
至此,我们推导除了和核函数相关的所以知识。现在我们要回来讨论SVM。
回到上面线性不可分问题,对于有限维数据集D,其内部样本本来线性不可分,由于Cover定理,一定存在一个映射,将数据集D映射到高维的空间,是的新空间中的数据集线性可分,其超平面的线性方程可以表示为:
这里与基本款的SVM唯一不一样的是,所以,模型的推导过程不变,只是将x换成,所以有:
其对偶问题为:
引入核函数:
有:
所以,求解的到
所以,由上式可以看出,模型的最优解可以看作是训练样本上的核函数展开,这一展开式又称为“支持向量展开式”。
需要说明的是核技巧的强大和缺点。
核技巧的优点有两个:
1、它使我们能够使用保证有效收敛的凸优化技术来学习非线性模型。需要指出的是,核技巧不是只适用于支持向量机,许多其他的线性模型也可用核技巧来增强。
2、核函数的构建,比直接构建再计算点积高效的多。
核函数的缺点:
核函数的主要缺点是,计算决策函数的成本是关于训练样本数目是线性的,当训练样本增加时,会花费很高的计算时间。
针对核函数的缺点,支持向量机的思想刚好可以弥补。因为我们只需要计算支持向量的核函数即可。其他样本的核函数,我们不需要计算。
软间隔(softmargin)与正则化
当样本数据线性不可分时,我们可以引入核函数的概念,找到一个映射让其线性可分,但是我们这里会有一个问题,当我们控制核函数让样本集线性可分时,会出现过拟合的现象,既模型在训练集上线性可分,在测试集上不一定线性可分,这时,我们为了解决这个问题,引入两个概念,一是软间隔,二是正则化。
软间隔
所谓软间隔,就是我们在寻找模型:(超平面)时,允许少量样本分错,这样,我们就间接降低了训练集的方差,升高了训练集的偏差,从而平衡测试集上偏差和方差问题,而且我们在引入软间隔后,我们寻找的核函数不会太苛刻,我们只需要寻找把低维线性不可分映射到高维大概率线性可分的对应的核函数即可。不需要完全线性可分,实际上我们不能保证在任何数据集上映射到高维后线性可分(Cover定理)。
在引入软间隔后,因为我们允许少量的样本分错,既,允许少量的样本不满足以下不等式:
所以,这些少许的分错的样本满足:
其实在引入软间隔后,分错的样本一定满足比上面更严格的不等式:
也就是说,不可能存在分错的样本满足
可以看到这里于周志华老师书上的不一样,因为,周志华老师书上推导错了。但是周老师错了两次又错回来,所以导致下面推到没问题。当然也可以认为周志华老师直接跳过了这一步推导。但是我觉得这一步的推导很重要。
接下来,我们要尽量的使这些分错的样本少。于是我们可以将上面的优化目标变为:
其中:
所以,这里的优化目标相当于综合考虑之前的最大化距离(最小化距离的倒数)和不满足约束条件的样本尽可能少。当C取值无穷大时,不论怎么样的,此时其最小化目标等价于之前不添加软间隔的版本。
C被称为惩罚因子,当C取值有限时,可以看到,错误样本会改变原始的优化目标,从而使原始的优化目标达不到以前的最小值。这样相当于间接的给之前优化目标一个惩罚。从而实现了降低训练集效果,提高测试集效果的作用,从而实现了防止过拟合。从而这一步相当于正则化的过程。
在上面我们引入的函数被称为0-1损失函数。表达式如下:
这个函数是分段函数,既不是联系也不是凸函数,还不利于求导。所以分析起问题来很不方便。在机器学习中经常用以下函数代替:
为什么可以使用这些损失函数代替0-1损失函数。是因为,只要这些函数在整个定义域上都大于等于0-1损失函数(图像全部位于0-1损失函数图像的右上方),都可以保证比0-1损失函数更严格的惩罚和更宽松的奖励。
下面是用Python画出以上四个损失函数。
import numpy as np
import math
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(18, 10))
x = np.linspace(start=-2, stop=3,num =1001,dtype=np.float)
logi = np.log(1 + np.exp(-x))/math.log(2)
boost = np.exp(-x)
y_01 = x < 0
y_hinge = 1.0 - x
y_hinge[y_hinge < 0] = 0
plt.plot(x, logi, 'r-', mec='k', label='Logistic Loss', lw=2)
plt.plot(x, y_01, 'g-', mec='k', label='0-1 Loss', lw=2)
plt.plot(x, y_hinge, 'b-',mec='k', label='Hinge Loss', lw=2)
plt.plot(x, boost, 'm--',mec='k', label='Adaboost Loss',lw=2)
plt.grid(True, ls='--')
plt.legend(loc='upper right')
plt.title('LossFun')
plt.show()
/root/anaconda3/lib/python3.6/site-packages/matplotlib/font_manager.py:1297: UserWarning: findfont: Font family ['sans-serif'] not found. Falling back to DejaVu Sans
(prop.get_family(), self.defaultFamily[fontext]))
在SVM中,我们用hinge损失函数来代替0-1损失。
上面得到,加入软间隔的优化目标变为:
用hinge损失函数来代替0-1损失后,优化目标变为:
正则化
上面的优化目标我们写出另一种形式:
由这种形式可以看出,目标函数变成了一般机器学习的形式,一个LossFunction加上一个L2范数的正则项。
所以这就是SVM的正则化过程。
松弛变量
对于上面的优化目标,我们不利于引入拉格朗日对偶问题。 所以要使用松弛变量,继续化简优化目标
引入松弛变量,使得:
化简得:
所以我们的优化问题变成以下问题:
所以,我们就把上面优化问题转化为带约束的,凸优化,且可以轻而一举的使用拉格朗日对偶问题。
引入拉格朗日函数:
其中: 为拉格朗日乘子。
所以对其求极值,另偏导数等于零得到:
将上面优化目标转为拉格朗日对偶问题:
其中:为原始问题第i个约束条件的拉格朗日乘子,m为样本个数。
对于上面拉格朗日对偶问题,我们用SMO算法解出,带入到以下等式:
可求得,由于原始的带约束的凸二次规划中,约束条件中是不等式约束,所以转化为拉格朗日函数求解时,会伴随KKT条件:
此时出现一个问题,在没有引入松弛变量的原始版本的SVM中,这里可以直接把支持向量带入KKT条件,得到b的值,但这里因为KKT条件中有 的存在,用支持向量是解不出b值的。
此时,根据KKT条件中的互补松弛性,当时:
当时,因为,最优解满足,所以,,由互补松弛性,得到。
所以当是,可求的:
所以求的b,但是,可以发现,满足的每一个支持向量都可以求的一个b,一般实际操作中,求这些b的均值。
自此,我们先将一个线性不可分通过映射转化为高维大概率线性可分,引入核函数我们不需要知道这个映射是什么,我们又考虑到高维线性不可分和泛化性问题,我们引入软间隔的概念,推导出了软间隔形式下的SVM,在求解这个SVM的时候,我们首先引入了hingeloss 代替原有的0-1loss,又引入松弛变量使问题等价的变的好求,最后通过拉格朗日乘子法转化为了拉格朗日对偶问题,通过解拉格朗日对偶问题,解决了最初的问题。
·SVM与逻辑回归
在SVM正则化中可以看出,软间隔的SVM的优化目标可以写成:
如果上面优化目标中的0-1损失替换成hinge损失。
则由hinge损失的特性,在时,函数值等于零.所以得到,时,损失函数消失为0,从而和这些样本点和函数无关。所以,仅仅与的样本点有关系。引入松弛变量,则目标函数仅仅与的这些点有关系,这些点叫做叫做支持向量,与支持向量以外的点没有关系。
如果上面优化目标中的0-1损失替换成对率损失。
则由对率损失的特性,在时,函数值不等于零.所以此时模型与全部的样本点相关。
此时,我们若定义x正样本的概率为:
则:
此时,可以看出,下式
就是使用负对数释然函数加正则项的损失函数,也就是逻辑回归的损失函数,所以这个模型就是逻辑回归。
所以从SVM推导的角度来看,SVM和逻辑回归的不同点是替代的损失函数比一样,相同点是,二者正则项都是L2范数。
·SVM与神经网络
以下为引用:
神经网络(Neural Network)与支持向量机(Support Vector Machines,SVM)是统计学习的代表方法。
可以认为神经网络与支持向量机都源自于感知机(Perceptron)。感知机是由Rosenblatt发明的线性分类模型(1958年)。感知机对线性分类有效,但现实中的分类问题通常是非线性的。
神经网络与支持向量机(包含核方法)都是非线性分类模型。1986年,Rummelhart与McClelland发明了神经网络的学习算法Back Propagation。后来,Vapnik等人于1992年提出了支持向量机。神经网络是多层(通常是三层)的非线性模型,支持向量机利用核技巧把非线性问题转换成线性问题。
神经网络与支持向量机一直处于“竞争”关系。
Scholkopf是Vapnik的大弟子,支持向量机与核方法研究的领军人物。据Scholkopf说,Vapnik当初发明支持向量机就是想’干掉’神经网络(He wanted to kill Neural Network)。支持向量机确实很有效,一段时间支持向量机一派占了上风。
近年来,神经网络一派的大师Hinton又提出了神经网络的Deep Learning算法(2006年),使神经网络的能力大大提高,可与支持向量机一比。Deep Learning假设神经网络是多层的,首先用Restricted Boltzmann Machine(非监督学习)学习网络的结构,然后再通过Back Propagation(监督学习)学习网络的权值。关于Deep Learning的命名,Hinton曾开玩笑地说: I want to call SVM shallow learning. (注:shallow 有肤浅的意思)。其实Deep Learning本身的意思是深层学习,因为它假设神经网络有多层。
总结来说,神经网络和SVM在出来线性问题上,可以认为SVM属于神经网络,在处理非线性问题上,两者完全走了不同的道路。SVM是引入了核函数,神经网络是加深网络层数。
SVM的优点是数学理论完备,参数相对较少,但是缺点是核函数设计很困难,神经网络的好处是网络设计很灵活,但可解释性很差。