一、什么是SVM?
- 支持向量机是一种二分类模型。它是定义在特征空间上的、间隔最大的线性分类器。
-
-
间隔最大使得支持向量机有别于感知机。如果数据集是线性可分的,那么感知机获得的模型可能有很多个,而支持向量机选择的是间隔最大的那一个。
-
支持向量机还支持核技巧,从而使它成为实质上的非线性分类器。
-
- 支持向量机支持处理线性可分数据集、非线性可分数据集。
-
- 当训练数据线性可分时,通过硬间隔最大化,学习一个线性分类器,即线性可分支持向量机(也称作硬间隔支持向量机)。
- 当训练数据近似线性可分时,通过软间隔最大化,学习一个线性分类器,即线性支持向量机(也称为软间隔支持向量机)。
- 当训练数据不可分时,通过使用核技巧以及软间隔最大化,学习一个非线性分类器,即非线性支持向量机。
-
当输入空间为欧氏空间或离散集合、特征空间为希尔伯特空间时,将输入向量从输入空间映射到特征空间,得到特征向量。支持向量机的学习是在特征空间进行的。
-
线性可分支持向量机、线性支持向量机假设这两个空间的元素一一对应,并将输入空间中的输入映射为特征空间中的特征向量。
-
非线性支持向量机利用一个从输入空间到特征空间的非线性映射将输入映射为特征向量。
- 特征向量之间的内积就是核函数,使用核函数可以学习非线性支持向量机。
- 非线性支持向量机等价于隐式的在高维的特征空间中学习线性支持向量机,这种方法称作核技巧。
-
二、SVM的种类
硬间隔SVM | |
软间隔SVM | |
kernel SVM |
三、硬间隔SVM(线性可分支持向量机)
给定一个特征空间上的训练数据集$mathbb{D}=left{left(overrightarrow{mathbf{x}}_{1}, ilde{y}_{1} ight),left(overrightarrow{mathbf{x}}_{2}, ilde{y}_{2} ight), cdots,left(overrightarrow{mathbf{x}}_{N}, ilde{y}_{N} ight) ight}$ ,其中$overrightarrow{mathbf{x}}_{i} in mathcal{X}=mathbb{R}^{n}, ilde{y}_{i} in mathcal{Y}={+1,-1}, i=1,2, cdots, N$ 。
$overrightarrow{mathbf{x}}_{i}$为第$i$个特征向量,也称作实例;$ ilde{y}_{i}$为$overrightarrow{mathbf{x}}_{i}$的类标记; $left(overrightarrow{mathbf{x}}_{i}, ilde{y}_{i} ight)$称作样本点。
- 当$ ilde{y}_{i}=+1$时,称$overrightarrow{mathbf{x}}_{i}$为正例。
- 当$ ilde{y}_{i}=-1$时,称$overrightarrow{mathbf{x}}_{i}$为负例。
假设训练数据集是线性可分的,则学习的目标是在特征空间中找到一个分离超平面,能将实例分到不同的类。
分离超平面对应于方程$overrightarrow{mathbf{w}}^{*} cdot overrightarrow{mathbf{x}}+b^{*}=0$ , 它由法向量$overrightarrow{mathbf{W}}$和截距$T_{k}( ilde{Lambda})$决定,可以用$(overrightarrow{mathbf{w}}, b)$来表示。
1.函数间隔
2.几何间隔
3.硬间隔最大化
基本思想:求解能够正确划分训练数据集并且几何间隔最大的分离超平面。几何间隔最大化又称作硬间隔最大化。
几何间隔最大化的物理意义:不仅将正负实例点分开,而且对于最难分辨的实例点(距离超平面最近的那些点),也有足够大的确信度来将它们分开。
对于线性可分的训练数据集而言,线性可分分离超平面有无穷多个(等价于感知机),但几何间隔最大的分离超平面是唯一的。
算法:
- 输入:线性可分训练数据集$mathbb{D}=left{left(overrightarrow{mathbf{x}}_{1}, ilde{y}_{1} ight),left(overrightarrow{mathbf{x}}_{2}, ilde{y}_{2} ight), cdots,left(overrightarrow{mathbf{x}}_{N}, ilde{y}_{N} ight) ight}$,其中,$overrightarrow{mathbf{x}}_{i} in mathcal{X}=mathbb{R}^{n}, ilde{y}_{i} in mathcal{Y}={+1,-1}, i=1,2, cdots, N$
- 输出:
- 最大几何间隔的分离超平面
- 分类决策函数
- 算法步骤:
- 构造并且求解约束最优化问题:
-
$min _{overline{w}, b} frac{1}{2}|overrightarrow{mathbf{w}}|_{2}^{2}$
s.t. $quad ilde{y}_{i}left(overrightarrow{mathbf{w}} cdot overrightarrow{mathbf{x}}_{i}+b ight)-1 geq 0, i=1,2, cdots, N$求得最优解$overrightarrow{mathbf{w}}^{*}, b^{*}$
-
- 由此得到分离超平面:$overrightarrow{mathbf{w}}^{*} cdot overrightarrow{mathbf{x}}+b^{*}=0$,以及分类决策函数 :$f(overrightarrow{mathbf{x}})=operatorname{sign}left(overrightarrow{mathbf{w}}^{*} cdot overrightarrow{mathbf{x}}+b^{*} ight)$
可以证明:若训练数据集$mathbb{D}$线性可分,则可将训练数据集中的样本点完全正确分开的最大间隔分离超平面存在且唯一。
4.支持向量
5.对偶算法
-
将线性可分支持向量机的最优化问题作为原始最优化问题,应用拉格朗日对偶性,通过求解对偶问题得到原始问题的最优解。这就是线性可分支持向量机的对偶算法。
-
对偶算法的优点:
- 对偶问题往往更容易求解。
- 引入了核函数,进而推广到非线性分类问题。
- 根据拉格朗日对偶性,原始问题的对偶问题是极大极小问题,先求min L(w,b,alpha),拉格朗日函数分别对w,b求偏导数,并令其等于0,再带入拉格朗日函数,最后变成求对偶问题在参数alpha的约束下的极大值,
为什么将原问题转为对偶问题?
- 对偶问题将原始问题中的约束转为了对偶问题中的等式约束(KKT)
- 方便核函数的引入
- 改变了问题的复杂度。由求特征向量w转化为求比例系数a,在原始问题下,求解的复杂度与样本的维度有关,即w的维度。在对偶问题下,只与样本数量有关。
SVM对偶问题仍可以用二次规划算法来求解,但是问题规模正比于训练样本数,在实际任务中开销很大。往往采用更高效的算法如SMO或者 Pegasos 。
假设求解出了$alpha$, 那么根据KKT条件, 可得:
- ${f w} = sum_{i=1}^n alpha_iy_i{f x_i}$
- 选取一个$alpha_i>0$ 可得$y_i({f w^T x_i} + b) = 1 Rightarrow {f w^T x_i} + b= y_i Rightarrow b = y_i – {f w^T x_i}$
观察对偶支持向量机求解可以发现对偶问题的好处为:
- 只需要优化$alpha$而不是$b$和$w$,降低了算法的时间复杂度
- 通过查看$a_i>0$便可找出支持向量
求得$w$和$b$即可构造超平面和对应的决策函数,和感知机一样:$g_{svm}(x)=sign(wTx+b)$
四、软间隔SVM(线性支持向量机)
1.原始问题
2.对偶问题
3.支持向量
4.合页损失函数
理论上SVM 的目标函数可以使用梯度下降法来训练。但存在三个问题:
- 合页损失函数部分不可导。这可以通过sub-gradient descent 来解决;
- 收敛速度非常慢;
- 无法得出支持向量和非支持向量的区别
五、非线性支持向量机
1.定义
用线性分类方法求解非线性分类问题分两步:
- 首先用一个变换将原空间的数据映射到新空间。
- 再在新空间里用线性分类学习方法从训练数据中学习分类模型。
这一策略称作核技巧。
2.核函数
(1)定义
(2)核函数选择
-
a.线性核函数
线性核,主要用于线性可分的情况,我们可以看到特征空间到输入空间的维度是一样的,其参数少速度快,对于线性可分数据,其分类效果很理想,因此我们通常首先尝试用线性核函数来做分类,看看效果如何,如果不行再换别的
-
b.多项式核函数
,对应的支持向量机是一个p次多项式分类器。
多项式核函数可以实现将低维的输入空间映射到高纬的特征空间,但是多项式核函数的参数多,当多项式的阶数比较高的时候,核矩阵的元素值将趋于无穷大或者无穷小,计算复杂度会大到无法计算。
-
c.高斯(RBF)核函数
它是最常用的核函数,对应于无穷维空间中的点积;它也被称作径向基函数radial basis function:RBF
,因为其值沿着向外辐射的方向减小;对应的支持向量机是高斯径向基函数分类器(radial basis function
) 。
-
d.sigmoid核函数
采用sigmoid核函数,支持向量机实现的就是一种多层神经网络。
总结:在选用核函数的时候,如果我们对我们的数据有一定的先验知识,就利用先验来选择符合数据分布的核函数;如果不知道的话,通常使用交叉验证的方法,来试用不同的核函数,误差最小的即为效果最好的核函数,或者也可以将多个核函数结合起来,形成混合核函数。选择核函数的技巧:
- 如果特征的数量大到和样本数量差不多,则选用LR或者线性核的SVM;
- 如果特征的数量小,样本的数量正常,则选用SVM+高斯核函数;
- 如果特征的数量小,而样本的数量很大,则需要手工添加一些特征从而变成第一种情况。
(3)算法
六、支持向量回归
1.原始问题
2.对偶问题
七、序列最小最优化方法
支持向量机的学习问题可以形式化为求解凸二次规划问题。这样的凸二次规划问题具有全局最优解,并且有多种算法可以用于这一问题的求解。当训练样本容量非常大时,这些算法往往非常低效。而序列最小最优化算法(sequential minimal optimization:SMO)可以高效求解。
1.SMO算法的思路
-
若所有变量都满足条件,则最优化问题的解就得到了。
-
否则,选择两个变量的同时固定其他所有变量,针对这两个变量构建一个二次规划子问题。
-
这个二次规划子问题关于这两个变量的解应该更接近原始二次规划问题的解,因为这会使得原始二次规划问题的目标函数值变得更小。
-
更重要的是,这个二次规划子问题可以通过解析的方法求解。
-
此时子问题有两个变量,至少存在一个变量不满足约束条件(否则就是所有变量满足条件了)。假设其中一个是违反约束最严重的那个,另一个由约束等式自动确定:
-
SMO算法将原始问题不断地分解为子问题并且对子问题求解,进而达到求解原问题的目的。
整个SMO算法包括两部分:
- 求解两个变量二次规划的解析方法
- 选择变量的启发式方法
八、SVM总结
-
支持向量机的优点:
- 有严格的数学理论支持,可解释性强。
- 能找出对任务至关重要的关键样本(即:支持向量)。
- 采用核技巧之后,可以处理非线性分类/回归任务。
-
支持向量机的缺点:
- 训练时间长。当采用SMO 算法时,由于每次都需要挑选一对参数,因此时间复杂度为$O(N^2)$ ,其中$N$为$alpha$的长度,也就是训练样本的数量。
- 当采用核技巧时,如果需要存储核矩阵,则空间复杂度为$O(N^2)$。
- 模型预测时,预测时间与支持向量的个数成正比。当支持向量的数量较大时,预测计算复杂度较高。
因此支持向量机目前只适合小批量样本的任务,无法适应百万甚至上亿样本的任务。
九、面试问题
1.简单介绍SVM(详细原理)
]从分类平面,到求两类间的最大间隔,到转化为求间隔分之一,等优化问题,然后就是优化问题的解决办法,首先是用拉格拉日乘子把约束优化转化为无约束优化,对各个变量求导令其为零,得到的式子带入拉格朗日式子从而转化为对偶问题, 最后再利用SMO(序列最小优化)来解决这个对偶问题。svm里面的c有啥用
C>0称为惩罚参数,一般事先由应用问题决定,控制目标函数中两项 (“寻找 margin 最大的超平面”和“保证数据点偏差量最小”)之间的权重,C越大时对误分类的惩罚增大,C值小时对误分类的惩罚减小。最小化目标函数包含两层含义:使$frac{1}{2}||w||^2$尽量小即间隔尽量大,同时使误分类点的个数尽量小,C是调和二者的系数。
2.加大训练数据量一定能提高SVM准确率吗?
- SVM本质上是凸优化问题,如果增加的样本点只是无效约束,并不会影响其最后的结果。这也就是为什么SVM适合于小样本量数据集的原因。
- 随样本量而使模型自身发生改变的,是统计推断:最大似然,MAP,再到贝叶斯,每个都涉及到样本数prod的一项,这些方法建立的模才真正和样本数量有最直接的联系。
3.SVM的推导
解释原问题和对偶问题,SVM原问题和对偶问题的关系,KKT限制条件,KKT条件有哪些,完整描述;软间隔问题,解释支持向量、核函数(哪个地方引入、画图解释高维映射,高斯核可以升到多少维,如何选择核函数),引入拉格朗日的优化方法的原因,最大的特点,损失函数解释
原始问题与对偶问题的对应关系:
- 目标函数对原始问题是极大化,对偶问题则是极小化
- 原始问题目标函数中的收益系数(优化函数中变量前面的系数)是对偶问题约束不等式中的右端常数,而原始问题约束不等式中的右端常数则是对偶问题中目标函数的收益系数
- 原始问题和对偶问题的约束不等式的符号方向相反
- 原始问题约束不等式系数矩阵转置后即为对偶问题的约束不等式的系数矩阵
- 原始问题的约束方程数对应于对偶问题的变量数,而原始问题的变量数对应于对偶问题的约束方程数
- 对偶问题的对偶问题是原始问题
SVM 为什么要从原始问题变为对偶问题来求解?
- 对偶问题将原始问题中的约束转为了对偶问题中的等式约束
- 方便核函数的引入
- 改变了问题的复杂度。由求特征向量w转化为求比例系数a,在原始问题下,求解的复杂度与样本的维度有关,即w的维度。在对偶问题下,只与样本数量有关。
- 求解更高效,因为只用求解比例系数a,而比例系数a只有支持向量才为非0,其他全为0.
核函数的作用:
- 当我们在解决线性不可分的问题时,我们需要通过一个映射函数,把样本值映射到更高维的空间或者无穷维。在特征空间中,我们对线性可分的新样本使用前面提到过的求解线性可分的情况下的分类问题的方法时,需要计算样本内积,但是因为样本维数很高,容易造成“维数灾难”,所以这里我们就引入了核函数,把高维向量的内积转变成了求低维向量的内积问题。
- 内积的作用,内积也是可以衡量相似度的!分类问题就是一个找相似样本的过程,你跟我相似,你就属于我这个类,所以在求出的目标函数中会出现内积,可以用这个原理来理解。内积是可以衡量两个向量的相似度的,例如,我们常常可以通过两个相量的距离和夹角来表示相似度,这些属性都可以通过两个向量的内积值来获得。
高斯核可以升到多少维?
高斯核就是把每个数据都看做是一个基准然后分别计算所有数据与这个基准之间的高斯函数。这样如果原始数据维度是2,有n条数据,就成功的把一个2维的向量升到了n维。
那么为什么说高斯核函数能将数据映射到无穷维度空间呢?
“如果映射后空间是k维的话,那内积矩阵的秩最大是k。而任给n个互不重合的样本, Gaussian kernel的内积矩阵都是满秩的。所以你无论假设k是多少,都能找到n>k,矛盾,所以必须是无限维的。”
意思是说,我现在有n条数据,那么我把k维成功升到了n维,你告诉我说高斯核函数能把数据集升到n维。这个时候我再给你加一条新的与原始数据不重合的样本,那么数据就可以映射到n+1维空间,与之前结论矛盾,因此,高斯核函数能将数据升到无穷维。
那么升到无限维有什么好处呢?
vc维提升(线性分类器的vc维是n+1,如果升到无穷维,则是vc维也是无穷的),即总能找到一个分类面将数据集很好的分开。vc维代表了分类能力。
如何选择核函数
最常用的是Linear核与RBF核:
- Linear核:主要用于线性可分的情形。参数少,速度快,对于一般数据,分类效果已经很理想了。
- RBF核:主要用于线性不可分的情形。参数多,分类结果非常依赖于参数。有很多人是通过训练数据的交叉验证来寻找合适的参数,不过这个过程比较耗时。使用libsvm,默认参数,RBF核比Linear核效果稍差。通过进行大量参数的尝试,一般能找到比linear核更好的效果。
4.SVM与LR最大区别,LR和SVM对于outlier的敏感程度分析,逻辑回归与SVM的区别
SVM更关心的是靠近中间分割线的点,让他们尽可能地远离中间线,而不是在所有点上达到最优,因为那样的话,要使得一部分点靠近中间线来换取另外一部分点更加远离中间线。因此支持向量机和和逻辑斯蒂回归的不同点,一个是考虑局部(不关心已经确定远离的点,更考虑靠近中间分割线的点),一个是考虑全局(已经远离的点可能通过调整中间线使其能够更加远离)
这两个损失函数的目的都是增加对分类影响较大的数据点的权重,减少与分类关系较小的数据点的权重。SVM的处理方法是只考虑support vectors,也就是和分类最相关的少数点,去学习分类器。而逻辑回归通过非线性映射,大大减小了离分类平面较远的点的权重,相对提升了与分类最相关的数据点的权重,两者的根本目的都是一样的。
逻辑回归与SVM的区别总结:
- LR采用log损失,SVM采用合页损失。
- LR对异常值敏感,SVM对异常值不敏感。
- 在训练集较小时,SVM较适用,而LR需要较多的样本。
- LR模型找到的那个超平面,是尽量让所有点都远离他,而SVM寻找的那个超平面,是只让最靠近中间分割线的那些点尽量远离,即只用到那些支持向量的样本。
- 对非线性问题的处理方式不同,LR主要靠特征构造,必须组合交叉特征,特征离散化。SVM也可以这样,还可以通过kernel。
怎么根据特征数量和样本量来选择SVM和LR模型呢:
- 如果Feature的数量很大,跟样本数量差不多,这时候选用LR或者是Linear Kernel的SVM
- 如果Feature的数量比较小,样本数量一般,不算大也不算小,选用SVM+Gaussian Kernel
- 如果Feature的数量比较小,而样本数量很多,需要手工添加一些feature变成第一种情况。(LR和不带核函数的SVM比较类似。)
5.如何解决多分类问题、可以做回归吗,怎么做?
SVM如何解决多分类问题:
- 一对多法,训练时依次把某个类别的样本归为一类,其他剩余的样本归为另一类,这样k个类别的样本就构造出了k个SVM。分类时将未知样本分类为具有最大分类函数值的那类。
- 一对一法,其做法是在任意两类样本之间设计一个SVM,因此k个类别的样本就需要设计k(k-1)/2个SVM。当对一个未知样本进行分类时,最后得票最多的类别即为该未知样本的类别。Libsvm中的多类分类就是根据这个方法实现的。
- 层次支持向量机(H-SVMs),层次分类法首先将所有类别分成两个子类,再将子类进一步划分成两个次级子类,如此循环,直到得到一个单独的类别为止。
支持向量回归 SVR:见第六节
6.与其他分类器对比的优缺点
(1)决策树分类器
优点:
- 利用决策树可以很容易的解释一个受训模型,而且算法将最重要的判断因素很好的安排在了靠近树的根部位置。
- 决策树能找到能使信息增益达到最大化的分界线,因此它能够同时处理分类数据和数值数据。
- 它能够很容易地处理变量之间的相互影响。
缺点:
- 不支持向量式训练,每次训练都要从头开始。
(2)神经网络
优点:
- 能够处理复杂的非线性函数,并且能发现不同输入之间的依赖关系。
- 允许增量式训练
缺点:
- 神经网络是一种黑盒方法,无法确知推导过程。
- 在选择训练数据的比率及与问题相适应的网络规模方面,并没有明确的规则可以遵循。
(3)支持向量机
优点:
- 在对新的观测数据进行分类时速度极快,因为支持向量机分类时只需判断坐标点位于分界线的哪一侧即可。
- 通过将分类输入转换成数值输入,可以令支持向量机同时支持分类数据和数值数据。
缺点:
- 针对每个数据集的最佳核变换函数及其相应的参数都是不一样的,而且每当遇到新的数据集时都必须重新确定这些函数及参数。
- 和神经网络一样,SVM也是一种黑盒技术,实际上,由于存在向高维空间的变换,SVM的分类过程甚至更加难于解释。
(4)k-最近邻算法
优点:
- 能够利用复杂函数进行数值预测,同时又保持简单易懂的特点
- 合理的数据缩放量不但可以改善预测的效果,而且还可以告诉我们预测过程中各个变量的重要程度。
- KNN是一种在线(online)技术,这意味着新的数据可以在任何时候被添加进来,而不需要进行任何的计算。
缺点:
- 为了完成预测,它要求所有的训练数据都必须缺一不可,为了找到最为接近的数据项,每一项待预测的数据必须和其他数据项进行比较,会产出极大的数据计算量。
- 寻找合理的缩放因子并不是那么简单。
7.支持向量机(SVM)是否适合大规模数据?
https://www.zhihu.com/question/19591450
对于基于支持向量机的大规模线性分类问题,目前已经能比较好地解决。
对于非线性分类问题,基于SMO方法的SVM-Light和LibSVM目前仍被广泛使用,他们最坏情况下复杂度是O(m^2),并不适合在大规模数据集上做训练。非线性SVM的最大问题不是训练时代价问题,而是检测时代价太高。
8.SVM和逻辑斯特回归对同一样本A进行训练,如果某类中增加一些数据点,那么原来的决策边界分别会怎么变化?
https://www.zhihu.com/question/30123068
9.Linear SVM 和 LR 有什么异同?
https://www.zhihu.com/question/26768865
参考文献:
【3】『我爱机器学习』深入理解SVM(一) 原始问题和对偶问题
【5】面试总结——SVM