天天看点

SVM基本概要与sklearn.svm.svc 参数说明

SVM的基本概念

先介绍一些简单的基本概念:

分隔超平面:将数据集分割开来的直线叫做分隔超平面。

超平面:如果数据集是N维的,那么就需要N-1维的某对象来对数据进行分割。该对象叫做超平面,也就是分类的决策边界。

间隔:

一个点到分割面的距离,称为点相对于分割面的距离。

数据集中所有的点到分割面的最小间隔的2倍,称为分类器或数据集的间隔。

最大间隔:SVM分类器是要找最大的数据集间隔。

支持向量:坐落在数据边际的两边超平面上的点被称为支持向量

为什么要求最大间隔:

是因为几何间隔与样本的误分次数间存在关系:

误分次数

SVM基本概要与sklearn.svm.svc 参数说明

其中的δ是样本集合到分类面的间隔,R=max ||xi|| i=1,…,n,即R是所有样本中(xi是以向量表示的第i个样本)向量长度最长的值(也就是说代表样本的分布有多么广)。先不必追究误分次数的具体定义和推导过程,只要记得这个误分次数一定程度上代表分类器的误差。而从上式可以看出,误分次数的上界由几何间隔决定!(当然,是样本已知的时候)

sklearn.svc 参数

sklearn中的SVC函数是基于libsvm实现的,所以在参数设置上有很多相似的地方。(PS: libsvm中的二次规划问题的解决算法是SMO)。

对于SVC函数的参数解释如下:(主要翻译的sklearn 文档)

C: float参数 默认值为1.0

错误项的惩罚系数。C越大,即对分错样本的惩罚程度越大,因此在训练样本中准确率越高,但是泛化能力降低,也就是对测试数据的分类准确率降低。相反,减小C的话,容许训练样本中有一些误分类错误样本,泛化能力强。对于训练样本带有噪声的情况,一般采用后者,把训练样本集中错误分类的样本作为噪声。

kernel: str参数 默认为‘rbf’

算法中采用的核函数类型,可选参数有:

‘linear’:线性核函数

‘poly’:多项式核函数

‘rbf’:径像核函数/高斯核

‘sigmod’:sigmod核函数

‘precomputed’:核矩阵

precomputed表示自己提前计算好核函数矩阵,这时候算法内部就不再用核函数去计算核矩阵,而是直接用你给的核矩阵。核矩阵为如下形式:

SVM基本概要与sklearn.svm.svc 参数说明

还有一点需要说明,除了上面限定的核函数外,还可以给出自己定义的核函数,其实内部就是用你自己定义的核函数来计算核矩阵。

degree: int型参数 默认为3

这个参数只对多项式核函数有用,是指多项式核函数的阶数n

如果给的核函数参数是其他核函数,则会自动忽略该参数。

gamma: float参数 默认为auto

核函数系数,只对‘rbf’,‘poly’,‘sigmod’有效。

如果gamma为auto,代表其值为样本特征数的倒数,即1/n_features.

coef0: float参数 默认为0.0

核函数中的独立项,只有对‘poly’和‘sigmod’核函数有用,是指其中的参数c

probability: bool参数 默认为False

是否启用概率估计。 这必须在调用fit()之前启用,并且会fit()方法速度变慢。

shrinking: bool参数 默认为True

是否采用启发式收缩方式

tol: float参数 默认为1e^-3

svm停止训练的误差精度

cache_size: float参数 默认为200

指定训练所需要的内存,以MB为单位,默认为200MB。

class_weight: 字典类型或者‘balance’字符串。默认为None

给每个类别分别设置不同的惩罚参数C,如果没有给,则会给所有类别都给C=1,即前面参数指出的参数C.

如果给定参数‘balance’,则使用y的值自动调整与输入数据中的类频率成反比的权重。

verbose : bool参数 默认为False

是否启用详细输出。 此设置利用libsvm中的每个进程运行时设置,如果启用,可能无法在多线程上下文中正常工作。一般情况都设为False,不用管它。

max_iter : int参数 默认为-1

最大迭代次数,如果为-1,表示不限制

random_state: int型参数 默认为None

伪随机数发生器的种子,在混洗数据时用于概率估计。

★fit() 方法:用于训练SVM,具体参数已经在定义SVC对象的时候给出了,这时候只需要给出数据集X和X对应的标签y即可。

★predict() 方法: 基于以上的训练,对预测样本T进行类别预测,因此只需要接收一个测试集T,该函数返回一个数组表示个测试样本的类别。

★属性有哪些:

svc.n_support_:各类各有多少个支持向量

svc.support_:各类的支持向量在训练样本中的索引

svc.support_vectors_:各类所有的支持向量

继续阅读