机器学习面试题之SVM(五)

1.你能给我讲讲什么是SVM吗?

回答:SVM是一种二分类模型,它的基本模型是在特征空间中寻找间隔最大化的分割超平面的线性分类器。如在下面的两个类别中(暂且称两个类为黄球和红球),
在这里插入图片描述
我们要将其分割开的方式有多种,但是究竟哪一种才是最优的分割方式呢?这就是支持向量机所要解决的问题。简单而又通俗点的理解:支持向量机的优化目标是找到一条线(w和b), 使得离该线最近的点之间的距离最长。但是在这个过程中,不同的数据所采用的分割策略可能会有所不同,主要的分割策略有三种:

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

2.你知道什么是支持向量吗?alpha什么时候为0什么时候不为0?

回答:支持向量的本质其实也是向量。支持向量机是想找到一个分割超平面或者说分类面,使得它所产生的结果是最鲁棒的,即对未知实例的泛化能力是最强的(这也是支持向量机为什么采用间隔最大化的原因之一)。而支持向量就是这些支撑分割超平面的数据点,其实就是距离分界线最近的点,或者说分界面就是靠这些数据点来确定的,它们支撑着分界面。 对于边界上的样本来说,alpha不等于0,这些边界上的样本点属于支持向量,它们会对最终的结果产生影响。而对于非边界上的样本点来说,alpha等于0, 非边界上的这些样本点是非支持向量,非支持向量不会对最终的结果产生影响。

举个栗子,如在下方的图形中,A、B、C三点就属于支持向量,它们的alpha不为0,且支撑着分割超平面。而其它的样本点的alpha等于0,它们对分割超平面不会造成影响。
在这里插入图片描述3.请问可以怎么提高SVM的泛化能力?

回答:我们知道SVM的约束条件常常会有过拟合(过拟合表现为在训练集上模型的预测结果很准,但是在未知数据上预测效果却很差)的风险,而决定分割超平面的是支持向量,如果这些支持向量中存在异常值点,那么我们还傻兮兮地严格按照SVM的定义去训练模型,那训练出来的模型效果肯定就不会太好。为了解决这个问题,我们可以使用软间隔来处理,所谓软间隔就是为SVM引入了一个松弛变量,使得SVM能够容忍异常值点的存在。因为引入了松弛变量之后,所有点到分割超平面的距离可以不需要严格地大于等于1了,而只需要>= 1-松弛变量值就可以了。

举个例子,如果松弛变量 = 0.1, 那么数据点到分割超平面的距离只需要>= 0.9就可以。通过这个方法就可以将异常值转为非支持向量,将异常值作为一个普通的数据点存在,那么我们的支持向量和分割超平面就都不会收到它的影响了。(下图是使用了软间隔对数据进行分类的可视化结果)
在这里插入图片描述4.SVM为什么要引入核函数?

回答:在现实世界中,不是所有的样本都是线性可分的,有时候我们也会遇到线性不可分的样本。如以下情形:
在这里插入图片描述在这种情况下,想要在二维空间中使用线性分割的方法将红球与黄球完全分割开似乎是不可能的。

对于这样的问题,我们可以将样本从原始空间映射到一个更高维的特征空间中,使得样本在这个特征空间中线性可分。我们知道如果原始空间是有限维,即属性数有限,那么就一定存在一个高维特征空间能够将样本分开。通过将输入空间映射到了高维的特征空间,可以把平面上不好区分的非线性数据很好地区分开。但是对于映射后的对偶问题,如果我们直接去计算的话会较为难算,为了解决这个问题,才引入了核函数(目的:为了解决映射后难以计算的问题,方法:设想在原始样本空间中能找到一个函数满足映射后需要计算的两个样本间的特征空间内积)即:
在这里插入图片描述而目前我们所常用的核函数主要有线性核函数、多项式核函数、高斯核函数、拉普拉斯核函数、Sigmoid核函数。

当然,引入核函数之后,核函数的选择就变成了支持向量机中的最大变数了,若核函数的选择不正确的话,那么就可能将样本映射到了一个不合适的特征空间,导致的后果就很有可能是模型的性能不好。

(对于核函数这一部分,建议大家可以准备一下各种核函数的使用场景以及核函数的选择这一块的内容)

5.SVM中为什么会有SMO算法?

回答:SVM的基本型就是一个凸二次规划的问题,使用拉格朗日乘子法转换后所获得的关于alpha的函数的求解也是一个二次规划的问题,虽然可以直接使用二次规划问题的算法来进行求解;但是,该问题(二次规划问题)的规模正比于训练样本数,这会在实际任务中造成很大的开销,为求出alpha同时为避免通用的二次规划算法所造成的巨大开销,才引入了SMO算法。

(关于SMO,我觉得大家可以准备一下SMO的算法思想、SMO算法优化的终止条件等方面的知识)
SMO算法实现SVM
在这里插入图片描述转自数据挖掘知识点串烧:SVM

5.SVM有什么样的优点跟缺点呢?

优点:

  • 可以使用核函数将原始数据映射到高维的特征空间上,进而解决非线性的分类问题;

  • SVM的分类思想很简单,就是将样本与分类面的间隔最大化

  • SVM的分类效果较好;

缺点:

  • SVM无法直接支持多分类任务,但是可以通过间接的方法来实现多分类(这点跟逻辑回归的分类思想很像,间接的多分类方法有一对一、一对其余、多对多这三种拆分策略);
  • 对某些缺失数据敏感,对核函数的选择也很敏感

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

