统计学习--SVM-面试汇总

机器学习面试题汇总(支持向量机相关)

支持向量机面试题,SVM面试题

1.SVM的原理是什么?

SVM是一种二分类模型。它的基本模型是在特征空间中寻找间隔最大化的分离超平面的线性分类器。(间隔最大化是它的独特之处),通过该超平面实现对未知样本集的分类。

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

2.SVM推导

先算出目标函数–二次凸优化问题,引入拉格朗日因子-

3.简述SVM软间隔

软件隔是通过引入一个松弛因子,转化为线性可分模型,因为是松弛因子,相较于之前硬分隔也是软的。

4.如何使用SMO最优化方法求解SVM模型?

基本思想:将大优化的问题分解成多个小优化问题,这些小问题往往比较容易求解,并且对他们进行顺序求解的结果与他们作为整体来求解的结果完全一致。
在这里插入图片描述
5.SMO算法中对于每次选中的α如何进行优化?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
6.SMO算法中如何选择每次优化的两个α?
在这里插入图片描述

7.SMO算法优化的终止条件是什么?
在这里插入图片描述

8.什么是核函数,为什么SVM要引入核函数?

当样本在原始空间线性不可分时,可将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间内线性可分。

引入映射后的对偶问题:

在学习预测中,只定义核函数K(x,y),而不是显式的定义映射函数ϕ。因为特征空间维数可能很高,甚至可能是无穷维,因此直接计算ϕ(x)·ϕ(y)是比较困难的。相反,直接计算K(x,y)比较容易(即直接在原来的低维空间中进行计算,而不需要显式地写出映射后的结果)。

核函数的定义:K(x,y)=<ϕ(x),ϕ(y)>,即在特征空间的内积等于它们在原始样本空间中通过核函数K计算的结果。

除了 SVM 之外,任何将计算表示为数据点的内积的方法,都可以使用核方法进行非线性扩展。

9VM常用的核函数有哪些,如何选择核函数?

意义:原始样本空间中可能不存在这样可以将样本正确分为两类的超平面,但是我们知道如果原始空间的维数是有限的,也就是说属性数是有限的,则一定存在一个高维特征空间能够将样本划分。SVM通过核函数将输入空间映射到高维特征空间,最终在高维特征空间中构造出最优分离超平面,从而把平面上本身无法线性可分的数据分开。核函数的真正意义是做到了没有真正映射到高维空间却达到了映射的作用,即减少了大量的映射计算。

种类:参见【机器学习】SVM核方法

选择:

利用专家先验知识选定核函数,例如已经知道问题是线性可分的,就可以使用线性核,不必选用非线性核。
如果特征的数量大到和样本数量差不多,则选用线性核函数SVM或LR。
如果特征的数量小,样本的数量正常,则选用高斯核函数SVM。
如果特征的数量小,样本数量很多,由于求解最优化问题的时候,目标函数涉及两两样本计算内积,使用高斯核明显计算量会大于线性核,所以手动添加一些特征,使得线性可分,然后可以用LR或者线性核的SVM;
利用交叉验证,试用不同的核函数,误差最小的即为效果最好的核函数。
混合核函数方法,将不同的核函数结合起来。

11.SVM为什么采用间隔最大化?

当训练数据线性可分时,存在无穷个分离超平面可以将两类数据正确分开。感知机或神经网络等利用误分类最小策略,求得分离超平面,不过此时的解有无穷多个。线性可分支持向量机利用间隔最大化求得最优分离超平面,这时,解是唯一的。另一方面,此时的分隔超平面所产生的分类结果是最鲁棒的,对未知实例的泛化能力最强。

12.SVM对噪声敏感的原因

少数支持向量决定了最终结果,这不但可以帮助我们抓住关键样本、“剔除”大量冗余样本,而且注定了该方法不但算法简单,而且具有较好的“鲁棒”性。这种“鲁棒”性主要体现在:
增、删非支持向量样本对模型没有影响;
支持向量样本集具有一定的鲁棒性;
有些成功的应用中,SVM 方法对核的选取不敏感
但当噪声出现的过多,以及当噪声出现并成为支持向量时,那么噪声对模型对影响是巨大的。所以此时SVM对噪声不具备鲁棒性!以下两种情况会增大噪声成为支持向量的概率:
噪声数量太多
噪声以新的分布形式出现,与原先样本集的噪声分布表现的相当不同。此时噪声也有大概率落在最大分类间隔中间,从而成为支持向量,大大影响模型。
所以我们常说的鲁棒性其实是主要是体现在对Outlier(异常点、离群点)上。
这里说的缺失数据是指缺失某些特征数据,向量数据不完整。SVM没有处理缺失值的策略(决策树有)。而SVM希望样本在特征空间中线性可分,若存在缺失值它们在该特征维度很难正确的分类(例如SVM要度量距离(distance measurement),高斯核,那么缺失值处理不当就会导致效果很差),所以特征空间的好坏对SVM的性能很重要。缺失特征数据将影响训练结果的好坏。

