SVM,全称是support vector machine,中文名叫支持向量机。SVM是一个面向数据的分类算法,它的目标是为确定一个分类超平面,从而将不同的数据分隔开。
支持向量机的基本模型是在特征空间上找到最佳的分离超平面使得训练集上正负样本间隔最大。SVM是用来解决二分类问题的有监督学习算法(实际上还有多分类),在引入了核方法之后SVM也可以用来解决非线性问题。它的基本学习策略是间隔最大化,可形式化一个求解凸二次优化问题,他的学习算法是求解凸二次优化的最优化问题,基本思想是能够正确划分训练数据集且几何间隔最大化的分离超平面。在决定分离超平面时只有sv起作用,其它实例点并不起作用,线性可分情况下,训练集的样本点与分离超平面最近的点的实例称为sv。
一般SVM有下面三种:
硬间隔支持向量机(线性可分支持向量机):当训练数据线性可分时,可通过硬间隔最大化学得一个线性可分支持向量机。
软间隔支持向量机:当训练数据近似线性可分时,可通过软间隔最大化学得一个线性支持向量机。
非线性支持向量机:当训练数据线性不可分时,可通过核方法以及软间隔最大化学得一个非线性支持向量机。

SVM常见面试题

SVM什么时候选择线性核, 什么时候选择高斯核?
答: 当m(数据量)比较小而n(特征数量)比较大的时候, 应该用线性核. 因为此时特征空间已经很高维了, 而数据量不够多, 线性核足够分类了, 如果用高斯核投影到高维空间的话容易造成过拟合.
当m比较大而n比较小的时候, 应该用高斯核. 比如数据量很大的2维训练集, 此时可能线性不可分, 需要高斯核投影到高维空间进行线性分类.

在使用高斯核之前需要对数据进行处理吗?
答: 需要进行特征缩放, 因为高斯核需要两个点之间的欧式距离, 如果不进行特征缩放的话数量级较大的特征对核函数的结果有决定性影响, 而数量级小的特征会被忽略.

SVM中如何解决数据不平衡问题?
答: 数据不平衡在SVM中导致的主要问题是数量少的样本分布空间不如数量多的广, 支持向量总体会向数量少的分类偏移. 解决办法是给样本少的分类更大的惩罚因子C, 表示我们更重视这部分样本. C+和C-可以按样本数量比例分, 或者按空间超球体的半径比例分, 具体结合实际问题考虑.

SVM中原始问题为什么要转化成对偶问题进行求解?
答: 1. 改变算法复杂度. 对偶问题往往更容易求解. 2. 转化为对偶问题才能得到内积的形式, 引入核函数, 进而推广到非线性分类问题.

SVM为什么采用间隔最大化?
答: 当数据线性可分时, 有无穷多个超平面可以将数据分开, 利用间隔最大化可以求得最优分离超平面, 解是唯一的, 此时的分离超平面的分类结果是最鲁棒的, 对未知数据的泛化能力最强.

为什么SVM要引入核函数?
答: SVM在求解对偶问题的时候, 会出现数据点的内积的形式, 而分类决策函数也只需要内积的结果, 因此可以通过引入核函数把样本映射到高维空间, 隐式地在高维空间中进行分类. 当样本在原始空间线性不可分时, 通过核函数将样本映射到更高维的特征空间, 样本在这个特征空间将线性可分或者接近线性可分.

核函数理论上可以应用在别的分类算法上比如LR, 为什么不建议这么做?
答: 分类模型的结果就是计算决策面,模型训练的过程就是决策面的计算过程。在计算决策面时,SVM转化为对偶问题后,只有少数几个代表支持向量的样本参与了计算,也就是只有少数几个样本需要参与核计算(即kernal machine解的系数是稀疏的),这个在进行复杂核函数计算时优势很明显,能够大大简化模型和计算量。然而,LR算法里,每个样本点都必须参与决策面的计算过程,也就是说,假设我们在LR里也运用核函数的原理,那么每个样本点都必须参与核计算,这带来的计算复杂度是相当高的。所以,在具体应用时,LR很少运用核函数机制。

SVM相对于LR有什么不同?
答: 1.样本点对于模型的作用不同. SVM中只有支持向量对模型有影响, 而LR中所有点都有影响. 2.损失函数不同. SVM采用的是合页损失函数, LR采用的是对率损失函数. 3.输出不同. LR输出的是对样本点是否属于给定分类的概率, SVM只能判断是否属于某一分类. 4.处理非线性问题的能力不同. SVM可以通过核函数灵活的将非线性问题转化为线性问题求解, 而LR需要手动进行特征转换.

SVM的优点?
答: 1.用内积核函数代替向高维空间的非线性映射. 2.间隔最大化的思想, 取得最优分类超平面. 3.最终结果只由支持向量决定, 剔除了大量的冗余样本, 因此具有一定的鲁棒性. 4.决策函数也只由支持向量决定, 降低了计算复杂度. 5.有坚实的理论基础.

SVM的缺点?
答: 1.涉及m阶矩阵的计算, 当m很大时候计算的空间复杂度和时间复杂度都很高. 2.传统的SVM只能给出二分类的结果, 对于多分类需要需要用到组合分类器. 3.对数据缺失敏感, 对参数与核函数选择敏感.

为什么SVM对数据缺失敏感?
答: 因为SVM中涉及了距离度量, 缺失的数据可能对距离的影响很大, 如果处理不好, 结果就会差很多.

SVM如何做多分类?
答: 1-V-rest:将某一类归为正类,其余全部是负类。
该方法的最大缺陷是数据集的不平衡,因为某一类的实例往往只占一小部分。当然解决不平衡的问题可以进行降采样或者上采样,但是上采样中数据集过多重合,易导致过拟合,而降采样使得数据利用率不足,不能学习整个模型的特性。
1-V-1:k类的数据集中,单独为每两类的样本设计SVM,进行分类。最终必须设计k(k-1)/2个分类器,最终用投票的方式进行选择。这也是libsvm采用的方法,但是当类别比较多的时候, 效率很低.