【机器学习】SVM支持向量机

SVM 原理

SVM 是一种二类分类模型。它的基本模型是在特征空间中寻找间隔最大化的分离超平面的线性分类器。

  • 当训练样本线性可分时,通过硬间隔最大化,学习一个线性分类器,即线性可分支持向量机;
  • 当训练数据近似线性可分时,引入松弛变量,通过软间隔最大化,学习一个线性分类器,即线性支持向量机;
  • 当训练数据线性不可分时,通过使用核技巧及软间隔最大化,学习非线性支持向量机。

以上各种情况下的数学推到应当掌握,硬间隔最大化(几何间隔)、学习的对偶问题、软间隔最大化(引入松弛变量)、非线性支持向量机(核技巧)。

为什么要引入对偶问题?

这涉及到凸优化的知识:首先是我们有不等式约束方程,这就需要我们写成min max的形式来得到最优解。而这种写成这种形式对x不能求导,所以我们需要转换成max min的形式,这时候,x就在里面了,这样就能对x求导了。而为了满足这种对偶变换成立,就需要满足KKT条件(KKT条件是原问题与对偶问题等价的必要条件,当原问题是凸优化问题时,变为充要条件)

  1. 对偶问题将原始问题中的约束转为了对偶问题中的等式约束
  2. 方便核函数的引入
  3. 改变了问题的复杂度。由求特征向量w转化为求比例系数a,在原始问题下,求解的复杂度与样本的维度有关,即w的维度。在对偶问题下,只与样本数量有关。(excuse me???)
  4. 求解更高效,因为只用求解alpha系数,而alpha系数只有支持向量才非0,其它全部为0。

为什么对偶问题好求解?原始问题不能求吗?

可以求。上面第三条(我个人感觉有些问题问的很不寻常,是因为面试官不是做这个领域的,所以。。。)

什么是对偶问题?

将广义拉格朗日函数极小极大值问题转化为约束最优化问题

KKT条件下,对偶问题与原始问题最优解那个问题。

根据拉格朗日对偶性,原始问题的对偶问题是极大极小问题

拉格朗日乘子法、KKT条件、拉格朗日对偶性

为什么要选hingle loss?

怎么样理解SVM中的hinge-loss? 
1. 实现了软间隔分类(这个Loss函数都可以做到) 
2. 保持了支持向量机解的稀疏性。换用其他的Loss函数的话,SVM就不再是SVM了。正是因为HingeLoss的零区域对应的正是非支持向量的普通样本,从而所有的普通样本都不参与最终超平面的决定,这才是支持向量机最大的优势所在,对训练样本数目的依赖大大减少,而且提高了训练效率。

为什么非支持向量对应的 α 等于零呢?

直观上来理解的话,就是这些“后方”的点——正如我们之前分析过的一样,对超平面是没有影响的,由于分类完全由超平面决定,所以这些无关的点并不会参与分类问题的计算,因而也就不会产生任何影响了。这个结论也可由刚才的推导中得出,回忆一下我们刚才通过 Lagrange multiplier 得到的目标函数:

注意到如果 xi 是支持向量的话,上式中红颜色的部分是等于 0 的(因为支持向量的函数间隔等于 1 ),而对于非支持向量来说,函数间隔会大于 1 ,因此红颜色部分是大于零的,而 αi 又是非负的,为了满足最大化,αi 必须等于 0 。这也就是这些非 Supporting Vector 的点的悲惨命运了。

什么样的函数能做核函数

Mercer 定理任何半正定的函数都可以作为核函数。所谓半正定的函数f(xi,xj),是指拥有训练数据集合(x1,x2,...xn),我们定义一个矩阵的元素aij = f(xi,xj),这个矩阵式n*n的,如果这个矩阵是半正定的,那么f(xi,xj)就称为半正定的函数。

请注意,这个mercer定理不是核函数必要条件,只是一个充分条件,即还有不满足mercer定理的函数也可以是核函数。所谓半正定指的就是核矩阵K的特征值均为非负。

《统计学习方法》:只要一个对称函数所对应的核矩阵半正定,它就能作为核函数使用。

核函数的选择问题

在选取核函数解决实际问题时,通常采用的方法有:一是利用专家的先验知识预先选定核函数;二是采用Cross-Validation方法,即在进行核函数选取时,分别试用不同的核函数,归纳误差最小的核函数就是最好的核函数。如针对傅立叶核、RBF核,结合信号处理问题中的函数回归问题,通过仿真实验,对比分析了在相同数据条件下,采用傅立叶核的SVM要比采用RBF核的SVM误差小很多。

