超详细基于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=⎣⎢⎢⎢⎡x1x2⋮xn⎦⎥⎥⎥⎤,y=⎣⎢⎢⎢⎡y1y2⋮yn⎦⎥⎥⎥⎤
则称 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
d 是
degree
, r r r 是coef0
- 高斯核(RBF核):
exp
(
−
γ
∥
x
−
x
′
∥
2
)
\\exp(-\\gamma\\Vert x-x'\\Vert^2)
exp(−γ∥x−x′∥2),其中
γ
\\gamma
γ 是
gamma
,且必须为正 - Sigmoid核:
tanh
(
γ
⟨
x
,
x
′
⟩
+
r
)
\\tanh(\\gamma\\langle x,x'\\rangle+r)
tanh(γ⟨x,x′⟩+r),其中
r
r
r 是
coef0
这些核函数分别对应:‘linear’、‘poly’、‘rbf’、‘sigmoid’。
d
e
g
r
e
以上是关于超详细基于sklearn实现软硬间隔SVM的主要内容,如果未能解决你的问题,请参考以下文章