支持向量机实战 核函数的小试验
Posted 挖挖机ML
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了支持向量机实战 核函数的小试验相关的知识,希望对你有一定的参考价值。
第五节介绍了SVM配合核函数进行非线性分类的机制。本节通过一个小例子来演示带核函数的SVM的分类效果。
仍然使用Python的Sklearn包来建立支持向量机分类器。用到的训练集同(鸢尾花)。首先引入用到的包,如下:
打印SVC函数,即支持向量机分类器,列出了默认的参数,其中C就是前文提到的惩罚因子;class_weight为各分类的权重;decision_function_shape为分类决策函数的类别,ovr(一对其它)和ovo(一对一);degree为多项式核的最高次方;gamma为rbf核的方差(类似正态分布的sigma),默认为auto取值为1/特征数;kernel为核函数类型,本文演示:linear线性核、rbf高斯径向基核、poly多项式核、以及sigmoid核。其他参数random_state为随机种子值,tol为迭代停止的条件,默认小于0.001停止。
下图为不同核函数的平均准确率,代码和结果如下:
在其他参数默认的情况下,鸢尾花这样只有150行的小数据集使用线性核就能达到高斯核同样高的精度0.98。
而使用最广泛的高斯核rbf,在不同gamma值情况下的精度。如下:
当gamma值很小只有0.01时,高斯核函数的分布呈”瘦高型“,在训练集上准确率较高,但容易过拟合,它的交叉验证平均准确率相比其他最低(0.93)。当gamma增大到0.5时,准确率达到最高的0.98,之后继续增大gamma隔离地带会变得较宽,导致分错的数据变多,精度下降。
再来看另一种常用的核——多项式核poly取不同次方的效果:
如上,degree取3时,交叉验证效果最好0.96,当degree继续增大一直到9次方时,出现了过拟合,准确率下降到0.94。
最后,SVC有几个关于支持向量的属性,如下:
通过fit方法训练模型之后,模型的属性support_能给出训练得到的支持向量的样本号,而support_vectors_得到具体的支持向量样本。
OK,到此,支持向量机的主要内容介绍完毕,希望本系列文章能起到抛砖引玉的效果,让大家能以此为基础更深入的探究支持向量机的奥秘。
这居然是第一个完结的系列!后续还会有其他模型单独的系列文章发布。下次再见!
历史文章回顾
以上是关于支持向量机实战 核函数的小试验的主要内容,如果未能解决你的问题,请参考以下文章