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
:核函数类型
degree
:多项式核函数的阶数.gamma
: 核函数系数,默认为auto(代表其值为样本特征数的倒数), 只对’rbf’,‘poly’,'sigmod’有效.定义了单个训练样本有多大的影响力.一个大的gamma,其附近的其他样本一定会被影响到.class_weight
:{dict,‘balanced’},可选类别权重.decision_function_shape
:‘ovo’(默认,one vs one),‘ovr’(one vs reset).支持向量机不能很好的容忍非标准化数据,所以强烈建议先将数据标准化后在训练.
支持向量机在高维或无限维空间中构造平面或超平面集,可用于分类,回归或其他任务.
一个好的分离的实现方案是,超平面距离训练数据中任意一类的样本的距离达到最大(也称为函数间距)
下图显示一个线性可分问题的决策函数,边界有三个样本,称为"支持向量"
给定训练样本 x i ∈ R p , i = 1 , . . . , n x_i\in R^p,i=1,...,n xi∈Rp,i=1,...,n在二分类中, 和一个向量 y ∈ { 1 , − 1 } n y\in {\{1,-1\}}^n y∈{1,−1}n,我们的目标是找到 w ∈ R p w \in R^p w∈Rp和 b ∈ R b \in R b∈R对于给定的预测
sign ( w T ϕ ( x ) + b ) \operatorname{sign}\left(w^{T} \phi(x)+b\right) sign(wTϕ(x)+b)
对大多数样本判断正确.
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=1∑nζi subject to yi(wTϕ(xi)+b)≥1−ζiζi≥0,i=1,…,n
要最大化间距(等价于最小化 ∣ ∣ w ∣ ∣ 2 = w T w ||w||^2=w^Tw ∣∣w∣∣2=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≤αi≤C,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) Qij≡yiyjK(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 i∈SV∑yiαiK(xi,x)+b
预测的类对应于它的符号. 我们只需在支持向量(即位于边缘范围内的样本上)求和,因为对于其他样本,对偶系数 a i a_i ai为0
可以通过以下属性访问这些参数
dual_coef_
: y i a i y_ia_i yiaisupport_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参数详解
支持向量机