机器学习——支持向量机

支持向量机

支持向量机是一种二分类机器学习模型,适用于小样本数据集。

下面通过建模,优化方法求解,支持向量机在多分类问题的应用以及支持向量机优缺点四个方面讲:

第一部分:建模

一.线性可分支持向量机:若数据样本线性可分,通过极大化所有样本点的几何间隔最小值,将极大化问题转变成极小化问题之后,得到线性可分支持向量机学习的最优化问题:

原始问题为凸二次规划问题,求解可以根据现成优化工具求解。由于模型的特殊结构,往往采用对偶的方式求解。使用对偶的优点有三:①对偶问题求解更为高效;②对偶问题方便了核函数的引进,用于对非线性可分问题进行分类;③对偶问题可求得支持向量。

对偶问题格式为:

二.软间隔线性支持向量机

由于噪声等等原因,现实中数据往往不是那么完美的线性可分。

但如果除去离群点(outlier)后数据仍然近似线性可分,可对离群点采取松弛变量的方法进行处理,即利用罚函数的方法对错误点进行惩罚,这样就有了软间隔线性支持向量机模型:

这种形式的模型实际上是基于合页损失函数的软间隔支持向量机:

其中L取合页损失函数.

合页损失函数支持向量机优点在于惩罚具有稀疏性,缺点在于会对于离群比较严重的点赋予很大的权重,可能会对分隔超平面产生巨大的影响。对于函数L的不同取法已有很多研究,这里不再深入。

由于同样的原因,也写出其对偶问题进行求解:

三.非线性支持向量机

当数据是非线性可分的时候,可以采用加入核函数的方法,用一个非线性映射将所有样本点投影到另一个特征空间,使得在新的空间数据是线性可分的。

由于支持向量机模型的对偶问题在训练和使用时都使用到了样本特征的内积,希望可以找到一种方法来计算两个样本映射到高维空间后的内积的值,这种方法就是核函数:

原始模型为:

对偶问题:

常用的核函数有线性核函数:

线性核函数主要用于线性可分的情况,我们可以看到特征空间到输入空间的维度是一样的,其参数少速度快,对于线性可分数据,其分类效果很理想,因此我们通常首先尝试用线性核函数来做分类,看看效果如何,如果不行再换别的;

高斯核函数(径向基核函数RBF):

高斯径向基函数是一种局部性强的核函数,其可以将一个样本映射到一个更高维的空间内,该核函数是应用最广的一个,无论大样本还是小样本都有比较好的性能,而且其相对于多项式核函数参数要少,因此大多数情况下在不知道用什么核函数的时候,优先使用高斯核函数。

以及多项式核函数,sigmoid核函数等。

至于怎么选择核函数,吴恩达的课曾提出过核函数选择方法:如果特征的数量大到和样本数量差不多,则选用LR或者线性核的SVM,如果特征的数量小,样本的数量正常,则选用SVM+高斯核函数。

第二部分:优化

求解支持向量机模型,即求解一个典型的凸二次规划问题,由于求解该二次规划问题涉及到m阶矩阵的计算(m为样本个数),当m数量较大时难以储存和计算。针对该问题的改进算法有很多,典型的就是序列最小最优化算法SMO。SMO算法采取一种类似于坐标下降的方法,每次固定α中n-2个变量,只更新其余两个,这样把对全部的α优化问题变成了一对对的参数的优化问题,再通过解析解的方法确定这一对α。因为最优解α一定满足kkt条件,当把所有的α的分量都优化到满足kkt条件时,便可以得到最优的α值。

第三部分:多分类问题

原始支持向量机模型只能解决二分类问题,而现实中常有多分类的需求,解决方法大致有三种:

  1. one vs one :使用k(k-1)/2个分类器(k为类别数),将每一种类别和别的所有类别进行比较,最后用投票的方法选出最多的类别作为最终类别。虽然这样做相比 one vs all需要训练更多的模型,但时间消耗却更少,因为每次训练模型都使用了全部的数据,而svm时间复杂度和数据量大小是超线性关系。
  2. one vs all :使用n个分类器,每次将一种类别作为正类,其余都做负类进行训练。由于每次训练负类样本都多于正类,会出现数据集偏斜的问题。
  3. svm决策树 :即DAG SVM,通过决策树的方式,在得到一个分类结果后选择性的训练新的模型,最终只会用k-1个one vs one 的模型,就能分辨出所属类别。

第四部分:优缺点

优点:

  1. SVM在小样本训练集上能够得到比其它算法好很多的结果,在于其优秀的泛化能力。因为其本身的优化目标是结构化风险最小,而不是经验风险最小,因此,通过margin的概念,得到对数据分布的结构化描述,因此减低了对数据规模和数据分布的要求。
  2. 少数支持向量决定了最终结果,这不但可以帮助我们抓住关键样本、"剔除"大量冗余样本,而且注定了该方法不但算法简单,而且具有较好的"鲁棒"性。

缺点:

  1. 时间复杂度:一个具体的算法,Bunch-Kaufman训练算法,典型的时间复杂度在O(Nsv3+LNsv2+dLNsv)和O(dL2)之间,其中Nsv是支持向量的个数,L是训练集样本的个数,d是每个样本的维数(原始的维数,没有经过向高维空间映射之前的维数)。复杂度会有变化,是因为它不光跟输入问题的规模有关(不光和样本的数量,维数有关),也和问题最终的解有关(即支持向量有关),如果支持向量比较少,过程会快很多,如果支持向量很多,接近于样本的数量,就会产生O(dL2)这个十分糟糕的结果。
  2. 多分类问题:原始模型只能解决二分类问题,需采取措施解决多分类问题。

