svm.SVC API

本文介绍了SVM的SVC API使用步骤,包括数据预处理、选择核函数、参数调优等。重点解析了SVC的重要参数如C、kernel、degree、gamma等,其中C影响泛化能力,kernel选择对分类效果至关重要,高斯核函数(RBF)常用且适应性强。此外,还讨论了degree、gamma、coef0等相关参数的作用。

 推荐使用SVM的步骤为:

  1. 将原始数据转化为SVM算法软件或包所能识别的数据格式;
  2. 将数据标准化;(防止样本中不同特征数值大小相差较大影响分类器性能)
  3. 不知使用什么核函数,考虑使用RBF;
  4. 利用交叉验证网格搜索寻找最优参数(C, γ);(交叉验证防止过拟合,网格搜索在指定范围内寻找最优参数)
  5. 使用最优参数来训练模型;
  6. 测试。

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

参数:

: float,可选(默认值= 1.0)

错误术语的惩罚参数C.

kernel : string,optional(default ='rbf')

指定要在算法中使用的内核类型。它必须是'linear','poly','rbf','sigmoid','precomputed'或者callable之一。如果没有给出,将使用'rbf'。如果给出可调用,则它用于从数据矩阵预先计算内核矩阵; 该矩阵应该是一个形状的数组。(n_samples, n_samples)

 : int,可选(默认= 3)

多项式核函数的次数('poly')。被所有其他内核忽略。

gamma : float,optional(默认='auto')

'rbf','poly'和'sigmoid'的核系数。

当前默认值为'auto',它使用1 / n_features,如果gamma='scale'传递,则使用1 /(n_features * X.var())作为gamma的值。当前默认的gamma''auto'将在版本0.22中更改为'scale'。'auto_deprecated',不推荐使用'auto'版本作为默认值,表示没有传递明确的gamma值。

coef0 : float,optional(默认值= 0.0)

核函数中的独立项。它只在'poly'和'sigmoid'中很重要。

shrinking  : 布尔值,可选(默认= True)

是否使用收缩启发式。

probability : 布尔值,可选(默认=假)

是否启用概率估计。必须在调用之前启用它fit,并且会减慢该方法的速度。

tol : float,optional(默认值= 1e-3)

容忍停止标准。

cache_size : float,可选

指定内核缓存的大小(以MB为单位)。

class_weight : {dict,'balanced'},可选

将类i的参数C设置为SVC的class_weight [i] * C. 如果没有给出,所有课程都应该有一个重量。“平衡”模式使用y的值自动调整与输入数据中的类频率成反比的权重n_samples / (n_classes * np.bincount(y))

详细说明 : bool,默认值:False

启用详细输出。请注意,此设置利用libsvm中的每进程运行时设置,如果启用,则可能无法在多线程上下文中正常运行。

max_iter : int,optional(默认值= -1)

求解器内迭代的硬限制,或无限制的-1。

decision_function_shape : 'ovo','ovr',默认='ovr'

是否将形状(n_samples,n_classes)的one-vs-rest('ovr')决策函数作为所有其他分类器返回,或者返回具有形状的libsvm的原始one-vs-one('ovo')决策函数(n_samples) ,n_classes *(n_classes - 1)/ 2)。但是,一对一('ovo')总是被用作多级策略。

在版本0.19中更改: decision_function_shape默认为'ovr'。

版本0.17中的新功能:建议使用decision_function_shape ='ovr'

更改版本0.17:已弃用decision_function_shape ='ovo'且无

random_state : int,RandomState实例或None,可选(默认=无)

伪随机数生成器的种子在对数据进行混洗以用于概率估计时使用。如果是int,则random_state是随机数生成器使用的种子; 如果是RandomState实例,则random_state是随机数生成器; 如果为None,则随机数生成器是由其使用的RandomState实例np.random

重要参数解析:

C:C-SVC的惩罚参数C?默认值是1.0,C越大,相当于惩罚松弛变量,希望松弛变量接近0,即对误分类的惩罚增大,趋向于对训练集全分对的情况,这样对训练集测试时准确率很高,但泛化能力弱。C值小,对误分类的惩罚减小,允许容错,将他们当成噪声点,泛化能力较强。