13.为什么SVM对缺失某些特征数据敏感?

这里说的缺失数据是指缺失某些特征数据,向量数据不完整。SVM没有处理缺失值的策略(决策树有)。而SVM希望样本在特征空间中线性可分,所以特征空间的好坏对SVM的性能很重要。缺失特征数据将影响训练结果的好坏。

14.SVM的优缺点

优点:支持向量机(Support Vector Machine,SVM)本质上是非线性方法,在样本量较少的时候,容易抓住数据和特征之间的非线性关系(相比线性分类方法如逻辑回归),因此可以解决非线性问题、可以避免神经网络结构选择和局部极小点问题、可以提高泛化性能、可以解决高维问题。

缺点:SVM对缺失数据敏感,对非线性问题没有通用解决方案,必须谨慎选择核函数来处理,计算复杂度高。

15.SVM为什么用在大数据有哪些缺陷?

SVM的空间消耗主要是在存储训练样本和核矩阵,由于SVM是借助二次规划来求解支持向量,而求解二次规划将涉及m阶矩阵的计算(m为样本的个数),当m数目很大时该矩阵的存储和计算将耗费大量的及其内存和运算时间。如果数据量很大,SVM的训练时间就会比较长,所以SVM在大数据的使用中比较受限。

16.如何防止SVM过拟合(提高泛化能力)?

过拟合是什么就不再解释了。SVM其实是一个自带L2正则项的分类器。SVM防止过拟合的主要技巧就在于调整软间隔松弛变量的城发因子C。C越大表明越不能容忍错分,当无穷大时则退化为硬间隔分类器。合适的C大小可以照顾到整体数据而不是被一个Outlier给带偏整个判决平面。至于C大小的具体调参通常可以采用交叉验证来获得。每个松弛变量对应的惩罚因子可以不一样。

17.SVM如何调节惩罚因子C?

18.如何处理SVM中样本不平衡的问题?

样本偏斜是指数据集中正负类样本数量不均,比如正类样本有10000个,负类样本只有100个,这就可能使得超平面被“推向”负类(因为负类数量少,分布得不够广),影响结果的准确性。

对于样本偏斜(样本不平衡)的情况,在各种机器学习方法中,我们有针对样本的通用处理办法:如何解决机器学习中数据不平衡问题。

仅在SVM中,我们可以通过为正负类样本设置不同的惩罚因子来解决样本偏斜的问题。具体做法是为负类设置大一点的惩罚因子,因为负类本来就少,不能再分错了,然后正负类的惩罚因子遵循一定的比例(如下文三种情况所述),具体值要通过实验确定。

首先,如果是因为采样得到的样本不够多样性或者数量不够而导致的样本偏斜(分布范围不均),可以通过衡量正负类分布的程度来确定惩罚因子的比例。比如计算它们在空间中占据的体积,例如给负类找一个超球(就是高维空间里的球),它要包含所有负类的样本,再给正类找一个,比较两个球的半径,就可以大致确定分布的情况。显然半径大的分布比较广,就给小一点的惩罚因子。
但是,如果是因为正负类本身性质所导致的分布范围不均,此时即使超球半径差异很大,也不应该赋予两个类别不同的惩罚因子。例如文本分类中,某些话题涉及的面很窄,例如计算机类的文章就明显不如文化类的文章那么“天马行空”,这就会导致它们的超球半径差异很大,但这是由它们自身性质决定的,与样本多样性和数量多少无关,换言之,这个时候不存在样本偏斜的问题。
但是,实际中我们不会这么做,因为实在太麻烦了,当正负类数量不均时,比如正负类数量比为100:1,则惩罚因子的比例直接就定为1:100(libsvm中就是这么做的)。

19.支持向量机(SVM)中的支持向量是什么意思?

在线性可分条件下。训练数据集的样本点中与分离超平面距离最近的样本点的实例称为支持向量。 SVM的支持向量
在分类问题中,分线性可分和基本线性可分两种情况讨论:
在线性可分SVM中,那些距离决策超平面最近的向量(间隔边界上的向量)就是支持向量。
在基本线性可分SVM中,支持向量分三种,1、在决策超平面间隔边界上的向量。2、在决策超平面上的向量。3、误分类的样本向量。
在回归问题中,支持向量是那些在tube边界及之外的向量,模型的参数也仅由这些支持向量决定。