原文地址:https://www.cnblogs.com/yuanzhengpeng/p/9672253.html

时间: 2024-10-03 15:47:59

机器学习——支持向量机的相关文章

机器学习——支持向量机SVM在R中的实现

支持向量机是一个相对较新和较先进的机器学习技术,最初提出是为了解决二类分类问题,现在被广泛用于解决多类非线性分类问题和回归问题.继续阅读本文,你将学习到支持向量机如何工作,以及如何利用R语言实现支持向量机. 支持向量机如何工作? 简单介绍下支持向量机是做什么的: 假设你的数据点分为两类,支持向量机试图寻找最优的一条线(超平面),使得离这条线最近的点与其他类中的点的距离最大.有些时候,一个类的边界上的点可能越过超平面落在了错误的一边,或者和超平面重合,这种情况下,需要将这些点的权重降低,以减小它们

python大战机器学习——支持向量机

支持向量机(Support Vector Machine,SVM)的基本模型是定义在特征空间上间隔最大的线性分类器.它是一种二类分类模型,当采用了核技巧之后,支持向量机可以用于非线性分类. 1)线性可分支持向量机(也称硬间隔支持向量机):当训练数据线性可分是,通过硬间隔最大化,学得一个线性可分支持向量机 2)线性支持向量机(也称为软间隔支持向量机):当训练数据近似线性可分时,通过软间隔最大化,学得一个线性支持向量机 3)非线性支持向量机:当训练数据不可分时,通过使用核技巧以及软间隔最大化,学得一

机器学习---支持向量机(SVM)

非常久之前就学了SVM,总认为不就是找到中间那条线嘛,但有些地方模棱两可,真正编程的时候又是一团浆糊.參数任意试验,毫无章法.既然又又一次学到了这一章节,那就要把之前没有搞懂的地方都整明确,嗯~ 下面使用到的图片来自上海交大杨旸老师的课件.网址例如以下:http://bcmi.sjtu.edu.cn/~yangyang/ml/ 支持向量机就是一种分类方法.仅仅是起的这个名字,看起来非常复杂而已. 中间一条线:分类用的,须要求出系数W , b 支持向量:线性超平面上的点,能够理解为两边的线上的点

机器学习——支持向量机(SVM)

很久之前就学了SVM,总觉得不就是找到中间那条线嘛,但有些地方模棱两可,真正编程的时候又是一团浆糊,参数随意试验,毫无章法.既然又重新学到了这一章节,那就要把之前没有搞懂的地方都整明白,再也不要做无用功了~算法很简单,如果学不会,只是因为懒~写下这段话,只为提醒自己 以下使用到的图片来自上海交大杨旸老师的课件,网址如下:http://bcmi.sjtu.edu.cn/~yangyang/ml/ 支持向量机就是一种分类方法,只是起的这个名字,看起来很复杂而已. 中间一条线:分类用的,需要求出系数W

【udacity】机器学习-支持向量机(to be continued)

Evernote Export body,td { font-family: 微软雅黑; font-size: 10pt } 支持向量机(Support Vector Machine) 不适定问题不止一个决策边界 要找一个决策边界,不仅能将训练集很好的划分,而且提升模型的泛化能力 支持向量机直接将算法放在运行的内部,在不适定的问题中,使用svm去建模是好的 svm是统计学习中非常重要的方法 svm尝试寻找一个最优的决策边界,距离两个类别的最近的样本最远,距离决策边界最近的点称为支撑向量 svm算

吴裕雄 python 机器学习——支持向量机SVM非线性分类SVC模型

import numpy as np import matplotlib.pyplot as plt from sklearn import datasets, linear_model,svm from sklearn.model_selection import train_test_split def load_data_classfication(): ''' 加载用于分类问题的数据集 ''' # 使用 scikit-learn 自带的 iris 数据集 iris=datasets.lo

吴裕雄 python 机器学习——支持向量机非线性回归SVR模型

import numpy as np import matplotlib.pyplot as plt from sklearn import datasets, linear_model,svm from sklearn.model_selection import train_test_split def load_data_regression(): ''' 加载用于回归问题的数据集 ''' diabetes = datasets.load_diabetes() #使用 scikit-lea

机器学习--支持向量机 (SVM)算法的原理及优缺点

一.支持向量机 (SVM)算法的原理 支持向量机(Support Vector Machine,常简称为SVM)是一种监督式学习的方法,可广泛地应用于统计分类以及回归分析.它是将向量映射到一个更高维的空间里,在这个空间里建立有一个最大间隔超平面.在分开数据的超平面的两边建有两个互相平行的超平面,分隔超平面使两个平行超平面的距离最大化.假定平行超平面间的距离或差距越大,分类器的总误差越小. 对于线性可分的支持向量机求解问题实际上可转化为一个带约束条件的最优化求解问题: 推理过程:      结果:

机器学习——支持向量机(SVM)之核函数(kernel)

对于线性不可分的数据集,可以利用核函数(kernel)将数据转换成易于分类器理解的形式. 如下图,如果在x轴和y轴构成的坐标系中插入直线进行分类的话, 不能得到理想的结果,或许我们可以对圆中的数据进行某种形式的转换,从而得到某些新的变量来表示数据.在这种表示情况下,我们就更容易得到大于0或者小于0的测试结果.在这个例子中,我们将数据从一个特征空间转换到另一个特征空间,在新的空间下,我们可以很容易利用已有的工具对数据进行处理,将这个过程称之为从一个特征空间到另一个特征空间的映射.在通常情况下,这种