【SVM】- 支持向量机基本原理
1.支持向量机 概述支持向量机(Support Vector Machines, SVM):是一种监督学习算法。支持向量(Support Vector)就是离分隔超平面最近的那些点。机(Machine)就是表示一种算法,而不是表示机器支持向量机(SVM,也称为支持向量网络),是机器学习中获得关注最多的算法没有之一。它源于统计学习理论,是我们除了集成算法之外,接触的第一个强学习器。它有...
1.支持向量机 概述
支持向量机(Support Vector Machines, SVM):是一种监督学习算法。
- 支持向量(Support Vector)就是离分隔超平面最近的那些点。
- 机(Machine)就是表示一种算法,而不是表示机器
支持向量机(SVM,也称为支持向量网络),是机器学习中获得关注最多的算法没有之一。它源于统计学习理论,
是我们除了集成算法之外,接触的第一个强学习器。它有多强呢?
从算法的功能来看,SVM几乎囊括了我们前六周讲解的所有算法的功能:
从分类效力来讲,SVM在无论线性还是非线性分类中,都是明星般的存在
- 从实际应用来看,SVM在各种实际问题中都表现非常优秀。它在手写识别数字和人脸识别中应用广泛,在文本和超文本的分类中举足轻重,因为SVM可以大量减少标准归纳(standard inductive)和转换设置(transductivesettings)中对标记训练实例的需求。
- 同时,SVM也被用来执行图像的分类,并用于图像分割系统。实验结果表明,在仅仅三到四轮相关反馈之后,SVM就能实现比传统的查询细化方案(query refinement schemes)高出一大截的搜索精度。
- 除此之外,生物学和许多其他科学都是SVM的青睐者,SVM现在已经广泛被用于蛋白质分类,现在化合物分类的业界平均水平可以达到90%以上的准确率。在生物科学的尖端研究中,人们还使用支持向量机来识别用于模型预测的各种特征,以找出各种基因表现结果的影响因素。
2. 支持向量机分类器是如何工作的
- 先来看看下面这一组数据的分布,这是一组两种标签的数据,两种标签分别由青色和和红色的点代表。
- 支持向量机的分类方法,是在这组分布中找出一个超平面作为决策边界,使模型在数据上的分类误差尽量接近于小,尤其是在未知数据集上的分类误差(泛化误差)尽量小
- 超平面
在几何中,超平面是一个空间的子空间,它是维度比所在空间小一维的空间。 如果数据空间本身是三维的,
则其超平面是二维平面,而如果数据空间本身是二维的,则其超平面是一维的直线。
- 划分边界左边的点被认为是 一类 , 右边被认为是一类 。当左边和右边都只有一种元素的时候 ,那么就没有分类错误 , 我们的训练误差就为 0 ,但是对一个数据集来说 ,这样误差为 0 边界可能有很多个。【如下图】
- 如下图 这里我们有多条划分边界,虽然所有的边界都能将数据很好的划分开,但是并不是每一条线都是最优的,有的划分边界偏向左方或者右方的数据,这样当我们使用这个模型对新的数据进行划分时,如果使用了偏向左方数据或者偏向右方数据的划分边界就会出现图二这种情况
- 如图可知划分边界L1实际上是过拟合了 在图1的训练数据中,L1可以很好的将两边数据划分的很好,但是在图二中它的部分划分时错误的,它将左边青色的点错误的划分到了右边,而划分边界L2则能很好的对数据进行划分
- 支持向量机解决的问题 : 找到多个划分边界中泛化能力最好的那一个,也就是不会受到异常的点影响,在训练的时候去强行拟合异常的点导致模型过拟合 如下图的L2。
- 【如下图】 这里我找到 一个超平面 s0 , 将 s0 分别向左右平移,当碰到左边或者右边第一个向量时,停下,s1 到 s2 的距离成为 边际(margin)被触碰到第一个左边或者右边的向量被称为 支持向量
- 那么 假如 另外一条划分边界 , 这里可以对比下 , 很明显图二的边际大小比较小 , 而图二划分边界的泛化能力是比较差的 ,他会受到某些点的影响 , 从而偏向左边的点
3. 支持向量机的三层理解
- 目标是"找出边际最大的决策边界",听起来是一个十分熟悉的表达,这是一个最优化问题,而最优化问题往往和损失函数联系在一起。和逻辑回归中的过程一样,SVM也是通过最小化损失函数来求解一个用于后续模型使用的重要信息:决策边界。
4. sklearn中的支持向量机
-
注意,除了特别表明是线性的两个类LinearSVC和LinearSVR之外,其他的所有类都是同时支持线性和非线性的。NuSVC和NuSVC可以手动调节支持向量的数目,其他参数都与最常用的SVC和SVR一致。注意OneClassSVM是无监督的类。
-
除了本身所带的类之外,sklearn还提供了直接调用libsvm库的几个函数。Libsvm是台湾大学林智仁(Lin Chih-Jen)教授等人开发设计的一个简单、易于使用和快速有效的英文的SVM库,它提供了大量SVM的底层计算和参数选择,也是sklearn的众多类背后所调用的库。目前,LIBSVM拥有C、Java、Matlab、Python、R等数十种语言版本,每种语言版本都可以在libsvm的官网上进行下载
https://www.csie.ntu.edu.tw/~cjlin/libsvm/ -
sklearn.svm.SVC类的参数
class sklearn.svm.SVC (
C=1.0,
kernel=’rbf’,
degree=3,
gamma=’auto_deprecated’,
coef0=0.0,
shrinking=True,
probability=False,
tol=0.001,
cache_size=200,
class_weight=None,
verbose=False,
max_iter=-1,
decision_function_shape=’ovr’,
random_state=None)
5. SVM 的损失函数的推导
更多推荐
所有评论(0)