20.SVM如何处理多分类问题?

SVM本身是一个二分类分类器,对多分类问题需要对代码做一些修改
SVM算法最初是为二值分类问题设计的,当处理多类问题时,就需要构造合适的多类分类器。目前,构造SVM多类分类器的方法主要有两类:一类是直接法,直接在目标函数上进行修改,将多个分类面的参数求解合并到一个最优化问题中,通过求解该最优化问题“一次性”实现多类分类。这种方法看似简单,但其计算复杂度比较高,实现起来比较困难,只适合用于小型问题中;另一类是间接法,主要是通过组合多个二分类器来实现多分类器的构造,常见的方法有one-against-one和one-against-all两种。
a.一对多法(one-versus-rest,简称1-v-r SVMs)。训练时依次把某个类别的样本归为一类,其他剩余的样本归为另一类,这样k个类别的样本就构造出了k个SVM。分类时将未知样本分类为具有最大分类函数值的那类。
b.一对一法(one-versus-one,简称1-v-1 SVMs)。其做法是在任意两类样本之间设计一个SVM,因此k个类别的样本就需要设计k(k-1)/2个SVM。当对一个未知样本进行分类时,最后得票最多的类别即为该未知样本的类别。
Libsvm中的多类分类就是根据这个方法实现的。评价:这种方法虽然好,但是当类别很多的时候,model的个数是n*(n-1)/2,代价还是相当大的

c.层次支持向量机(H-SVMs)。层次分类法首先将所有类别分成两个子类,再将子类进一步划分成两个次级子类,如此循环,直到得到一个单独的类别为止评价:这种方法虽然好,但是当类别很多的时候,model的个数是n*(n-1)/2,代价还是相当大的
https://www.cnblogs.com/CheeseZH/p/5265959.html

21.为什么要转为对偶问题?(阿里面试)

(a) 目前处理的模型严重依赖于数据集的维度d,如果维度d太高就会严重提升运算时间;

(b) 对偶问题事实上把SVM从依赖d个维度转变到依赖N个数据点,考虑到在最后计算时只有支持向量才有意义,所以这个计算量实际上比N小很多

SVM是用的是哪个库?Sklearn/libsvm中的SVM都有什么参数可以调节?

用的是sklearn实现的。采用sklearn.svm.SVC设置的参数。本身这个函数也是基于libsvm实现的(PS: libsvm中的二次规划问题的解决算法是SMO)。

SVC函数的训练时间是随训练样本平方级增长,所以不适合超过10000的样本。

对于多分类问题,SVC采用的是one-vs-one投票机制,需要两两类别建立分类器,训练时间可能比较长。

sklearn.svm.SVC(C=1.0, kernel=‘rbf’, degree=3, gamma=‘auto’, coef0=0.0, shrinking=True, probability=False,tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, decision_function_shape=None,random_state=None)

参数:

l C:C-SVC的惩罚参数C?默认值是1.0

C越大,相当于惩罚松弛变量,希望松弛变量接近0,即对误分类的惩罚增大,趋向于对训练集全分对的情况,这样对训练集测试时准确率很高,但泛化能力弱。C值小,对误分类的惩罚减小,允许容错,将他们当成噪声点,泛化能力较强。

l kernel :核函数,默认是rbf,可以是‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’

0 – 线性:u’v

1 – 多项式:(gamma*u’*v + coef0)^degree

2 – RBF函数:exp(-gamma|u-v|^2)

3 –sigmoid:tanh(gamma*u’*v + coef0)

l degree :多项式poly函数的维度,默认是3,选择其他核函数时会被忽略。

l gamma : ‘rbf’,‘poly’ 和‘sigmoid’的核函数参数。默认是’auto’,则会选择1/n_features

l coef0 :核函数的常数项。对于‘poly’和 ‘sigmoid’有用。

l probability :是否采用概率估计?.默认为False

l shrinking :是否采用shrinking heuristic方法,默认为true

l tol :停止训练的误差值大小,默认为1e-3

l cache_size :核函数cache缓存大小,默认为200

l class_weight :类别的权重,字典形式传递。设置第几类的参数C为weight*C(C-SVC中的C)

l verbose :允许冗余输出?

l max_iter :最大迭代次数。-1为无限制。

l decision_function_shape :‘ovo’, ‘ovr’ or None, default=None3

l random_state :数据洗牌时的种子值,int值

主要调节的参数有:C、kernel、degree、gamma、coef0。

猜你喜欢

转载自blog.csdn.net/qq_24429333/article/details/87920969