在支持向量机(以下简称SVM)的核函数中,高斯核(以下简称RBF)是最常用的,从理论上讲, RBF一定不比线性核函数差,但是在实际应用中,却面临着几个重要的超参数的调优问题。如果调的不好,可能比线性核函数还要差。所以我们实际应用中,能用线性核函数得到较好效果的都会选择线性核函数。如果线性核不好,我们就需要使用RBF,在享受RBF对非线性数据的良好分类效果前,我们需要对主要的超参数进行选取。本文我们就对scikit-learn中 SVM RBF的调参做一个小结。
1. SVM RBF 主要超参数概述
如果是SVM分类模型,这两个超参数分别是惩罚系数$C$和RBF核函数的系数$\gamma$。当然如果是nu-SVC的话,惩罚系数$C$代替为分类错误率上限nu, 由于惩罚系数$C$和分类错误率上限nu起的作用等价,因此本文只讨论带惩罚系数C的分类SVM。
惩罚系数$C$即我们在之前原理篇里讲到的松弛变量的系数。它在优化函数里主要是平衡模型的复杂度和误分类率这两者之间的关系,可以理解为正则化系数。当$C$比较大时,我们的损失函数也会越大,这意味着我们不愿意放弃比较远的离群点。这样我们会有比较少的支持向量,也就是说支持向量和超平面的模型也会变得越复杂,也容易过拟合。反之,当$C$比较小时,意味我们不想理那些离群点,会选择较多的样本来做支持向量,最终的支持向量和超平面的模型也会简单。scikit-learn中默认值是1。
另一个超参数是RBF核函数的参数$\gamma$。回忆下RBF 核函数$K(x, z) = exp(-\gamma||x-z||^2)\;\;\gamma>0$,$\gamma$主要定义了单个样本对整个分类超平面的影响,当$\gamma$比较小时,单个样本对整个分类超平面的影响距离比较远,容易被选择为支持向量,反之,当$\gamma$比较大时,单个样本对整个分类超平面的影响距离比较近,不容易被选择为支持向量,或者说整个模型的支持向量也会少,模型会变得更复杂。scikit-learn中默认值是$\frac{1}{样本特征数}$
如果把惩罚系数$C$和RBF核函数的系数$\gamma$一起看,当$C$比较大, $\gamma$比较大时,我们会有更少的支持向量,我们的模型会比较复杂,容易过拟合一些。如果$C$比较小