超详细基于sklearn实现软硬间隔SVM

Posted serity

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了超详细基于sklearn实现软硬间隔SVM相关的知识,希望对你有一定的参考价值。

目录

一、硬间隔SVM

sklearn中没有实现硬间隔SVM的类,因为它并不实用,但我们可以通过将正则化项 C C C 设置的足够大(例如 C = 1 0 6 C=10^6 C=106)来模拟硬间隔SVM。

考虑如下的二分类问题:

在平面直角坐标系中,设正样例为 x 1 = ( 1 , 2 ) , x 2 = ( 2 , 3 ) , x 3 = ( 3 , 3 ) \\boldsymbolx_1=(1,2), \\boldsymbolx_2=(2, 3), \\boldsymbolx_3=(3, 3) x1=(1,2),x2=(2,3),x3=(3,3),负样例为 x 4 = ( 2 , 1 ) , x 5 = ( 3 , 2 ) \\boldsymbolx_4=(2, 1), \\boldsymbolx_5=(3,2) x4=(2,1),x5=(3,2),试求最大间隔超平面。

不难看出,我们的SVM应使用线性核

在进行下一步之前,我们先来介绍一下sklearn中有关SVM的类 sklearn.svm.SVC()

1.1 sklearn.svm.SVC()

本文并不会讲解所有的参数,需要进一步了解的读者可自行参阅官方文档

1.1.1 数据集

机器学习中,数据集通常以如下的形式表示:

D = ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯   , ( x n , y n ) D=\\(\\boldsymbolx_1,y_1),(\\boldsymbolx_2,y_2),\\cdots,(\\boldsymbolx_n,y_n)\\ D=(x1,y1),(x2,y2),,(xn,yn)

其中每个 x i \\boldsymbolx_i xi 是示例, y i y_i yi 是示例对应的标签, ( x i , y i ) (\\boldsymbolx_i,y_i) (xi,yi) 合起来称为样例。为接下来叙述方便起见,这里假设 x i \\boldsymbolx_i xi 是行向量。

X = [ x 1 x 2 ⋮ x n ] , y = [ y 1 y 2 ⋮ y n ] X= \\beginbmatrix \\boldsymbolx_1 \\\\ \\boldsymbolx_2 \\\\ \\vdots \\\\\\boldsymbolx_n \\endbmatrix,\\quad y= \\beginbmatrix y_1 \\\\ y_2 \\\\ \\vdots \\\\y_n \\endbmatrix X=x1x2xn,y=y1y2yn

则称 X X X 为示例矩阵, y y y 为标签向量。例如,对于上述的二分类问题,我们的 X , y X,y X,y 分别为:

X = [[1, 2], 
     [2, 3], 
     [3, 3], 
     [2, 1], 
     [3, 2]]
y = [1, 1, 1, -1, -1]

设样例数为 samples,特征数为 features,则显而易见 X X X 的形状为 (samples, features) y y y 的形状为 (samples,)

1.1.2 参数

我们通常会作导入:

from sklearn.svm import SVC

使用时只需要 SVC() 即可创建一个SVC实例。

创建一个 SVC 实例常用到以下参数:

S V C ( C = 1.0 , k e r n e l = ‘ r b f ’ , d e g r e e = 3 , g a m m a = ‘ s c a l e ’ , c o e f 0 = 0.0 ,  ⁣ ⁣ ⁣  ⁣   ⁣ d e c i s i o n _ f u n c t i o n _ s h a p e = ‘ o v r ’ , r a n d o m _ s t a t e = N o n e ) \\small \\beginaligned &\\mathrmSVC(C=1.0, kernel=‘rbf’, degree=3,gamma=‘scale’,coef0=0.0, \\\\ & \\qquad\\quad\\!\\!\\!\\,\\!\\;\\! \\mathrmdecision\\_function\\_shape=‘ovr’, random\\_state=None) \\\\ \\endaligned SVC(C=1.0,kernel=rbf,degree=3,gamma=scale,coef0=0.0,decision_function_shape=ovr,random_state=None)


C : \\textcolorblue\\mathrmC: C:

C 是正则化项,必须为正数,默认值为 1。


k e r n e l : \\textcolorblue\\mathrmkernel: kernel:

kernel 是核函数,默认为高斯核。

常见的四种核函数:

  • 线性核: ⟨ x , x ′ ⟩ \\langle x,x'\\rangle x,x
  • 多项式核: ( γ ⟨ x , x ′ ⟩ + r ) d (\\gamma\\langle x,x'\\rangle+r)^d (γx,x+r)d,其中 d d ddegree r r rcoef0
  • 高斯核(RBF核): exp ⁡ ( − γ ∥ x − x ′ ∥ 2 ) \\exp(-\\gamma\\Vert x-x'\\Vert^2) exp(γxx2),其中 γ \\gamma γgamma,且必须为正
  • Sigmoid核: tanh ⁡ ( γ ⟨ x , x ′ ⟩ + r ) \\tanh(\\gamma\\langle x,x'\\rangle+r) tanh(γx,x+r),其中 r r rcoef0

这些核函数分别对应:‘linear’、‘poly’、‘rbf’、‘sigmoid’。


d e g r e

以上是关于超详细基于sklearn实现软硬间隔SVM的主要内容,如果未能解决你的问题,请参考以下文章

Sklearn SVM 系数属性 - 如何获取类名?

支持向量机+sklearn绘制超平面

机器学习SVM多分类问题及基于sklearn的Python代码实现

一文详尽之支持向量机算法!

机器学习基础一文详尽之支持向量机(SVM)算法!

参数“coef0”是不是表示 sklearn.svm.SVC 方法中的特定系数?