在我的研究做实验过程中,最常用的是Linear核与RBF核。
1). Linear核:主要用于线性可分的情形。参数少,速度快,对于一般数据,分类效果已经很理想了。
2). RBF核(高斯核):主要用于线性不可分的情形参数多,分类结果非常依赖于参数。有很多人是通过训练数据的交叉验证(grid search)来寻找合适的参数,不过这个过程比较耗时。我个人的体会是:使用libsvm,默认参数,RBF核比Linear核效果稍差。通过进行大量参数的尝试,一般能找到比linear核更好的效果。

(最理想的情况下,我们希望知道数据的具体形状和分布,从而得到一个刚好可以将数据映射成线性可分的 ϕ(⋅) ,然后通过这个 ϕ(⋅) 得出对应的 κ(⋅,⋅) 进行内积计算。然而,第二步通常是非常困难甚至完全没法做的。不过,由于第一步也是几乎无法做到,因为对于任意的数据分析其形状找到合适的映射本身就不是什么容易的事情,所以,人们通常都是“胡乱”选择映射的,所以,根本没有必要精确地找出对应于映射的那个核函数,而只需要“胡乱”选择一个核函数即可——我们知道它对应了某个映射,虽然我们不知道这个映射具体是什么。由于我们的计算只需要核函数即可,所以我们也并不关心也没有必要求出所对应的映射的具体形式。)

SVM对于离群点处理

加入松弛变量 ξi≥0 (slack variable) ,对应数据点 xi 允许偏离的函数间隔的量。当然,如果我们允许 ξi 任意大的话,那任意的超平面都是符合条件的了。所以,我们在原来的目标函数后面加上一项,使得这些 ξi 的总和也要最小:

SVM 允许数据点在一定程度上偏离一下超平面。

最后是这样的:

损失函数

SVM的损失函数就是合页损失函数加上正则化项,min w,b:

什么时候选择LR,什么时候选择SVM

在Andrew NG的课里讲到过: 
1. 如果Feature的数量很大,跟样本数量差不多,这时候选用LR或者是Linear Kernel的SVM 
2. 如果Feature的数量比较小,样本数量一般,不算大也不算小,选用SVM+Gaussian Kernel 
3. 如果Feature的数量比较小,而样本数量很多,需要手工添加一些feature变成第一种情况

LR和SVM的异同

相同点:

  • LR和SVM都是分类算法
  • 如果不考虑核函数,LR和SVM都是线性分类算法,也就是说他们的分类决策面都是线性的

原始的LR和SVM都是线性分类器,这也是为什么通常没人问你决策树和LR什么区别,决策树和SVM什么区别,你说一个非线性分类器和一个线性分类器有什么区别?

  • LR和SVM都是监督学习算法
  • LR和SVM都是判别模型

不同点:

  • loss function不同

LR:

SVM:

不同的loss function代表了不同的假设前提,也就代表了不同的分类原理,也就代表了一切!!!简单来说,​逻辑回归方法基于概率理论,假设样本为1的概率可以用sigmoid函数来表示,然后通过极大似然估计的方法估计出参数的值,具体细节参考http://blog.csdn.net/pakko/article/details/37878837。支持向量机​基于几何间隔最大化原理,认为存在最大几何间隔的分类面为最优分类面,具体细节参考http://blog.csdn.net/macyang/article/details/38782399

lr的损失函数是 cross entropy loss

svm是hinge loss

  • 支持向量机只考虑局部的边界线附近的点,而逻辑回归考虑全局(远离的点对边界线的确定也起作用)

线性SVM不直接依赖于数据分布,分类平面不受一类点影响;LR则受所有数据点的影响,如果数据不同类别strongly unbalance,一般需要先对数据做balancing。LR对于特征处理非常重要!!

  • 在解决非线性问题时,支持向量机采用核函数的机制,而LR通常不采用核函数的方法。(LR采用???)
  • 线性SVM依赖数据表达的距离测度,所以需要对数据先做normalization,LR不受其影响。
  • SVM的损失函数就自带正则!!!(损失函数中的1/2||w||^2项),这就是为什么SVM是结构风险最小化算法的原因!!!而LR必须另外在损失函数上添加正则项!!!
  • 对非线性表达上,逻辑回归只能通过人工的特征组合来实现,而SVM可以很容易引入非线性核函数来实现非线性表达,淡然也可以通过特征组合。
  • 逻辑回归产出的是概率值,而SVM只能产出是正类还是负类,不能产出概率。
  • 逻辑回归的损失函数是log loss,而SVM使用的是hinge loss。
  • SVM主要关注的是“支持向量”,也就是和分类最相关的少数点,即关注局部关键信息;而逻辑回归是在全局进行优化的。这导致SVM天然比逻辑回归有更好的泛化能力,防止过拟合。
  • 损失函数的优化方法不同,逻辑回归是使用梯度下降来求解对数似然函数的最优解;SVM使用SMO方法,来求解条件约束损失函数的对偶形式。

