SVM

1 概述
支持向量机(SVM,也称为支持向量网络),是机器学习中获得关注最多的算法没有之一。它源于统计学习理论, 是我们除了集成算法之外,接触的第一个强学习器。它有多强呢?
从算法的功能来看,SVM几乎囊括了我们前六周讲解的所有算法的功能:
SVM
分类效果来讲,SVM在无论线性还是非线性分类中,都是明星般的存在:SVM
实际应用来看,SVM在各种实际问题中都表现非常优秀。实验结果表明,在仅仅三到四轮相关反馈之后,SVM就能实现比传统的查询细化方案(query refinement schemes)高出一大截的搜索精度。

  • 在手写识别数字和人脸识别中应用广泛
  • 在文本和超文本的分类中举足轻重(因为SVM可以大量减少标准归纳(standard inductive)和转换设置(transductive settings)中对标记训练实例的需求)
  • 用来执行图像的分类,并用于图像分割系统
  • 用于蛋白质分类(现在化合物分类的业界平均水平可以达到90%以上的准确率)
  • 识别用于模型预测的各种特征,以找出各种基因表现结果的影响因素

从学术的角度来看,SVM是最接近深度学习的机器学习算法。线性SVM可以看成是神经网络的单个神经元(虽然损 失函数与神经网络不同),非线性的SVM则与两层的神经网络相当,非线性的SVM中如果添加多个核函数,则可以 模仿多层的神经网络。而从数学的角度来看,SVM的数学原理是公认的对初学者来说难于上青天的水平,对于没有 数学基础和数学逻辑熏陶的人来说,探究SVM的数学原理本身宛如在知识的荒原上跋涉。
当然了,没有算法是完美的,比SVM强大的算法在集成学习和深度学习中还有很多很多。但不可否认,它是我们目 前为止接触到的最强大的算法。接下来的两周,我们将一起来探索SVM的神秘世界。

1.1 支持向量机分类器是如何工作的
支持向量机所作的事情其实非常容易理解。先来看看下面这一组数据的分布,这是一组两种标签的数据,两种标签分别由圆和方块代表。支持向量机的分类方法,是在这组分布中找出一个超平面作为决策边界,使模型在数据上的分类误差尽量接近于小,尤其是在未知数据集上的分类误差(泛化误差)尽量小。
SVM
关键概念:超平面
在几何中,超平面是一个空间的子空间,它是维度比所在空间小一维的空间。 如果数据空间本身是三维的, 则其超平面是二维平面,而如果数据空间本身是二维的,则其超平面是一维的直线。
在二分类问题中,如果一个超平面能够将数据划分为两个集合,其中每个集合中包含单独的一个类别,我们就说这个超平面是数据的“决策边界”。
对于一个数据集来说,让训练误差为0的决策边界可以有无数条。
SVM
拥有更大边际的决策边界在分类中的泛化误差更小。如果边际很小,则任何轻微扰动都会对决策边界的分类产生很大的影响。边际很小的情况,是一种模型在训练集上表现很好,却在测试集上表现糟糕的情况,所以会“过拟合”。所以我们在找寻决策边界的时候,希望边际越大越好。
支持向量机,就是通过找出边际最大的决策边界,来对数据进行分类的分类器。也因此,支持向量分类器又叫做最大边际分类器。

1.2 sklearn中的支持向量机
SVM
注意,除了特别表明是线性的两个类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/

2 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)

为了推导和计算的简便,我们规定:
标签是{-1,1}
决策边界以上的点,标签都为正,并且通过调整 和 的符号,让这个点在上得出的结果为正。
决策边界以下的点,标签都为负,并且通过调整 和 的符号,让这个点在上得出的结果为负。
结论:决策边界以上的点都为正,以下的点都为负,是我们为了计算简便,而人为规定的。这种规定,不会影 响对参数向量和截距的求解。