机器学习算法总结--SVM
Posted spearhead_cai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习算法总结--SVM相关的知识,希望对你有一定的参考价值。
简介
SVM是一种二类分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,即支持向量机的学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解。或者简单的可以理解为就是在高维空间中寻找一个合理的超平面将数据点分隔开来,其中涉及到非线性数据到高维的映射以达到数据线性可分的目的。
训练数据线性可分时,通过硬间隔最大化,学习一个线性分类器,即线性可分支持向量机,又称为硬间隔支持向量机;训练数据近似线性可分时,通过软间隔最大化,也学习一个线性分类器,即线性支持向量机,也称为软间隔支持向量机;训练数据线性不可分时,通过使用核技巧和软间隔最大化,学习非线性支持向量机。
线性可分支持向量机和硬间隔最大化
接下来主要是手写的笔记,主要参考
- 《统计学习方法》
- SVM详解(包含它的参数C为什么影响着分类器行为)-scikit-learn拟合线性和非线性的SVM
- 机器学习常见算法个人总结(面试用)
- SVM-支持向量机算法概述
- 机器学习算法与Python实践之(二)支持向量机(SVM)初级
- 机器学习算法与Python实践之(三)支持向量机(SVM)进阶
- 机器学习算法与Python实践之(四)支持向量机(SVM)实现
关于凸函数,凸集是指有这么一个点的集合,其中任取两个点连一条直线,这条线上的点仍然在这个集合内部,因此说“凸”是很形象的。例如下图,对于凸函数(在数学表示上,满足约束条件是仿射函数,也就是线性的Ax+b的形式)来说,局部最优就是全局最优,但对非凸函数来说就不是了。
支持向量是训练数据集的样本点中与分离超平面距离最近的样本点的实例。
如下图所示:
图中对类1,即Class 1的支持向量就在超平面
H2:wx+b=−1
上,而对于类2,即Class 2正类的支持向量就在超平面
H1:wx+b=1
上。而在这两个超平面中间的距离,即图中标着m
的距离称为间隔,它依赖于分离超平面的法向量
w
,等于
在决定分离超平面时只有支持向量其作用,其他实例点并不起作用。如果移动支持向量将改变所求的解。正是因为支持向量在确定分离超平面中起着决定性作用 ,所以将这种分类模型称为支持向量机。支持向量的个数一般很少,所以支持向量机由很少的“重要的”训练样本确定。
线性支持向量机和软间隔最大化
核函数
采用不同的核函数就相当于采用不同的相似度的衡量方法。从计算的角度,不管 Φ(x) 变换的空间维度有多高,甚至是无限维(函数就是无限维的),这个空间的线性支持向量机的求解都可以在原空间通过核函数进行,这样就可以避免了高维空间里的计算,而计算核函数的复杂度和计算原始样本内积的复杂度没有实质性的增加。
一般情况下RBF效果是不会差于Linear
但是时间上RBF会耗费更多
下面是吴恩达的见解:
- 如果Feature的数量很大,跟样本数量差不多,这时候选用LR或者是Linear Kernel的SVM
- 如果Feature的数量比较小,样本数量一般,不算大也不算小,选用SVM+Gaussian Kernel
- 如果Feature的数量比较小,而样本数量很多,需要手工添加一些feature变成第一种情况
更多有关核函数可以参考【模式识别】SVM核函数和SVM的核函数如何选取?–知乎。
这里总结一下:支持向量机的基本思想可以概括为,首先通过非线性变换将输入空间变换到一个高维的空间,然后在这个新的空间求最优分类面即最大间隔分类面,而这种非线性变换是通过定义适当的内积核函数来实现的。**SVM实际上是根据统计学习理论依照结构风险最小化的原则提出的,要求实现两个目的:**1)两类问题能够分开(经验风险最小)2)margin最大化(风险上界最小),既是在保证风险最小的子集中选择经验风险最小的函数。
SVM优缺点
优点
- 使用核函数可以向高维空间进行映射
- 使用核函数可以解决非线性的分类
- 分类思想很简单,就是将样本与决策面的间隔最大化
- 分类效果较好
缺点
- 对大规模数据训练比较困难
- 无法直接支持多分类,但是可以使用间接的方法来做
多类分类
直接法
直接在目标函数上进行修改,将多个分类面的参数求解合并到一个最优化问题中,通过求解该优化就可以实现多分类。但是计算复杂度很高,实现起来较为困难。
间接法
1 一对多方法就是每次训练的时候设置其中某个类为一类,其余所有类为另一个类。比如有A,B,C,D四个类,第一次A是一个类,{B,C,D}是一个类,训练一个分类器,第二次B是一个类,然后A,C,D是一个类,训练一个分类器,依次类推。因此,如果总共有 n 个类,最终将训练
n 个分类器。测试的时候,将测试样本都分别送入所有分类器中,取得到最大值的类别作为其分类结果。这是因为到分类面距离越大,分类越可信。
这种方法的优点是每个优化问题的规模比较小,而且分类速度很快,因为分类器数目和类别数目相同;但是,有时会出现这样两种情况:对一个测试样本,每个分类器都得到它属于分类器所在类别;或者都不属于任意一个分类器的类别。前者称为分类重叠现象,后者叫不可分类现象。前者可以任意选择一个结果或者就按照其到每个超平面的距离来分,哪个远选哪个类别;而后者只能分给新的第 n+1 个类别了。最大的缺点还是由于将 n−1 个类别作为一个类别,其数目会数倍于只有1个类的类别,这样会人为造成数据集偏斜的问题。
2 一对一方法是任意两个类都训练一个分类器,那么 n 个类就需要
n(n−1)2 个分类器。预测的时候通过投票选择最终结果。
这个方法同样会有分类重叠的现象,但不会有不可分类现象,因为不可能所有类别的票数都是0。此外,就是计算代价会很大。
3 层次支持向量机(H-SVMs)。层次分类法首先将所有类别分成两个子类,再将子类进一步划分成两个次级子类,如此循环,直到得到一个单独的类别为止。
4 DAG-SVMS是由Platt提出的决策导向的循环图DDAG导出的,是针对“一对一”SVMS存在误分、拒分现象提出的。
序列最小最优化算法(SMO)
SMO是用于快速求解SVM的,是一种启发式算法。
基本思路如下:如果所有变量的解都满足此最优化问题的KKT条件,那么这个最优化问题的解就得到了。因为KKT条件是该最优化问题的充分必要条件。否则它选择凸二次规划的两个变量,其他的变量保持不变,然后根据这两个变量构建一个二次规划问题,这个二次规划关于这两个变量解会更加的接近原始二次规划的解,通过这样的子问题划分可以大大增加整个算法的计算速度,关于这两个变量:
- 其中一个是严重违反KKT条件的一个变量
- 另一个变量由约束条件自动确定。
整个SMO算法分为两部分:求解两个变量二次规划的解析方法和选择变量的启发式方法。
SMO称选择第一个变量的过程为外层循环。外层循环在训练样本中选取违反KKT条件最严重的样本点,并将其对应的变量作为第一个变量。具体的,检验训练样本( xi,yi )是否满足KKT条件,也就是:
该检验是在
ε
范围内进行的。在检验过程中,外层循环首先遍历所有满足条件
优先选择遍历非边界数据样本,因为非边界数据样本更有可能需要调整,边界数据样本常常不能得到进一步调整而留在边界上。由于大部分数据样本都很明显不可能是支持向量,因此对应的 α 乘子一旦取得零值就无需再调整。遍历非边界数据样本并选出他们当中违反KKT 条件为止。当某一次遍历发现没有非边界数据样本得到调整时,遍历所有数据样本,以检验是否整个集合都满足KKT条件。如果整个集合的检验中又有数据样本被进一步进化,则有必要再遍历非边界数据样本。这样,不停地在遍历所有数据样本和遍历非边界数据样本之间切换,直到整个样本集合都满足KKT条件为止。以上用KKT条件对数据样本所做的检验都以达到一定精度ε就可以停止为条件。如果要求十分精确的输出算法,则往往不能很快收敛。
对整个数据集的遍历扫描相当容易,而实现对非边界
SMO称选择第2个变量的过程为内层循环。第2个变量选择的标准是希望能使 α2 有足够大的变化。
记 g(x)=∑Ni=1αiyiK(xi,x)+b , 令 Ei=g(xi)−yi=(∑Ni=1αiyiK(xi,以上是关于机器学习算法总结--SVM的主要内容,如果未能解决你的问题,请参考以下文章