sklearn.svm.SVC()函数解析

sklearn.svm.SVC()函数解析

class sklearn.svm.SVC(C=1.0, kernel=’rbf’, degree=3, gamma=’auto_deprecated’,
coef0=0.0, shrinking=True, probability=False, tol=0.001,
cache_size=200, class_weight=None, verbose=False, max_iter=-1,
decision_function_shape=’ovr’, random_state=None)

  • C:惩罚项参数,C越大, 对误分类的惩罚越大(泛化能力越弱)
  • kernel:核函数类型
    • ‘linear’:线性核函数 < x , x " > <x,x">
    • ‘poly’:多项式核函数 ( γ < x , x " > + c o e f 0 ) d (γ+coef0)^d (γ<x,x">+coef0)d, 其中d是有参数degree指定
    • ‘rbf’: 高斯核函数 e x p ( − γ ∣ ∣ x − x " ∣ ∣ exp(-γ||x-x^"|| exp(γxx",其中γ是由参数gamma指定,必须大于0
    • ‘sigmoid’: sigmod核函数 t a n h ( g a m m a ∗ < x , x " > + c o e f 0 ) tanh(gamma*+coef0) tanh(gamma<x,x">+coef0)
  • degree:多项式核函数的阶数.
  • gamma: 核函数系数,默认为auto(代表其值为样本特征数的倒数), 只对’rbf’,‘poly’,'sigmod’有效.定义了单个训练样本有多大的影响力.一个大的gamma,其附近的其他样本一定会被影响到.
  • class_weight:{dict,‘balanced’},可选类别权重.
  • decision_function_shape:‘ovo’(默认,one vs one),‘ovr’(one vs reset).

使用技巧

支持向量机不能很好的容忍非标准化数据,所以强烈建议先将数据标准化后在训练.

数学公式

支持向量机在高维或无限维空间中构造平面或超平面集,可用于分类,回归或其他任务.
一个好的分离的实现方案是,超平面距离训练数据中任意一类的样本的距离达到最大(也称为函数间距)
下图显示一个线性可分问题的决策函数,边界有三个样本,称为"支持向量"
sklearn.svm.SVC()函数解析_第1张图片

SVC

给定训练样本 x i ∈ R p , i = 1 , . . . , n x_i\in R^p,i=1,...,n xiRp,i=1,...,n在二分类中, 和一个向量 y ∈ { 1 , − 1 } n y\in {\{1,-1\}}^n y{1,1}n,我们的目标是找到 w ∈ R p w \in R^p wRp b ∈ R b \in R bR对于给定的预测
sign ⁡ ( w T ϕ ( x ) + b ) \operatorname{sign}\left(w^{T} \phi(x)+b\right) sign(wTϕ(x)+b)
对大多数样本判断正确.

SVC主要解决以下问题

min ⁡ w , b , ζ 1 2 w T w + C ∑ i = 1 n ζ i  subject to  y i ( w T ϕ ( x i ) + b ) ≥ 1 − ζ i ζ i ≥ 0 , i = 1 , … , n \min _{w, b, \zeta} \frac{1}{2} w^{T} w+C \sum_{i=1}^{n} \zeta_{i} \\ \text { subject to } y_{i}\left(w^{T} \phi\left(x_{i}\right)+b\right) \geq 1-\zeta_{i} \zeta_{i} \geq 0, i=1, \ldots, n w,b,ζmin21wTw+Ci=1nζi subject to yi(wTϕ(xi)+b)1ζiζi0,i=1,,n

要最大化间距(等价于最小化 ∣ ∣ w ∣ ∣ 2 = w T w ||w||^2=w^Tw w2=wTw),同时对于分类错误的样本或者在间距内部的样本会招致惩罚.理想情况下, 对于所有样本来说 y i ( w T ϕ ( x i ) + b ) y_{i}\left(w^{T} \phi\left(x_{i}\right)+b\right) yi(wTϕ(xi)+b)的值都应该>1,这是完美预测. 若不能与超平面完全分离,允许一些样本离他们正确的边缘有一个距离 ζ i \zeta_{i} ζi. 惩罚项 C C C控制这个惩罚强度.

对原始问题的对偶问题

min ⁡ α 1 2 α T Q α − e T α  subject to  y T α = 0 0 ≤ α i ≤ C , i = 1 , … , n \min _{\alpha} \frac{1}{2} \alpha^{T} Q \alpha-e^{T} \alpha \\ \text { subject to } y^{T} \alpha=0 \\ 0 \leq \alpha_{i} \leq C, i=1, \ldots, n αmin21αTQαeTα subject to yTα=00αiC,i=1,,n

其中e是一个全1向量, Q Q Q是一个n*n的半正定矩阵
Q i j ≡ y i y j K ( x i , x j ) K ( x i , x j ) = ϕ ( x i ) T ϕ ( x j ) Q_{i j} \equiv y_{i} y_{j} K\left(x_{i}, x_{j}\right) \\ K\left(x_{i}, x_{j}\right)=\phi\left(x_{i}\right)^{T} \phi\left(x_{j}\right) QijyiyjK(xi,xj)K(xi,xj)=ϕ(xi)Tϕ(xj)

K ( x i , x j ) K\left(x_{i}, x_{j}\right) K(xi,xj)是内核. a i a_i ai成为对称系数,他们的上界是 C C C.这种对偶形式强调这样一个事实, 即训练向量可通过核函数隐式映射到一个更高维空间.

决策函数

一旦优化问题解决,对于给定的样本 x x x的决策函数的输出将变成:
∑ i ∈ S V y i α i K ( x i , x ) + b \sum_{i \in S V} y_{i} \alpha_{i} K\left(x_{i}, x\right)+b iSVyiαiK(xi,x)+b

预测的类对应于它的符号. 我们只需在支持向量(即位于边缘范围内的样本上)求和,因为对于其他样本,对偶系数 a i a_i ai为0

属性

可以通过以下属性访问这些参数

  • dual_coef_: y i a i y_ia_i yiai
  • support_vectors_:访问支持向量
  • intercept_: 访问截距下 b b b

实例

#导入库
import numpy as np
from sklearn.svm import SVC
from sklearn.datasets import make_blobs
# 创建分割数据
X,y = make_blobs(n_samples=40, centers=2, random_state=1)
print("X:{}, y:{}".format(X.shape,y.shape))
X:(40, 2), y:(40,)
clf = SVC(gamma='auto')
clf.fit(X,y)
print(clf.predict([[0.8,1]]))
[0]
# 探索建好的模型
clf.predict(X)#根据决策边界, 对X中的样本进行分类,返回的结构为n_samples
array([1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0,
       1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0])
clf.score(X,y)#返回给定测试数据和target的平均准确度
1.0
clf.support_vectors_#返回支持向量
array([[-7.94152277e-01,  2.10495117e+00],
       [-2.18773166e+00,  3.33352125e+00],
       [ 2.42271161e-04,  5.14853403e+00],
       [-2.77687025e+00,  4.64090557e+00],
       [-1.61734616e+00,  4.98930508e+00],
       [-1.97451969e-01,  2.34634916e+00],
       [ 8.52518583e-02,  3.64528297e+00],
       [-2.76017908e+00,  5.55121358e+00],
       [-2.34673261e+00,  3.56128423e+00],
       [-8.86608312e+00, -2.43353173e+00],
       [-9.68207756e+00, -5.97554976e+00],
       [-9.50919436e+00, -4.02892026e+00],
       [-9.80679702e+00, -1.85309341e+00],
       [-1.14418263e+01, -4.45781441e+00],
       [-7.81213710e+00, -5.34984488e+00],
       [-1.07448708e+01, -2.26089395e+00]])

参考

  • svm.SVC参数详解

  • 支持向量机

你可能感兴趣的:(machine,learning,svm,机器学习,支持向量机)