SVM数据不平衡怎么解决?为什么选这种方法?

感觉这个是问如何解决不平衡样本的(⊙﹏⊙)b

SVM分类中去掉那些离分界线较远的样本,只保留离分界线较近的样本。

SVM为什么比别的分类器效果好?

SVM在小样本训练集上能够得到比其它算法好很多的结果。支持向量机之所以成为目前最常用,效果最好的分类器之一,在于其优秀的泛化能力,这是因为其本身的优化目标是结构化风险最小,而不是经验风险最小,因此,通过margin的概念,得到对数据分布的结构化描述,因此减低了对数据规模和数据分布的要求。SVM也并不是在任何场景都比其他算法好,对于每种应用,最好尝试多种算法,然后评估结果。

置信风险: 分类器对未知样本进行分类,得到的误差。

经验风险: 训练好的分类器,对训练样本重新分类得到的误差。即样本误差

结构风险:置信风险 + 经验风险

结构风险最小化就是为了防止过拟合而提出来的策略。

SVM如何防止过拟合?

1. 软间隔允许模型有训练误差,而硬间隔要求误差为0

2. 正则化是我们希望模型结构往某个方向发展,给模型加上约束,一方面模型有了约束就不能很好的拟合训练数据,从而缓解过拟合,另一方面,一般我们加入的约束都是一种对模型的先验,认为这样的模型是更好的,是对模型的一种偏好,从而帮助我们挑选到更好的模型,所以也能缓解过拟合。

SVM 高频面试题

高斯核为什么有效?

SVM中,高斯核为什么会把原始维度映射到无穷多维?

因为可以将原始维度映射到无穷多维,解决了低维线性不可分的问题。

核函数到底是个什么东西?我再简要概括下,即以下三点:

  1. 实际中,我们会经常遇到线性不可分的样例,此时,我们的常用做法是把样例特征映射到高维空间中去(如上文2.2节最开始的那幅图所示,映射到高维空间后,相关特征便被分开了,也就达到了分类的目的);
  2. 但进一步,如果凡是遇到线性不可分的样例,一律映射到高维空间,那么这个维度大小是会高到可怕的(如上文中19维乃至无穷维的例子)。那咋办呢?
  3. 此时,核函数就隆重登场了,核函数的价值在于它虽然也是将特征进行从低维到高维的转换,但核函数绝就绝在它事先在低维上进行计算,而将实质上的分类效果表现在了高维上,也就如上文所说的避免了直接在高维空间中的复杂计算。

SVM的优缺点

优点:

它基于结构风险最小化原则,这样就避免了过学习问题,泛化能力强。
它是一个凸优化问题,因此局部最优解一定是全局最优解的优点
SVM理论提供了一种避开高维空间的复杂性,直接用此空间的内积函数(既是核函数),再利用在线性可分的情况下的求解方法直接求解对应的高维空间的决策问题。当核函数已知,可以简化高维空间问题的求解难度。
SVM是基于小样本统计理论的基础上的,这符合机器学习的目的,而且支持向量机比神经网络具有较好的泛化推广能力

缺点:

对于每个高维空间在此空间的映射F,如何确定F也就是核函数,现在还没有合适的方法,所以对于一般的问题,SVM只是把高维空间的复杂性的困难转为了求核函数的困难。
即使确定核函数以后,在求解问题分类时,要求解函数的二次规划,这就需要大量的存储空间。

KKT条件

 


参考:

https://blog.csdn.net/Heitao5200/article/details/85838790 (总结!!!)

写在SVM之前——凸优化与对偶问题(凸优化等一些数学知识复习,墙裂)

SVM一些问题及思考

对于SVM和softmax的损失函数总结(基于cs231n)(好好好)

SVM损失函数

LR与SVM的异同

Linear SVM 和 LR 有什么异同? - 豆豆豆豆豆豆豆叶的回答 

支持向量机(SVM)入门理解与推导

SVM支持向量机 - -

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值