kernel :核函数,默认是rbf,可以是‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’

   0 – 线性:u\'v

  1 – 多项式:(gamma*u\'*v + coef0)^degree

   2 – RBF函数:exp(-gamma|u-v|^2)

   3 – sigmoid:tanh(gamma*u\'*v + coef0)

degree :多项式poly函数的维度,默认是3,选择其他核函数时会被忽略。

gamma : ‘rbf’,‘poly’和‘sigmoid’的核函数参数。默认是’auto’,如果是auto,则值为1/n_features

coef0 :核函数的常数项。对于‘poly’和 ‘sigmoid’有用。

probability :是否采用概率估计?.默认为False

shrinking :是否采用shrinking heuristic方法,默认为true

tol :停止训练的误差值大小,默认为1e-3

cache_size :核函数cache缓存大小,默认为200

class_weight :类别的权重,字典形式传递。设置第几类的参数C为weight*C(C-SVC中的C)

verbose :允许冗余输出

max_iter :最大迭代次数。-1为无限制。

decision_function_shape :‘ovo’, ‘ovr’ or None, default=ovr

random_state :数据洗牌时的种子值,int值

 

 

参数kernel

代表了svm的核函数,不同的核函数对最后的分类效果影响也比较大,其中precomputed表示自己提前计算好核函数矩阵,这时候算法内部就不再用核函数去计算核矩阵,而是直接用你给的核矩阵,我们说说另外的几种。

线性核函数

κ(x,xi)=x⋅xi

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

多项式核函数

κ(x,xi)=((x⋅xi)+1)d

多项式核函数可以实现将低维的输入空间映射到高纬的特征空间,但是多项式核函数的参数多,当多项式的阶数比较高的时候,核矩阵的元素值将趋于无穷大或者无穷小,计算复杂度会大到无法计算。

高斯(RBF)核函数

κ(x,xi)=exp(−||x−xi||2δ2)

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

sigmoid核函数

κ(x,xi)=tanh(η<x,xi>+θ)

采用sigmoid核函数,支持向量机实现的就是一种多层神经网络。 因此,在选用核函数的时候,如果我们对我们的数据有一定的先验知识,就利用先验来选择符合数据分布的核函数;如果不知道的话,通常使用交叉验证的方法,来试用不同的核函数,误差最下的即为效果最好的核函数,或者也可以将多个核函数结合起来,形成混合核函数。在吴恩达的课上,也曾经给出过一系列的选择核函数的方法:

  • 如果特征的数量大到和样本数量差不多,则选用LR或者线性核的SVM;
  • 如果特征的数量小,样本的数量正常,则选用SVM+高斯核函数;
  • 如果特征的数量小,而样本的数量很大,则需要手工添加一些特征从而变成第一种情况。

实际上使用可以对多个核函数进行测试,选择表现效果最好的核函数。

参数degree

该参数上文中也说的比较详细了,仅适用于poly,在实际应用中当数据量达到二十w以上,3层degree将会收敛的极其慢,不推荐使用。

参数gamma

这个值可能看官方文档不怎么看得懂,它是一个浮点数,作为三个核函数的参数,隐含地决定了数据映射到新的特征空间后的分布,gamma越大,支持向量越少,。gamma值越小,支持向量越多。支持向量的个数影响训练与预测的速度。

参数C

这个值官方文档说的比较明白了,就是在泛化能力和准确度间做取舍,一般来说不需要做修改,如果不需要强大的泛化能力,可减小C的值,即:C值越大,在测试集效果越好,但可能过拟合,C值越小,容忍错误的能力越强,在测试集上的效果越差。参数C和gamma是svm中两个非常重要的参数,对其值的调整直接决定了整个模型最终的好坏。

参数coef0

该参数默认值为0,是poly和sigmoid的核函数常数项,用于解决poly函数中当<x,y>值趋近,没有明显区分时,对于不同值之间差异的衡量问题,一般采用默认值0即可。在scikit-learn-svc-coef0-parameter-range这个问题中有比较详细的讲解。

参数probability

默认为False决定最后是否按概率输出每种可能的概率,但需注意最后的预测函数应改为clf.predict_proba,代码举例:

x=[[1,2,3],[11,18,16],[22,27,26],[33,34,39]]
y=[1,1,2,2]
clf=svm.SVC(probability=True,kernel='poly', degree=2,gamma=0.1,coef0=1)
clf.fit(x,y)
print clf.predict_proba([10,15,13])

output:
[[ 0.62913274  0.37086726]]

参数shrinking

该参数默认为True,即采用启发式收缩方式,如果能预知哪些变量对应着支持向量,则只要在这些样本上训练就够了,其他样本可不予考虑,这不影响训练结果,但降低了问题的规模并有助于迅速求解,起到一个加速训练的效果。

参数tol

svm停止训练的误差精度,float参数 默认为1e^-3,精度达到该标准则停止训练。

参数cache_size

该参数很明显,就是设置svm在训练时允许的缓存大小,默认为200。

参数class_weight

字典类型或者‘balance’字符串,默认为None。 给每个类别分别设置不同的惩罚参数C,如果没有给,则会给所有类别都给C=1,即前面指出的参数C.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值