sklearn中svm详解

1、SVC函数原型

SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
decision_function_shape=None, degree=3, gamma=‘auto’, kernel=‘rbf’,
max_iter=-1, probability=False, random_state=None, shrinking=True,
tol=0.001, verbose=False)

2、参数详解

  • C:惩罚参数。 默认值是1.0,C越大,相当于惩罚松弛变量,希望松弛变量接近0,即对误分类的惩罚增大,趋向于对训练集全分对的情况,这样对训练集测试时准确率很高,但容易过拟合,高方差,泛化能力弱。C值小,对误分类的惩罚减小,允许容错,将他们当成噪声点,泛化能力较强,但过小容易欠拟合,高偏差。
  • cache_size :核函数cache缓存大小,默认为200。
  • class_weight :类别的权重,字典形式传递。设置第几类的参数C为weight*C(C-SVC中的C)
  • coef0 :核函数的常数项。对于‘poly’和 ‘sigmoid’有用。
  • decision_function_shape :‘ovo’, ‘ovr’ or None, default=ovr
  • degree :多项式poly函数的维度,默认是3,选择其他核函数时会被忽略。
  • gamma : ‘rbf’,‘poly’和‘sigmoid’的核函数参数。默认是’auto’,如果是auto,则值为1/n_features
  • 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)
  • max_iter :最大迭代次数。-1为无限制。
  • probability :是否采用概率估计?.默认为False
  • random_state :数据洗牌时的种子值,int值
  • shrinking :是否采用shrinking heuristic方法,默认为true
  • tol :停止训练的误差值大小,默认为1e-3
  • verbose :允许冗余输出

参数具体详解

1、参数C

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

2、参数cache_size

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

3、参数class_weight

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

4、参数coef0

该参数默认值为0,是poly和sigmoid的核函数常数项,用于解决poly函数中当<x,y>值趋近,没有明显区分时,对于不同值之间差异的衡量问题,一般采用默认值0即可。反映了高阶多项式相对于低阶多项式对模型的影响,如果发生了过拟合的现象,则可以减小coef0;如果发生了欠拟合的现象,可以试着增大coef0.

5、参数degree

仅适用于poly,在实际应用中当数据量达到二十w以上,3层degree将会收敛的极其慢,不推荐使用。

扫描二维码关注公众号,回复: 6514544 查看本文章

6、参数gamma

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

7、参数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+高斯核函数;
如果特征的数量小,而样本的数量很大,则需要手工添加一些特征从而变成第一种情况。
实际上使用可以对多个核函数进行测试,选择表现效果最好的核函数。

8、参数probability

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

9、参数shrinking

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

10、参数tol

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

11、参数verbose

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

还可以参考一下博客:https://xijunlee.github.io/2017/03/29/sklearn中SVM调参说明及经验总结/

猜你喜欢

转载自blog.csdn.net/qq_42780025/article/details/92397765
今日推荐