本文是对多个内容的整理,不是原创,在此声明
1. 基本原理
支持向量机(SVM, support vector machine)
SVM详解
SVM 是一种二分类模型,该模型是定义为特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机;SVM 还包括核技巧,这使它成为实质上的非线性分类器。其学习策略就是间隔最大化,可形式化为一个求解凸二次规划的最小化问题。
- 二分类模型:给定的各个样本数据分别属于两个类之一,而目标是确定新数据点将归属到哪个类中。
- 线性分类器:分割样本点的分类器是一个超平面,这也就要求样本线性可分,这是hard-margin SVM的要求,对于后来的soft-margin SVM,放低为近似线性可分,再到后来的核技巧,要求映射到高维空间后要近似线性可分。
- 线性可分:和是维欧氏空间中的两个点集(点的集合)。如果存在 维向量 和实数,使得所有属于的点 xi 都有 ,而对于所有属于的点 则有 。则我们称和线性可分。
- 间隔最大化:首先要知道SVM中有函数间隔和几何间隔,函数间隔刻画样本点到超平面的相对距离,几何间隔刻画的是样本点到超平面的绝对距离,SVM的直观目的就是找到最小函数距离的样本点,然后最大化它的几何间隔。
- 凸二次规划:目标函数是二次的,约束条件是线性的。
1.2函数间隔与几何间隔
对于二分类学习,假设现在的数据是线性可分的,这时分类学习最基本的想法就是找到一个合适的超平面,该超平面能够将不同类别的样本分开,类似二维平面使用ax+by+c=0来表示,超平面实际上表示的就是高维的平面
对数据点进行划分时,易知:当超平面距离与它最近的数据点的间隔越大,分类的鲁棒性越好,即当新的数据点加入时,超平面对这些点的适应性最强,出错的可能性最小。因此需要让所选择的超平面能够最大化这个间隔Gap, 常用的间隔定义有两种,一种称之为函数间隔,一种为几何间隔,
1.2.1 函数间隔
在超平面w'x+b=0确定的情况下,|w'x+b|能够代表点x距离超平面的远近,易知:当w'x+b>0时,表示x在超平面的一侧(正类,类标为1),而当w'x+b<0时,则表示x在超平面的另外一侧(负类,类别为-1),因此(w'x+b)y 的正负性恰能表示数据点x是否被分类正确。于是便引出了函数间隔的定义(functional margin):
给定一个超平面,定义该超平面关于样本点 的函数间隔为: 定义该超平面关于训练集的函数间隔为:
可以看出:这样定义的函数间隔在处理SVM上会有问题,当超平面的两个参数w和b同比例改变时,函数间隔也会跟着改变,但是实际上超平面还是原来的超平面,并没有变化。例如:w1x1+w2x2+w3x3+b=0其实等价于2w1x1+2w2x2+2w3x3+2b=0,但计算的函数间隔却翻了一倍。从而引出了能真正度量点到超平面距离的概念--几何间隔(geometrical margin)。
1.2.2 几何间隔
几何间隔代表的则是数据点到超平面的真实距离,对于超平面w'x+b=0,w代表的是该超平面的法向量,设x为超平面外一点x在法向量w方向上的投影点,x与超平面的距离为r,则有x=x-r(w/||w||),又x在超平面上,即w'x+b=0
给定一个超平面,定义该超平面关于样本点 的几何间隔为: 定义该超平面关于训练集的几何间隔为:
函数间隔与几何间隔的关系
从上述函数间隔与几何间隔的定义可以看出:实质上函数间隔就是|w'x+b|,而几何间隔就是点到超平面的距离。
1.3 间隔最大化
求得一个几何间隔最大的分离超平面,可以表示为如下的最优化问题:
考虑函数间隔与几何间隔的关系式,改写为:
等价与下式
注意到最大化 和最小化是等价的,故最优化问题可转化为:
构造Lagrange函数:
令
则有
故原问题等价于
SVM核函数
- 高斯核函数(RBF)( Gaussian kernel function )
- 线性核函数(linear kernel)
- 多项式核函数 polynomial kernel function)
- sigmoid
- 拉普拉斯
序列最小优化算法(Sequential Minimal Optimization, SMO)
SVM损失函数
支持向量机的学习算法是求解凸二次规划的最优化算法。
支持向量机学习方法包含构建由简至繁的模型:
- 线性可分支持向量机
- 线性支持向量机
- 非线性支持向量机(使用核函数)
当训练数据线性可分时,通过硬间隔最大化(hard margin maximization)学习一个线性的分类器,即线性可分支持向量机,又成为硬间隔支持向量机;
当训练数据近似线性可分时,通过软间隔最大化(soft margin maximization)也学习一个线性的分类器,即线性支持向量机,又称为软间隔支持向量机;
当训练数据不可分时,通过核技巧(kernel trick)及软间隔最大化,学习非线性支持向量机。
注:以上各SVM的数学推导应该熟悉:硬间隔最大化(几何间隔)---学习的对偶问题---软间隔最大化(引入松弛变量)---非线性支持向量机(核技巧)。
SVM的主要特点
(1)非线性映射-理论基础
(2)最大化分类边界-方法核心
(3)支持向量-计算结果
(4)小样本学习方法
(5)最终的决策函数只有少量支持向量决定,避免了“维数灾难”
(6)少数支持向量决定最终结果—->可“剔除”大量冗余样本+算法简单+具有鲁棒性(体现在3个方面)
(7)学习问题可表示为凸优化问题—->全局最小值
(8)可自动通过最大化边界控制模型,但需要用户指定核函数类型和引入松弛变量
(9)适合于小样本,优秀泛化能力(因为结构风险最小)
(10)泛化错误率低,分类速度快,结果易解释
2. 核心公式
线性可分训练集:
学习得到的超平面:
相应的分类决策函数:
SVM基本思想:间隔最大化,不仅要讲正负类样本分开,而且对最难分的点(离超平面最近的点)也要有足够大的确信度将他们分开。
对偶算法
根据拉格朗日对偶性,上式的对偶问题为:
(1)求
得
将以上两式代入拉格朗日函数中消去,得
(2)求求对的极大,即是对偶问题
将极大改为极小,得
原问题的对偶问题:
求解方法: (1)由于该问题为凸优化问题,故可直接求解。 (2)由于该问题与其原问题等价,其原问题满足Slater定理,故该问题的解与KKT条件为充分必要的关系,故只需找到一组解满足KKT条件,即找到了问题的解(充分性)。
关于对偶问题的解,是由SMO算法解出来的,这个结合加入松弛变量的情况再讲。
解出对偶问题的解后,怎么求原问题的解?
由KKT条件可知,原问题和对偶问题均取到最优值的解需满足以下四个要求:
对原始变量梯度为0:
原问题可行:
不等式约束乘子非负:
对偶互补松弛:
由于1中
得到 这样就求出来了
用反证法我们可以得到至少有一个,假设所有的,由知道,,而显然不是原问题的解,我们要零解一点意义都没有。
接下来,求 取 的一个分量满足 ,则有对应的由4中的 ,有
代入和样本点,求出
这样超平面的两个参数就都求出来了
至于为什么SVM叫支持向量机,因为我们发现只有时,对应的样本才会对最终超平面的结果产生影响,此时, 也就是函数间隔为1,我们称这类样本为支持向量,所以这个模型被叫做支持向量机。支持向量的个数一般很少,所以支持向量机只有很少的“重要的”训练样本决定。
核技巧
基本思想:找一个映射Φ(一般为高维映射),将样本点特征x映射到新的特征空间Φ(x),使其在新的特征空间中线性可分(或近似线性可分),然后利用之前的SVM算法在新的特征空间中对样本进行分类。 [图片上传失败...(image-3730ea-1645787776121)]
流程: 输入训练集其中 (1)选择合适的映射函数Φ,将训练集??映射为 (2)选择惩罚参数C,构造并求解约束最优化问题(原问题的对偶问题) 求得最优解 (3)计算: 选择的一个分量满足,计算 (4)求得分离超平面和分类决策函数:
该算法的问题: (1)合适的映射函数??太难找,几乎找不到 (2)假设找到了映射函数??,由于将数据映射到高维,在高维空间中做运算,计算量太大(维数灾难)
改进: 考虑到算法中如果不需写出分离超平面,即不需写出,而是直接用来做预测,同样可以给出分类边界以及达到预测目的。这样的话,算法中需要用到样本的地方全部以内积形式出现,如果我们能够找到一种函数,能够在低维空间中直接算出高维内积,并且该函数对应着某个映射,即解决了以上两个问题。
核函数的本质:用相似度函数重新定义内积运算。
什么样的函数可以作为核函数? 核函数对应的Gram矩阵为半正定矩阵。
3. 面试问题
支持向量中的向量是指什么?
在支持向量机中,距离超平面最近的且满足一定条件的几个训练样本点被称为支持向量。SVM 为什么采用间隔最大化?
当训练数据线性可分时,存在无穷个分离超平面可以将两类数据正确分开。感知机利用误分类最小策略,求得分离超平面,不过此时的解有无穷多个。线性可分支持向量机利用间隔最大化求得最优分离超平面,这时,解是唯一的。另一方面,此时的分隔超平面所产生的分类结果是最鲁棒的,对未知实例的泛化能力最强。可以借此机会阐述一下几何间隔以及函数间隔的关系。为什么要将求解 SVM 的原始问题转换为其对偶问题
- 对偶问题往往更易求解,当我们寻找约束存在时的最优点的时候,约束的存在虽然减小了需要搜寻的范围,但是却使问题变得更加复杂。为了使问题变得易于处理,我们的方法是把目标函数和约束全部融入一个新的函数,即拉格朗日函数,再通过这个函数来寻找最优点。
- 可以自然引入核函数,进而推广到非线性分类问题。
为什么 SVM 要引入核函数
当样本在原始空间线性不可分时,可将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间内线性可分。而引入这样的映射后,所要求解的对偶问题的求解中,无需求解真正的映射函数,而只需要知道其核函数。核函数的定义:,即在特征空间的内积等于它们在原始样本空间中通过核函数 计算的结果。一方面数据变成了高维空间中线性可分的数据,另一方面不需要求解具体的映射函数,只需要给定具体的核函数即可,这样使得求解的难度大大降低。-
SVM有哪些核函数
SVM 核函数之间的区别
SVM 核函数一般选择线性核和高斯核(RBF 核)。
线性核:主要用于线性可分的情形,参数少,速度快,对于一般数据,分类效果已经很理想了。
RBF 核:主要用于线性不可分的情形,参数多,分类结果非常依赖于参数。
如果 Feature 的数量很大,跟样本数量差不多,这时候选用线性核的 SVM。
如果 Feature 的数量比较小,样本数量一般,不算大也不算小,选用高斯核的 SVM。
- 为什么SVM对缺失数据敏感
- SVM 没有处理缺失值的策略
- SVM的效果和支持向量点有关,缺失值可能影响支持向量点的分布
SVM 原理是什么
SVM是一种二类分类模型,其主要思想为找到空间中的一个更够将所有数据样本划开的超平面,并且使得数据集中所有数据到这个超平面的距离最短。它的基本模型是在特征空间中寻找间隔最大化的分离超平面的线性分类器。(间隔最大使它有别于感知机)。需要求解能够正确划分训练数据集并且几何间隔最大的分离超平面。对于线性可分的数据集来说,这样的超平面有无穷多个(即感知机),但是几何间隔最大的分离超平面却是唯一的。SVM如何处理多分类问题?
一般有两种做法:
直接法:直接在目标函数上修改,将多个分类面的参数求解合并到一个最优化问题里面。看似简单但是计算量却非常的大。
-
间接法:对训练器进行组合。其中比较典型的有一对一,和一对多。
- 一对多:对每个类都训练出一个分类器,由svm是二分类,所以将此而分类器的两类设定为目标类为一类,其余类为另外一类。这样针对k个类可以训练出k个分类器,当有一个新的样本来的时候,用这k个分类器来测试,那个分类器的概率高,那么这个样本就属于哪一类。这种方法效果不太好,bias比较高。
- 一对一:针对任意两个类训练出一个分类器,如果有k类,一共训练出C(2,k) 个分类器,这样当有一个新的样本要来的时候,用这C(2,k) 个分类器来测试,每当被判定属于某一类的时候,该类就加一,最后票数最多的类别被认定为该样本的类。
- SVM 的对偶问题
对偶问题,顾名思义,可以理解成优化等价的问题,更一般地,是将一个原始目标函数的最小化转化为它的对偶函数最大化的问题。对于当前的优化问题,首先我们写出它的朗格朗日函数:
上式很容易验证:当其中有一个约束条件不满足时,L的最大值为 ∞(只需令其对应的α为 ∞即可);当所有约束条件都满足时,L的最大值为1/2||w||^2(此时令所有的α为0),因此实际上原问题等价于:
由于这个的求解问题不好做,因此一般我们将最小和最大的位置交换一下(需满足KKT条件) ,变成原问题的对偶问题:
这样就将原问题的求最小变成了对偶问题求最大(用对偶这个词还是很形象),接下来便可以先求L对w和b的极小,再求L对α的极大
SMO 算法原理
SVM 为什么可以处理非线性问题?
核函数的引入SVM 中的优化技术有哪些?
SVM 的惩罚系数如何确定?
正则化参数对支持向量数的影响
如何解决线性不可分问题?
软间隔和硬间隔
hinge loss
LR和SVM的联系与区别
-
联系:
- LR和SVM都可以处理分类问题,且一般都用于处理线性二分类问题
- 两个方法都可以增加不同的正则化项,如l1、l2等等。所以在很多实验中,两种算法的结果是很接近的。
- 如果不考虑核函数,LR和SVM都是线性分类算法,也就是说他们的分类决策面都是线性的。
- LR和SVM都是监督学习算法。
- LR和SVM都是判别模型。
判别模型会生成一个表示P(Y|X)的判别函数(或预测模型),而生成模型先计算联合概率p(Y,X)然后通过贝叶斯公式转化为条件概率。简单来说,在计算判别模型时,不会计算联合概率,而在计算生成模型时,必须先计算联合概率。或者这样理解:生成算法尝试去找到底这个数据是怎么生成的(产生的),然后再对一个信号进行分类。基于你的生成假设,那么那个类别最有可能产生这个信号,这个信号就属于那个类别。判别模型不关心数据是怎么生成的,它只关心信号之间的差别,然后用差别来简单对给定的一个信号进行分类。常见的判别模型有:KNN、SVM、LR,常见的生成模型有:朴素贝叶斯,隐马尔可夫模型。当然,这也是为什么很少有人问你朴素贝叶斯和LR以及朴素贝叶斯和SVM有什么区别(哈哈,废话是不是太多)。
-
区别:
- LR是参数模型,SVM是非参数模型。
- 从目标函数来看,区别在于逻辑回归采用的是交叉熵损失函数,SVM采用的是合页损失函数,这两个损失函数的目的都是增加对分类影响较大的数据点的权重,减少与分类关系较小的数据点的权重。
- SVM的处理方法是只考虑支持向量点,也就是和分类最相关的少数点,去学习分类器。而逻辑回归通过非线性映射,大大减小了离分类平面较远的点的权重,相对提升了与分类最相关的数据点的权重。
- 逻辑回归相对来说模型更简单,好理解,特别是大规模线性分类时比较方便。而SVM的理解和优化相对来说复杂一些,SVM转化为对偶问题后,分类只需要计算与少数几个支持向量的距离,这个在进行复杂核函数计算时优势很明显,能够大大简化模型和计算。