四 SVM
SVM的基本思想:
间隔最大化来得到最优分离超平面。方法是将这个问题形式化为一个凸二次规划问题,还可以等价位一个正则化的合页损失最小化问题。SVM又有硬间隔最大化和软间隔SVM两种。这时首先要考虑的是如何定义间隔,这就引出了函数间隔和几何间隔的概念(这里只说思路),我们选择了几何间隔作为距离评定标准(为什么要这样,怎么求出来的要知道),我们希望能够最大化与超平面之间的几何间隔x,同时要求所有点都大于这个值,通过一些变化就得到了我们常见的SVM表达式。接着我们发现定义出的x只是由个别几个支持向量决定的。对于原始问题(primal
problem)而言,可以利用凸函数的函数包来进行求解,但是发现如果用对偶问题(dual
)求解会变得更简单,而且可以引入核函数。而原始问题转为对偶问题需要满足KKT条件(这个条件应该细细思考一下)到这里还都是比较好求解的。因为我们前面说过可以变成软间隔问题,引入了惩罚系数,这样还可以引出hinge损失的等价形式(这样可以用梯度下降的思想求解SVM了)。我个人认为难的地方在于求解参数的SMO算法。
SVM的主要特点
(1)非线性映射-理论基础
(2)最大化分类边界-方法核心
(3)支持向量-计算结果
(4)小样本学习方法
,最终的决策函数只有少量支持向量决定,避免了“维数灾难” ,少数支持向量决定最终结果—->可“剔除”大量冗余样本+算法简单+具有鲁棒性
(7)学习问题可表示为凸优化问题—->全局最小值
(8)可自动通过最大化边界控制模型,但需要用户指定核函数类型和引入松弛变量
(9)适合于小样本,优秀泛化能力(因为结构风险最小)
(10)泛化错误率低,分类速度快,结果易解释
缺点:
(1)大规模训练样本(m阶矩阵计算)
(2)传统的不适合多分类
(3)对缺失数据、参数、核函数敏感
为什么要选择最大间隔分类器,请从数学角度上说明?
答:几何间隔与样本的误分次数间存在关系:
其中的分母就是样本到分类间隔距离,分子中的R是所有样本中的最长向量值
为什么要引入对偶问题
(1)容易求解 (2)核函数
Note:拉格朗日对偶没有改变最优解,但改变了算法复杂度:原问题—样本维度;对偶问题–样本数量。所以
线性分类&&样本维度<样本数量:原问题求解(liblinear默认); 非线性–升维—一般导致 样本维度>样本数量:对偶问题求解
样本失衡的影响
超平面会靠近样本少的类别。因为使用的是软间隔分类,而如果对所有类别都是使用同样的惩罚系数,则由于优化目标里面有最小化惩罚量,所以靠近少数样本时,其惩罚量会少一些。假设理想的分隔超平面是大样本中有很多数据到该超平面的函数距离是小于1的,而小样本中是只有少数样本的函数距离小于1的。但是由于惩罚系数相同,实际算法得到的超平面会往小样本数据靠近。
不平衡解决方法
1.对正例和负例赋予不同的惩罚因子,例如正例远少于负例,则正例的惩罚因子取得较大,这种方法的缺点是可能会偏离原始数据的概率分布;
2.对训练集的数据进行预处理即对数量少的样本以某种策略进行采样,增加其数量或者减少数量多的样本。典型的方法如:随机插入法,缺点是可能出现 overfitting,较好的是:Synthetic Minority Over-sampling TEchnique(SMOTE),其缺点是只能应用在具体的特征空间中,不适合处理那些无法用特征向量表示的问题,当然增加样本也意味着训练时间可能增加;
3.基于核函数的不平衡数据处理。
数据维度大于数据量的对SVM的影响?
这种情况下一般采用线性核(即无核),因为此时特征够用了(很大可能是线性问题),没必要映射到更高维的特征空间。
样本没有规范化对SVM有什么影响?
对偶问题的优化目标函数中有向量的内积计算(优化过程中也会有内积计算的,见SMO),径向基核函数中有向量的距离计算,存在值域小的变量会被忽略的问题,影响算法的精度。参考:https://www.cnblogs.com/LBSer/p/4440590.html大值特征会掩盖小值特征(内积计算)。
高斯核会计算向量间的距离,也会产生同样的问题;
多项式核会引起数值问题。影响求解的速度。
数据规范化后,会丢失一些信息。预测的时候,也要进行规范化,测试数据规划时,使用的最大值和最小值都是训练集的而不是测试集的。
如何处理离散型变量?
答:{red, green, blue} 可以表示为 (0,0,1), (0,1,0), and (1,0,0);这样向量的内积或距离才有真正意义。
SVM的原问题和对偶问题
为什么要引入对偶算法
对偶问题往往更加容易求解(结合拉格朗日和kkt条件)
可以很自然的引用核函数(拉格朗日表达式里面有内积,而核函数也是通过内积进行映射的
SVM解决过拟合的方法
决定SVM最优分类超平面的恰恰是那些占少数的支持向量,如果支持向量中碰巧存在异常点就会过拟合,解决的方法是加入松弛变量。
另一方面从损失函数角度看,引入了L2正则。
为什么要把原问题转换为对偶问题?
因为原问题是凸二次规划问题,转换为对偶问题更加高效
为什么求解对偶问题更加高效?
因为只用求解alpha系数,而alpha系数只有支持向量才非0,其他全部为0.
alpha系数有多少个?
样本点的个数
L1还可以用来选择特征
A 为什么L1可以用来选择特征
B 因为L1的话会把某些不重要的特征压缩为0
A 为什么L1可以把某些特征压缩为0
B 因为(画图)L1约束是正方形的,经验损失最有可能和L1的正方形的顶点相交,L1比较有棱角。所以可以把某些特征压缩为0
优点:
使用核函数可以向高维空间进行映射
使用核函数可以解决非线性的分类
分类思想很简单,就是将样本与决策面的间隔最大化
分类效果较好
缺点:
对大规模数据训练比较困难
无法直接支持多分类,但是可以使用间接的方法来做
SMO算法
SMO是用于快速求解SVM的
它选择凸二次规划的两个变量,其他的变量保持不变,然后根据这两个变量构建一个二次规划问题,这个二次规划关于这两个变量解会更加的接近原始二次规划的解,通过这样的子问题划分可以大大增加整个算法的计算速度
SVM多分类问题
间接法 一对多
其中某个类为一类,其余n-1个类为另一个类,比如A,B,C,D四个类,第一次A为一个类,{B,C,D}为一个类训练一个分类器,第二次B为一个类,{A,C,D}为另一个类,按这方式共需要训练4个分类器,最后在测试的时候将测试样本经过这4个分类器f1(x),f2(x),f3(x)和f4(x),取其最大值为分类器(这种方式由于是1对M分类,会存在偏置,很不实用)
一对一(libsvm实现的方式)
任意两个类都训练一个分类器,那么n个类就需要个svm分类器。
还是以A,B,C,D为例,那么需要{A,B},{A,C},{A,D},{B,C},{B,D},{C,D}为目标共6个分类器,然后在预测的将测试样本通过这6个分类器之后进行投票选择最终结果。(这种方法虽好,但是需要个分类器代价太大,不过有好像使用循环图来进行改进)
DAG法:用一对一的方法建立k(k-1)/2个分类器,然后将这些分类器建立成有向无环图(有点像二叉树);预测的时候,都只需要调用k-1个分类器;缺点是存在错误累积,一旦开始分类错的话,接下来就不可能分对了。所以第一个分类器一定要选好
libSVM都使用的是哪些参数?怎么调参的?
答:使用RBF核(径向基核函数),调整C和γ(使用交叉验证),RBF参数少,模型简单
如何选择核函数?
答:线性核是高斯核的特例,sigmoid核在给定的参数下和高斯核相似,多项式核的参数太多;对于高斯核0<Kij<1,而多项式核则可能会出现无穷大或无穷小;
对于特征非常多的情况下,应使用线性核。因为此时特征够用了(很大可能是线性问题),没必要映射到更高维的特征空间
线性核的训练速度快,而且一般情况下效果还不错,尤其是维度高的情况下。其他核需要调参(使用交叉验证),所以速度慢。
PS:高斯核必然映射到无穷维,因为核函数的泰勒展开有无穷多项。
- Linear核:主要用于线性可分的情形。参数少,速度快,对于一般数据,分类效果已经很理想了。
- RBF核:主要用于线性不可分的情形。参数多,分类结果非常依赖于参数。有很多人是通过训练数据的交叉验证来寻找合适的参数,不过这个过程比较耗时。
我个人的体会是:使用libsvm,默认参数,RBF核比Linear核效果稍差。通过进行大量参数的尝试,一般能找到比linear核更好的效果。至于到底该采用哪种核,要根据具体问题,有的数据是线性可分的,有的不可分,需要多尝试不同核不同参数。如果特征的提取的好,包含的信息量足够大,很多问题都是线性可分的。当然,如果有足够的时间去寻找RBF核参数,应该能达到更好的效果。
- 如果Feature的数量很大,跟样本数量差不多,这时候选用LR或者是Linear Kernel的SVM
- 如果Feature的数量比较小,样本数量一般,不算大也不算小,选用SVM+Gaussian Kernel
- 如果Feature的数量比较小,而样本数量很多,需要手工添加一些feature变成第一种情况
初级
高维用线性,不行换特征;低维试线性,不行换高斯
中级
线性试试看,不行换高斯,卡方有奇效,绝招MKL
玩家
Kernel度量相似性,自己做啊自己做
为什么SVM训练的时候耗内存,而预测的时候占内存少?【有待考究】
答:因为SVM训练过程中需要存储核矩阵。而预测的时候只需要存储支持向量和相关参数。
参考博客的解答:
算法最耗时的地方是优化乘子的选择和更新一阶导数信息,这两个地方都需要去计算核函数值,而核函数值的计算最终都需要去做内积运算,这就意味着原始空间的维度很高会增加内积运算的时间;对于dense matrix我就直接用numpy的dot了,而sparse matrix采用的是CSR表示法,求它的内积我实验过的方法有三种,第一种不需要额外空间,但时间复杂度为O(nlgn),第二种需要一个hash表(用dictionary代替了),时间复杂度为线性,第三种需要一个bitmap(使用BitVector),时间复杂度也为线性,实际使用中第一种速度最快,我就暂时用它了,应该还有更快的方法,希望高人们能指点一下;另外由于使用dictionary缓存核矩阵,遇到训练数据很大的数据集很容易挂掉,所以在程序中,当dictionary的内存占用达到配置文件的阈值时会将其中相对次要的元素删掉,保留对角线上的内积值。
SVM分类
答:线性可分SVM、线性SVM(引入惩罚因子)、非线性SVM(引入核)
在SMO中,什么叫违反KKT条件最严重的?
答:每一个α对应一个样本,而KKT条件是样本和对应的α应该满足的关系。所谓违反最严重是指α对应的样本错得最离谱
SVM适合处理什么样的数据?
答:高维稀疏,样本少。【参数只与支持向量有关,数量少,所以需要的样本少,由于参数跟维度没有关系,所以可以处理高维问题】
高维问题还可以另外一个角度来思考,假设给定一个训练数据集,其特征是少量的,那么很可能需要映射到高维空间才能求解,那么这个问题就是一个高维问题【纯属个人理解】
线性核VS径向基核?
答:1)训练速度:线性核只需要调节惩罚因子一个参数,所以速度快;径向基核函数还需要调节γ,所以训练速度变慢。【调参一般使用交叉验证,所以速度会慢】
2)训练结果:线性核的得到的权重w可以反映出特征的重要性,从而进行特征选择;径向基核得到权重是无法解释的。
3)适应的数据:线性核:样本数量远小于特征数量(n<<m)【此时不需要映射到高维】,或者样本数量与特征数量都很大【此时主要考虑训练速度】
径向基核:样本数量远大于特征数量(n>>m)
径向基核函数中参数的物理意义
答:如果σ选得很大的话,高次特征上的权重实际上衰减得非常快【使用泰勒展开就可以发现,当很大的时候,泰勒展开的高次项的系数会变小得很快】,所以实际上(数值上近似一下)相当于一个低维的子空间;反过来,如果σ选得很小,则可以将任意的数据映射为线性可分——当然,这并不一定是好事,因为随之而来的可能是非常严重的过拟合问题【很难理解这里的说法???】【因为此时泰勒展开式中有效的项将变得非常多,甚至无穷多,那么就相当于映射到了一个无穷维的空间,任意数据都将变得线性可分】
多项式核VS径向基核
计算量:径向基核需要计算e的幂,所以比较耗时
可解释性:多项式核的结果更加直观,解释性强,所以如果对数据有一定的了解的话,可以考虑使用多项式核
参数:多项式核参数多,难调
带核的SVM为什么能分类非线性问题?
核函数的本质是两个函数的內积,而这个函数在SVM中可以表示成对于输入值的高维映射。注意核并不是直接对应映射,核只不过是一个內积
RBF核一定是线性可分的吗
不一定,RBF核比较难调参而且容易出现维度灾难,要知道无穷维的概念是从泰勒展开得出的。
常用核函数及核函数的条件:
核函数选择的时候应该从线性核开始,而且在特征很多的情况下没有必要选择高斯核,应该从简单到难的选择模型。我们通常说的核函数指的是正定和函数,其充要条件是对于任意的x属于X,要求K对应的Gram矩阵要是半正定矩阵。
RBF核径向基,这类函数取值依赖于特定点间的距离,所以拉普拉斯核其实也是径向基核。
线性核:主要用于线性可分的情况 多项式核
是否所有的优化问题都可以转化为对偶问题:
这个问题我感觉非常好,有了强对偶和弱对偶的概念。用知乎大神的解释吧
6、EM算法、HMM、CRF
这三个放在一起不是很恰当,但是有互相有关联,所以就放在这里一起说了。注意重点关注算法的思想。
(1)EM算法
EM算法是用于含有隐变量模型的极大似然估计或者极大后验估计,有两步组成:E步,求期望(expectation);M步,求极大(maxmization)。本质上EM算法还是一个迭代算法,通过不断用上一代参数对隐变量的估计来对当前变量进行计算,直到收敛。
注意:EM算法是对初值敏感的,而且EM是不断求解下界的极大化逼近求解对数似然函数的极大化的算法,也就是说EM算法不能保证找到全局最优值。对于EM的导出方法也应该掌握。
(2)HMM算法
隐马尔可夫模型是用于标注问题的生成模型。有几个参数(π
概率计算问题:给定模型和观测序列,计算模型下观测序列输出的概率。–》前向后向算法
学习问题:已知观测序列,估计模型参数,即用极大似然估计来估计参数。–》Baum-Welch(也就是EM算法)和极大似然估计。
预测问题:已知模型和观测序列,求解对应的状态序列。–》近似算法(贪心算法)和维比特算法(动态规划求最优路径)
(3)条件随机场CRF
给定一组输入随机变量的条件下另一组输出随机变量的条件概率分布密度。条件随机场假设输出变量构成马尔科夫随机场,而我们平时看到的大多是线性链条随机场,也就是由输入对输出进行预测的判别模型。求解方法为极大似然估计或正则化的极大似然估计。
之所以总把HMM和CRF进行比较,主要是因为CRF和HMM都利用了图的知识,但是CRF利用的是马尔科夫随机场(无向图),而HMM的基础是贝叶斯网络(有向图)。而且CRF也有:概率计算问题、学习问题和预测问题。大致计算方法和HMM类似,只不过不需要EM算法进行学习问题。
(4)HMM和CRF对比
其根本还是在于基本的理念不同,一个是生成模型,一个是判别模型,这也就导致了求解方式的不同。
7、常见基础问题
(1)数据归一化(或者标准化,注意归一化和标准化不同)的原因
要强调:能不归一化最好不归一化,之所以进行数据归一化是因为各维度的量纲不相同。而且需要看情况进行归一化。
有些模型在各维度进行了不均匀的伸缩后,最优解与原来不等价(如SVM)需要归一化。
有些模型伸缩有与原来等价,如:LR则不用归一化,但是实际中往往通过迭代求解模型参数,如果目标函数太扁(想象一下很扁的高斯模型)迭代算法会发生不收敛的情况,所以最坏进行数据归一化。
补充:其实本质是由于loss函数不同造成的,SVM用了欧拉距离,如果一个特征很大就会把其他的维度dominated。而LR可以通过权重调整使得损失函数不变。
(3)SVD和PCA
PCA的理念是使得数据投影后的方差最大,找到这样一个投影向量,满足方差最大的条件即可。而经过了去除均值的操作之后,就可以用SVD分解来求解这样一个投影向量,选择特征值最大的方向。
(4)防止过拟合的方法
过拟合的原因是算法的学习能力过强;一些假设条件(如样本独立同分布)可能是不成立的;训练样本过少不能对整个空间进行分布估计。
处理方法:
早停止:如在训练中多次迭代后发现模型性能没有显著提高就停止训练
数据集扩增:原有数据增加、原有数据加随机噪声、重采样
正则化
交叉验证
特征选择/特征降维
(5)数据不平衡问题
这主要是由于数据分布不平衡造成的。解决方法如下:
采样,对小样本加噪声采样,对大样本进行下采样
进行特殊的加权,如在Adaboost中或者SVM中
采用对不平衡数据集不敏感的算法
改变评价标准:用AUC/ROC来进行评价
采用Bagging/Boosting/ensemble等方法
考虑数据的先验分布