百面03_经典算法
Posted wangzycloud
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了百面03_经典算法相关的知识,希望对你有一定的参考价值。
《百面》上本章节的内容非常精华,仅涉及SVM、LR、DT三个算法的少数问题,这是远远不够。所以这篇随笔会经常更新,接下来会把遇到的有价值的面试题目都整理在本节(关于经典算法的)。
【SVM】
1.简单介绍SVM
支持向量机简称为SVM,是一种二类分类模型,它的模型是定义在特征空间上的间隔最大的线性分类器。间隔最大化的求解问题可以形式化为一个求解凸二次规划问题,利用拉格朗日数乘法转化为对偶问题,最后利用SMO算法进行求解。对线性不可分数据集,可以通过软间隔最大化得到线性支持向量机,或者通过核技巧成为实质上的非线性分类器。
2.什么是间隔最大化?
支持向量机学习的基本想法是求解能够正确划分训练数据集并且几何间隔最大的分离超平面。对线性可分的训练数据集而言,线性可分分离超平面有无穷多个(等价于感知机),但是几何间隔最大的分离超平面是唯一的。这里的间隔最大化又称为硬间隔最大化。
间隔最大化的直观解释是:对训练数据集找到几何间隔最大的超平面意味着以充分大的确信度对训练数据进行分类。也就是说,不仅将正负实例点分开,而且对最难分的实例点(离超平面最近的点)也有足够大的确信度将它们分开。这样的超平面应该对未知的新实例有很好的分类预测能力。间隔最大化要求找一个这样的超平面:距离分离超平面最近的实例点,离该超平面最远。
3.解释一下什么是软间隔最大化、支持向量、核函数
软间隔最大化:假设训练数据集不是线性可分的。通常情况是,训练数据中有一些特异点 Coutlier),将这些特异点除去后,剩下大部分的样本点组成的集合是线性可分的。线性不可分意味着某些样本点(Xi,Yi)不能满足函数间隔大于等于1的约束条件。为了解决这个问题,可以对每个样本点(Xi,Yi)引进一个松弛变量Çi>=0,使函数间隔加上松弛变量大于等于1。于是,可以和训练数据集线性可分时一样来考虑训练数据集线性不可分时的线性支持向量机学习问题。相应于硬间隔最大化,它称为软间隔最大化。
支持向量:在线性可分情况下,训练数据集的样本点中与分离超平面距离最近的样本点的实例称为支持向量。在决定分离超平面时只有支持向量起作用,而其他实例点井不起作用。如果移动支持向量将改变所求的解,但是如果在间隔边界以外移动其他实例点,甚至去掉这些点,则解是不会改变的。由于支持向量在确定分离超平面中起着决定性作用,所以将这种分类模型称为支持向量机。支持向量的个数一般很少,所以支持向量机由很少的“重要的”训练样本确定。
核函数:核函数(kernel function) 表示将输入从输入空间映射到特征空间得到的特征向量之间的内积。通过使用核函数可以学习非线性支持向量机,等价于隐式地在高维的特征空间中学习线性支持向量机。
4.关于SVM的推导,解释一下原始问题和对偶问题
SVM的基本想法是求解能够正确划分训练数据集并且几何间隔最大的分离超平面。如果找到了几何间隔最大的超平面,也就意味着以充分大的确信度,对训练数据进行划分。也就是说,不仅将正负实例点分开,而且对最难分的实例点,也有足够大的确信度将其分开。如果以γ来表示几何间隔,问题如下:
考虑到几何间隔与函数间隔之间的关系,问题转换为:
至于为什么要这样转换,源于函数间隔的取值不影响最优化问题的求解,于是可以将函数间隔设置为1,简化问题的求解。
同时,最大化1/||w||与最小化1/2||w||²是等价的,于是有:
原问题:如下,解这个凸二次规划问题。
对每一个不等式约束,引进拉格朗日乘子,构建拉格朗日函数:
求解拉格朗日函数的过程,可以转化为最优化问题:
根据对偶性,原始问题转化为对偶问题:
对偶问题:如下,通过对极小极大过程的求解,得到与原始问题等价的对偶最优化问题:
若由上式对偶最优化问题得到一组解α,存在一个j,使得αj>0:
于是,得到分离超平面:
分类决策函数为:
到这里可以看到:
1)对偶问题只需要求解α,相比原问题求w、b来说,更容易求解。
2)从分类决策函数可以看到,内积的形式,可以自然的引入核函数,进而推广至非线性分类问题。
5.SVM中原始问题和对偶问题的关系,为什么要把原问题转换为对偶问题?为什么求解对偶问题更加高效?
1) 因为原问题是凸二次规划问题,转换为对偶问题往往更加容易求解(结合拉格朗日和KKT条件,只用求解α系数,而α系数只有支持向量才非0)。
2)可以很自然的引用核函数(拉格朗日表达式里面有内积,而核函数也是通过内积进行映射的)。
7.KKT约束条件有哪些?进行简单描述
公式(1)和公式(2)是对偶问题在拉格朗日函数求解过程中求极值的必要条件,也就是分别对w,b求偏导数并令其为0;
公式(3)是互补松弛条件;
公式(4)是问题本身的不等式约束条件;
公式(5)是拉格朗日乘子的自身要求。
8.0-1损失、Hinge损失、Logistic损失、平方损失的区别和联系
可以看到Hinge损失函数的形状像一个合页,所以叫做合页损失函数,图中还画出了0-1损失函数(虚线部分),可以认为它是二类分类问题的真正的损失函数,而合页损失函数是它的上界。由于0-1损失函数不是连续可导的,直接优化其构成的目标函数比较困难,可以认为线性支持向量机是优化由0-1损失函数的上界(合页损失函数)构成的目标函数。
图中虚线显示的感知机算法的损失函数,当样本点(xi,yi)被正确分类时,损失是0,否则损失是-yi(w·xi+b);相比之下,合页损失函数不仅要求分类正确,而且确信度足够高时损失才为0,也就是说损失函数对学习有更高的要求。
未完.
9.加大训练数据量一定能提高SVM准确率吗?
1)SVM本质上是凸优化问题,如果增加的样本点只是无效约束,并不会影响其最后的结果。这也就是为什么SVM适合于小样本量数据集的原因。
2)随样本量而使模型自身发生改变的,是统计推断。最大似然、MAP,再到贝叶斯,每个都涉及到样本数的一项,这些方法建立的模型才真正和样本数量有最直接的联系。
10.SVM如何解决多分类问题?可以做回归吗?怎么做?
1)直接法:
直接在目标函数上进行修改,将多个分类面的参数求解合并到一个最优化问题中,通过求解该优化就可以实现多分类(计算复杂度很高,实现起来较为困难)。
2)间接法:
一对多:其中某个类为一类,其余n-1个类为另一个类,比如A,B,C,D四个类,第一次A为一个类,{B,C,D}为一个类训练一个分类器,第二次B为一类,{A,C,D}为另一个类,按这方式共需要训练4个分类器,最后在测试的时候将测试样本经过这4个分类器,取其最大值为分类器(这种方式由于是1对M分类,会存在偏置,很不实用)。
一对一(libsvm实现的方式):任意两个类都训练一个分类器,那么n个类就需要n*(n-1)/2个svm分类器。还是以A,B,C,D为例,那么需要{A,B},{A,C},{A,D},{B,C},{B,D},{C,D}为目标共6个分类器,然后在预测的将测试样本通过这6个分类器之后进行投票选择最终结果(这种方法虽好,但是需要n*(n-1)/2个分类器代价太大)。
11.SVM优缺点
优点:
使用核函数可以向高维空间进行映射;
使用核函数可以解决非线性的分类;
分类思想很简单,就是将样本与决策面的间隔最大化;
分类效果较好。
缺点:
对大规模数据训练比较困难;
无法直接支持多分类,但是可以使用间接的方法来做。
12.SVM与感知器算法的联系和优缺点?
13.SVM与LR的区别与联系?
14.SMO算法是什么?
SMO是用于快速求解SVM的。它选择凸二次规划的两个变量,其他的变量保持不变,然后根据这两个变量构建一个二次规划问题,这个二次规划关于这两个变量解会更加的接近原始二次规划的解,通过这样的子问题划分可以大大增加整个算法的计算速度,关于这两个变量:
1)其中一个是严重违反KKT条件的一个变量
2)另一个变量是根据自由约束确定,求剩余变量的最大化来确定的。
15.在空间上线性可分的两类点,分别向SVM分类的分离超平面上做投影,落在超平面上的投影点仍然是线性可分的吗?
结论:对于任意线性可分的两组点,它们在SVM分类的超平面上的投影都是线性不可分的。
由于SVM的分类超平面仅由支持向量决定,我们可以考虑一个只含支持向量SVM模型场景。使用反证法来证明,假设存在一个SVM分类超平面使所有支持向量在该超平面上的投影依然线性可分,如图3.11所示。根据简单的初等几何知识不难发现,图中AB两点连线的中垂线所组成的超平面(绿色虚线)是相较于绿色实线超平面更优的解,这与之前假设绿色实线超平面为最优的解相矛盾。 考虑最优解对应的绿色虚线,两组点经过投影后,并不是线性可分的。
并且,不能保证分离超平面变成绿色虚线之后,支持向量是否发生变化。但是很明显,最下最上的元素已经不能作为支持向量了。这个例子并不能严谨的说明超平面上投影点的线性可分关系,但至少可以形象的表述这个事实。
16.是否存在一组参数使SVM训练误差为0?
存在。
17.训练误差为0的SVM分类器一定存在吗?
可以找到一个训练误差为0的SVM分类器。
18.加入松弛变量的SVM的训练误差可以为0吗?
结论:使用SMO算法训练的线性分类器并不一定能得到训练误差为0的模型。这是由于我们的优化目标改变了,并不再是使训练误差最小。
当我们的参数C选取较小的值时,后一项(正则项)将占据优化的较大比重。这样,一个带有训练误差,但是参数较小的点将成为更优的结果。一个简单的特例是,当C取0时,w也取0即可达到优化目标,但是显然此时我们的训练误差不一定能达到0。
【LR】
1.逻辑回归相比于线性回归,有何异同?
逻辑回归处理的是分类问题,线性回归处理的是回归问题,这是两者的最本质的区别(逻辑回归中的因变量为离散的,而线性回归中的因变量是连续的)。逻辑回归中,因变量取值是一个二元分布,模型学习得出的是在给定自变量和超参数后,因变量y在给定自变量x的条件下,得到因变量y取值的期望。并基于此期望来处理预测分类问题。而线性回归中实际上求解的是y`=wx+b,是对我们假设的真实关系y的一个近似,我们使用这个近似项来处理回归问题。
当然逻辑回归和线性回归也不乏相同之处,首先我们可以认为二者都使用了极大似然估计来对训练样本进行建模。并且,二者在求解超参数的过程中,都可以使用梯度下降的方法,这也是监督学习中一个常见的相似之处。
2.当使用逻辑回归处理多标签的分类问题时,有哪些常见做法,分别应用于哪些场景,它们之间又有怎样的关系?
使用哪一种办法来处理多分类的问题取决于具体问题的定义。
首先,如果一个样本只对应于一个标签,我们可以假设每个样本属于不同标签的概率服从于几何分布,使用多项逻辑回归(Softmax Regression)来进行分类。
当存在样本可能属于多个标签的情况时,我们可以训练k个二分类的逻辑回归分类器。第i个分类器用以区分每个样本是否可以归为第i类,训练该分类器时,需要把标签重新整理为“第i类标签”与“非第i类标签”两类。通过这样的办法,就可以解决了每个样本可能拥有多个标签的情况。
【DT】
1.决策树有哪些常用的启发函数?
决策树的目标是从一组样本数据中,根据不同的特征和属性,建立一棵树形的分类结构。我们既希望它能拟合训练数据,达到良好的分类效果,同时又希望控制其复杂度,使得模型具有一定的泛化能力。对于一个特定的问题,决策树的选择可能有很多种。从若干不同的决策树中选取最优的决策树是一个NP完全问题,在实际中我们通常会采用启发式学习的方法去构建一棵满足启发式条件的决策树。
常用的决策树算法有ID3、C4.5、CART,它们构建树所使用的启发式函数各是什么?除了构建准则之外,它们之间的区别与联系是什么?
ID3—— 最大信息增益
数据集D的经验熵H(D),然后计算某个特征A对于数据集D的经验条件熵H(D|A),于是信息增益g(D,A)可以表示为二者之差。
C4.5——最大信息增益比
特征A对于数据集D的信息增益比,g(D,A)比上HA(D)。
CART——最大基尼指数(Gini)
Gini描述的是数据的纯度,与信息熵含义类似。CART在每一次迭代中选择基尼指数最小的特征及其对应的切分点进行分类。但与ID3、C4.5不同的是,CART是一棵二叉树,采用二元切割法,每一步将数据按特征A的取值切成两份,分别进入左右子树。
差异比较:
ID3是采用信息增益作为评价标准,会倾向于取值较多的特征。因为信息增益反映的是给定条件以后不确定性减少的程度,特征取值越多就意味着确定性更高,也就是条件熵越小,信息增益越大。因此,C4.5实际上是对ID3进行优化,通过引入信息增益比,一定程度上对取值比较多的特征进行惩罚,避免ID3出现过拟合的特性,提升决策树的泛化能力。
从样本类型的角度,ID3只能处理离散型变量,而C4.5和CART都可以处理连续型变量。C4.5处理连续型变量时,通过对数据排序之后找到类别不同的分割线作为切分点,根据切分点把连续属性转换为布尔型,从而将连续型变量转换多个取值区间的离散型变量。而对于CART,由于其构建时每次都会对特征进行二值划分,因此可以很好地适用于连续性变量。
从应用角度,ID3和C4.5只能用于分类任务,而CART(Classification and Regression Tree,分类回归树)从名字就可以看出其不仅可以用于分类,也可以应用于回归任务(回归树使用最小平方误差准则)。
从实现细节来看,ID3对样本特征缺失值比较敏感,而C4.5和CART可以对缺失值进行不同方式的处理;ID3和C4.5可以在每个结点上产生出多叉分支,且每个特征在层级之间不会复用,而CART每个结点只会产生两个分支,因此最后会形成一棵二叉树,且每个特征可以被重复使用;ID3和C4.5通过剪枝来权衡树的准确性与泛化能力, 而CART直接利用全部数据发现所有可能的树结构进行对比。
2.如何对决策树进行剪枝?
一棵完全生长的决策树会面临一个很严重的问题,即过拟合。用它进行预测时,在测试集上的效果将会很差。因此我们需要对决策树进行剪枝,剪掉一些枝叶,提升模型的泛化能力。决策树的剪枝通常有两种方法,预剪枝(Pre-Pruning)和后剪枝(PostPruning)。预剪枝,即在生成决策树的过程中提前停止树的增长。而后剪枝,是在已生成的过拟合决策树上进行剪枝,得到简化版的剪枝决策树。
预剪枝
预剪枝的核心思想是在树中结点进行扩展之前,先计算当前的划分是否能带来模型泛化能力的提升,如果不能,则不再继续生长子树。此时可能存在不同类别的样本同时存于结点中,按照多数投票的原则判断该结点所属类别。
预剪枝对于何时停止决策树的生长有以下几种方法:
(1)当树到达一定深度的时候,停止树的生长。
(2)当到达当前结点的样本数量小于某个阈值的时候,停止树的生长。
(3)计算每次分裂对测试集的准确度提升,当小于某个阈值的时候,不再继续扩展。
预剪枝具有思想直接、算法简单、效率高等特点,适合解决大规模问题。但如何准确地估计何时停止树的生长(即上述方法中的深度或阈值),针对不同问题会有很大差别,需要一定经验判断。且预剪枝存在一定局限性,有欠拟合的风险,虽然当前的划分会导致测试集准确率降低,但在之后的划分中,准确率可能会有显著上升。
后剪枝
后剪枝的核心思想是让算法生成一棵完全生长的决策树,然后从最底层向上计算是否剪枝。剪枝过程将子树删除,用一个叶子结点替代,该结点的类别同样按照多数投票的原则进行判断。同样地,后剪枝也可以通过在测试集上的准确率进行判断,如果剪枝过后准确率有所提升,则进行剪枝。相比于预剪枝,后剪枝方法通常可以得到泛化能力更强的决策树,但时间开销会更大。常见的后剪枝方法包括错误率降低剪枝(REP)、悲观剪枝(PEP)、代价复杂度剪枝(CCP)、最小误差剪枝(MEP)、CVP、OPP等方法,这些剪枝方法各有利弊,关注不同的优化角度。
其中,著名的代价复杂剪枝CCP主要包含以下两个步骤。
(1)从完整决策树T0开始,生成一个子树序列{T0,T1,T2,...,Tn},其中Ti+1由Ti生成,Tn为树的根结点。
(2)在子树序列中,根据真实误差选择最佳的决策树。
以上是关于百面03_经典算法的主要内容,如果未能解决你的问题,请参考以下文章