机器学习——支持向量机
Posted yuanzhengpeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习——支持向量机相关的知识,希望对你有一定的参考价值。
支持向量机
支持向量机是一种二分类机器学习模型,适用于小样本数据集。
下面通过建模,优化方法求解,支持向量机在多分类问题的应用以及支持向量机优缺点四个方面讲:
第一部分:建模
一.线性可分支持向量机:若数据样本线性可分,通过极大化所有样本点的几何间隔最小值,将极大化问题转变成极小化问题之后,得到线性可分支持向量机学习的最优化问题:
原始问题为凸二次规划问题,求解可以根据现成优化工具求解。由于模型的特殊结构,往往采用对偶的方式求解。使用对偶的优点有三:①对偶问题求解更为高效;②对偶问题方便了核函数的引进,用于对非线性可分问题进行分类;③对偶问题可求得支持向量。
对偶问题格式为:
二.软间隔线性支持向量机
由于噪声等等原因,现实中数据往往不是那么完美的线性可分。
但如果除去离群点(outlier)后数据仍然近似线性可分,可对离群点采取松弛变量的方法进行处理,即利用罚函数的方法对错误点进行惩罚,这样就有了软间隔线性支持向量机模型:
这种形式的模型实际上是基于合页损失函数的软间隔支持向量机:
其中L取合页损失函数.
合页损失函数支持向量机优点在于惩罚具有稀疏性,缺点在于会对于离群比较严重的点赋予很大的权重,可能会对分隔超平面产生巨大的影响。对于函数L的不同取法已有很多研究,这里不再深入。
由于同样的原因,也写出其对偶问题进行求解:
三.非线性支持向量机
当数据是非线性可分的时候,可以采用加入核函数的方法,用一个非线性映射将所有样本点投影到另一个特征空间,使得在新的空间数据是线性可分的。
由于支持向量机模型的对偶问题在训练和使用时都使用到了样本特征的内积,希望可以找到一种方法来计算两个样本映射到高维空间后的内积的值,这种方法就是核函数:
原始模型为:
对偶问题:
常用的核函数有线性核函数:
线性核函数主要用于线性可分的情况,我们可以看到特征空间到输入空间的维度是一样的,其参数少速度快,对于线性可分数据,其分类效果很理想,因此我们通常首先尝试用线性核函数来做分类,看看效果如何,如果不行再换别的;
高斯核函数(径向基核函数RBF):
高斯径向基函数是一种局部性强的核函数,其可以将一个样本映射到一个更高维的空间内,该核函数是应用最广的一个,无论大样本还是小样本都有比较好的性能,而且其相对于多项式核函数参数要少,因此大多数情况下在不知道用什么核函数的时候,优先使用高斯核函数。
以及多项式核函数,sigmoid核函数等。
至于怎么选择核函数,吴恩达的课曾提出过核函数选择方法:如果特征的数量大到和样本数量差不多,则选用LR或者线性核的SVM,如果特征的数量小,样本的数量正常,则选用SVM+高斯核函数。
第二部分:优化
求解支持向量机模型,即求解一个典型的凸二次规划问题,由于求解该二次规划问题涉及到m阶矩阵的计算(m为样本个数),当m数量较大时难以储存和计算。针对该问题的改进算法有很多,典型的就是序列最小最优化算法SMO。SMO算法采取一种类似于坐标下降的方法,每次固定α中n-2个变量,只更新其余两个,这样把对全部的α优化问题变成了一对对的参数的优化问题,再通过解析解的方法确定这一对α。因为最优解α一定满足kkt条件,当把所有的α的分量都优化到满足kkt条件时,便可以得到最优的α值。
第三部分:多分类问题
原始支持向量机模型只能解决二分类问题,而现实中常有多分类的需求,解决方法大致有三种:
- one vs one :使用k(k-1)/2个分类器(k为类别数),将每一种类别和别的所有类别进行比较,最后用投票的方法选出最多的类别作为最终类别。虽然这样做相比 one vs all需要训练更多的模型,但时间消耗却更少,因为每次训练模型都使用了全部的数据,而svm时间复杂度和数据量大小是超线性关系。
- one vs all :使用n个分类器,每次将一种类别作为正类,其余都做负类进行训练。由于每次训练负类样本都多于正类,会出现数据集偏斜的问题。
- svm决策树 :即DAG SVM,通过决策树的方式,在得到一个分类结果后选择性的训练新的模型,最终只会用k-1个one vs one 的模型,就能分辨出所属类别。
第四部分:优缺点
优点:
- SVM在小样本训练集上能够得到比其它算法好很多的结果,在于其优秀的泛化能力。因为其本身的优化目标是结构化风险最小,而不是经验风险最小,因此,通过margin的概念,得到对数据分布的结构化描述,因此减低了对数据规模和数据分布的要求。
- 少数支持向量决定了最终结果,这不但可以帮助我们抓住关键样本、"剔除"大量冗余样本,而且注定了该方法不但算法简单,而且具有较好的"鲁棒"性。
缺点:
- 时间复杂度:一个具体的算法,Bunch-Kaufman训练算法,典型的时间复杂度在O(Nsv3+LNsv2+dLNsv)和O(dL2)之间,其中Nsv是支持向量的个数,L是训练集样本的个数,d是每个样本的维数(原始的维数,没有经过向高维空间映射之前的维数)。复杂度会有变化,是因为它不光跟输入问题的规模有关(不光和样本的数量,维数有关),也和问题最终的解有关(即支持向量有关),如果支持向量比较少,过程会快很多,如果支持向量很多,接近于样本的数量,就会产生O(dL2)这个十分糟糕的结果。
- 多分类问题:原始模型只能解决二分类问题,需采取措施解决多分类问题。
以上是关于机器学习——支持向量机的主要内容,如果未能解决你的问题,请参考以下文章