7.LR和SVM的联系与区别
相同点

  • ①都是线性分类器。本质上都是求一个最佳分类超平面。
  • ②都是监督学习算法。
  • ③都是判别模型。判别模型不关心数据是怎么生成的,它只关心信号之间的差别,然后用差别来简单对给定的一个信号进行分类。常见的判别模型有:KNN、SVM、LR,常见的生成模型有:朴素贝叶斯,隐马尔可夫模型。

区别:

  • LR是参数模型,svm是非参数模型,linear和rbf则是针对数据线性可分和不可分的区别;
  • 从目标函数来看,区别在于逻辑回归采用的是logistical loss,SVM采用的是hinge loss,这两个损失函数的目的都是增加对分类影响较大的数据点的权重,减少与分类关系较小的数据点的权重。
  • SVM的处理方法是只考虑support
    vectors,也就是和分类最相关的少数点,去学习分类器。而逻辑回归通过非线性映射,大大减小了离分类平面较远的点的权重,相对提升了与分类最相关的数据点的权重。
  • 逻辑回归相对来说模型更简单,好理解,特别是大规模线性分类时比较方便。而SVM的理解和优化相对来说复杂一些,SVM转化为对偶问题后,分类只需要计算与少数几个支持向量的距离,这个在进行复杂核函数计算时优势很明显,能够大大简化模型和计算。
  • logic 能做的 svm能做,但可能在准确率上有问题,svm能做的logic有的做不了。

8.带核的SVM为什么能分类非线性问题?
核函数的本质是两个函数的內积,通过核函数将其隐射到高维空间,在高维空间非线性问题转化为线性问题, SVM得到超平面是高维空间的线性分类平面

9.SVM、LR、决策树的对比
模型复杂度:SVM支持核函数,可处理线性非线性问题;LR模型简单,训练速度快,适合处理线性问题;决策树容易过拟合,需要进行剪枝
损失函数:SVM hinge loss; LR L2正则化; adaboost 指数损失
数据敏感度:SVM添加容忍度对outlier不敏感,只关心支持向量,且需要先做归一化; LR对远点敏感
数据量:数据量大就用LR,数据量小且特征少就用SVM非线性核

10.为什么要将求解SVM的原始问题转换为其对偶问题?

  1. 对偶问题往往更易求解(当我们寻找约束存在时的最优点的时候,约束的存在虽然减小了需要搜寻的范围,但是却使问题变得更加复杂。为了使问题变得易于处理,我们的方法是把目标函数和约束全部融入一个新的函数,即拉格朗日函数,再通过这个函数来寻找最优点。
  2. 自然引入核函数,进而推广到非线性分类问题。
  3. (a) 目前处理的模型严重依赖于数据集的维度d,如果维度d太高就会严重提升运算时间;(b) 对偶问题事实上把SVM从依赖d个维度转变到依赖N个数据点,考虑到在最后计算时只有支持向量才有意义,所以这个计算量实际上比N小很多。

11. SVM如何处理多分类问题?
一般有两种做法:一种是直接法,直接在目标函数上修改,将多个分类面的参数求解合并到一个最优化问题里面。看似简单但是计算量却非常的大。

另外一种做法是间接法:对训练器进行组合。其中比较典型的有一对一,和一对多。

一对多,就是对每个类都训练出一个分类器,由svm是二分类,所以将此而分类器的两类设定为目标类为一类,其余类为另外一类。这样针对k个类可以训练出k个分类器,当有一个新的样本来的时候,用这k个分类器来测试,那个分类器的概率高,那么这个样本就属于哪一类。这种方法效果不太好,bias比较高。

一对一法(one-vs-one),针对任意两个类训练出一个分类器,如果有k类,一共训练出C(2,k) 个分类器,这样当有一个新的样本要来的时候,用这C(2,k) 个分类器来测试,每当被判定属于某一类的时候,该类就加一,最后票数最多的类别被认定为该样本的类。

12.如何对SVM进行调参
在这里插入图片描述核函数的参数:

1)对于线性核函数,没有专门需要设置的参数
2)对于多项式核函数,有三个参数。-d用来设置多项式核函数的最高此项次数,也就是公式中的d,默认值是3。-g用来设置核函数中的gamma参数设置,也就是公式中的第一个r(gamma),默认值是1/k(k是类别数)。-r用来设置核函数中的coef0,也就是公式中的第二个r,默认值是0。
3)对于RBF核函数,有一个参数。-g用来设置核函数中的gamma参数设置,也就是公式中的第一个r(gamma),默认值是1/k(k是类别数)。
4)对于sigmoid核函数,有两个参数。-g用来设置核函数中的gamma参数设置,也就是公式中的第一个r(gamma),默认值是1/k(k是类别数)。-r用来设置核函数中的coef0,也就是公式中的第二个r,默认值是0。

SVM模型有两个非常重要的参数C与gamma。

  • 其中 C是惩罚系数,即对误差的宽容度。c越高,说明越不能容忍出现误差,容易过拟合。C越小,容易欠拟合。C过大或过小,泛化能力变差
  • gamma是选择RBF函数作为kernel后,该函数自带的一个参数。隐含地决定了数据映射到新的特征空间后的分布,gamma越大,支持向量越少,gamma值越小,支持向量越多。支持向量的个数影响训练与预测的速度。

Grid Search
使用grid Search虽然比较简单,而且看起来很naïve。但是他确实有两个优点: 可以得到全局最优 (C,gamma)相互独立,便于并行化进行
在实际工程应用中,我们需要不断的调整gamma和c的值,并对数据不断地进行交叉验证,使得模型的预测结果更高。此时对应的训练结果w和b作为svm最终的训练结果。
转自:SVM 调参策略:https://blog.csdn.net/u014484783/article/details/78220646

发布了13 篇原创文章 · 获赞 11 · 访问量 773

猜你喜欢

转载自blog.csdn.net/jaffe507/article/details/105135389