SVM学习

前言

SVM分类器是一种常用的分类器,使用甚多,却没有详细了解,值此面试佳季,来个详解吧

Part 1 线性分类器

硬间隔支持向量机(硬边)

如果一个线性函数能够将样本完全正确分开,就称这些数据是线性可分的,否则称为非线性可分的。
线性函数:在一维空间是一个点,二维空间是一条直线,三维空间是一个平面,以此类推,可统称为超平面(Hyper Plane)。
对于二类分类问题,训练集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯   , ( x N , y N ) } T = \{({{\text{x}}_{1}},{{{y}}_1}),({{\text{x}}_{2}},{{{y}}_2}),\cdots,({{\text{x}}_{N}},{{{y}}_N})\} T={(x1,y1),(x2,y2),,(xN,yN)},其类别 y i {{{y}}_i} yi∈{-1,1},样本特征向量 x i = [ x i 1 , x i 2 , ⋯   , x i m ] {\text{x}}_{i}=[x_{i1},x_{i2},\cdots,x_{im}] xi=[xi1,xi2,,xim]。线性SVM通过学习得到分离超平面:
w T ⋅ x + b = 0 {{\mathbf{w}}^{\rm T}} \cdot {\mathbf{x}} + {\mathbf{b}} = 0 wTx+b=0
相应的分类决策函数:
f ( x ) = s i g n ( w T ⋅ x + b ) f(x)=sign({{\mathbf{w}}^{\rm T}} \cdot {\mathbf{x}} + {\mathbf{b}}) f(x)=sign(wTx+b)
Alt
Alt
彩色图中,超平面 B 1 \text{B}_1 B1的分类效果更好一点。 b 11 {b}_{11} b11 b 12 {b}_{12} b12是平行于 B 1 \text{B}_1 B1的,且过离 B 1 \text{B}_1 B1最近的两类样本,这些样本称为支持向量(support vector)。 b 11 {b}_{11} b11 b 12 {b}_{12} b12之间的距离称为margin:
m a r g i n = 2 ∥ w ∥ margin=\frac{2} {{\left\| {\mathbf{w}} \right\|}} margin=w2
显然,margin更大,则分类正确的确信度更高(与超平面的距离表示分类的确信度,距离越远则分类正确的确信度越高)。
从上图中可观察到:margin以外的样本点对于确定分离超平面没有贡献,换句话说,SVM是有很重要的训练样本(支持向量)所确定的。至此,SVM分类问题可描述为在全部分类正确的情况下,最大化 2 ∥ w ∥ \frac{2}{{\left\| {\mathbf{w}} \right\|}} w2(等价于最小化 1 2 ∥ w ∥ 2 \frac{1}{2}{\left\| {\mathbf{w}} \right\|}^2 21w2),即线性分类的约束最优化问题:
min ⁡ w 1 2 ∥ w ∥ 2 \mathop {\min }\limits_w \quad \frac{1}{2}{\left\| {\mathbf{w}} \right\|}^2 wmin21w2
s . t . y i ∗ ( w T ⋅ x i + b ) > = 1 s.t. \quad {{{y}}_i}*({{\mathbf{w}}^{\rm T}} \cdot {\mathbf{x}_i} + {\mathbf{b}})>=1 s.t.yi(wTxi+b)>=1
y i {{{y}}_i} yi这个公式是通过以下公式改写的
w T ⋅ x i + b &gt; = 1 , i f y i = 1 w T ⋅ x i + b &lt; = − 1 , i f y i = − 1 {{\mathbf{w}}^{\rm T}} \cdot {\mathbf{x}_i} + {\mathbf{b}}&gt;=1,\quad if\quad{{{y}}_i}=1 \\ {{\mathbf{w}}^{\rm T}} \cdot {\mathbf{x}_i} + {\mathbf{b}}&lt;=-1,\quad if\quad{{{y}}_i}=-1 wTxi+b>=1,ifyi=1wTxi+b<=1,ifyi=1

软间隔支持向量机(软边际)

但是新问题出现了,在实际应用中,我们得到的数据并不总是完美的线性可分的,其中可能会有个别噪声点,他们错误的被分类到了其他类中。如果将这些特异的噪点去除后,可以很容易的线性可分。但是,我们对于数据集中哪些是噪声点却是不知道的,如果以之前的方法进行求解,会无法进行线性分开。两种说法:
1、为此,我们引入了铰链损失函数,
m a x ( 0 , 1 − y i ∗ ( w T ⋅ x i + b ) ) max(0,1-{{{y}}_i}*({{\mathbf{w}}^{\rm T}} \cdot {\mathbf{x}_i} + {\mathbf{b}})) max(0,1yi(wTxi+b))
如果 x i {\mathbf{x}_i} xi位于边缘的正确一侧,那么这个函数为0。所以我们希望尽量减少:
[ 1 n ∑ i = 1 n max ⁡ ( 0 , 1 − y i ∗ ( w T ⋅ x i + b ) ) ] + λ ∥ w ∥ 2 \left[ {\frac{1} {n}\sum\limits_{i = 1}^n {\max \left( {0,1 - {{{y}}_i}*({{\mathbf{w}}^{\rm T}} \cdot {\mathbf{x}_i} + {\mathbf{b}})} \right)} } \right] + \lambda {\left\| {\mathbf{w}} \right\|}^2 [n1i=1nmax(0,1yi(wTxi+b))]+λw2
我的理解:当有些数据是噪声或会分类错误时(即左侧值会变大),增加 λ \lambda λ,使最小化 ∥ w ∥ 2 {\left\| {\mathbf{w}} \right\|}^2 w2权重增加,即增大margin,从而提高分类准确率。当 λ \lambda λ足够小时,这个就类似于硬间隔支持向量机。
2、对每个样本引入一个松弛变量 ξ i ≥ 0 ξ_i≥0 ξi0,这样约束条件变为:
y i ∗ ( w T ⋅ x i + b ) ≥ 1 − ξ i {{{y}}_i}*({{\mathbf{w}}^{\rm T}} \cdot {\mathbf{x}_i} + {\mathbf{b}})≥1-ξ_i yi(wTxi+b)1ξi
目标函数则变为:
min ⁡ w , b , ξ 1 2 ∥ w ∥ 2 + C ∑ i = 1 n ξ i \mathop {\min }\limits_{w,b,ξ}\quad \frac{1}{2}{\left\| {\mathbf{w}} \right\|}^2+C\sum\limits_{i = 1}^n {{\xi _i}} w,b,ξmin21w2+Ci=1nξi
其中,C为惩罚函数,是调节二者的参数。目标函数有两层含义:

  • margin尽量大
  • 误分类的样本点计量少

详细参见:https://www.cnblogs.com/en-heng/p/5965438.html

Part 2 非线性分类

对与非线性可分数据,将数据投影到一个线性可分的空间,然后在那个空间寻找超平面!即

1、首先使用一个非线性映射将数据变换到一个特征空间F,
2、然后在特征空间使用线性学习器分类。

在用SVM处理问题时,如果数据线性不可分,希望通过 将输入空间内线性不可分的数据 映射到 一个高维的特征空间内,使数据在特征空间内是线性可分的,这个映射记作 ϕ ( x ) ϕ(x) ϕ(x),之后优化问题中就会有内积 ϕ i ⋅ ϕ j ϕi⋅ϕj ϕiϕj,这个内积的计算维度会非常大,因此引入了核函数, kernel 可以帮我们很快地做一些计算, 否则将需要在高维空间中进行计算。

1、核函数形式 K(x, y) = <f(x), f(y)>,
2、其中 x, y 为 n 维,f 为 n 维到 m 维的映射,<f(x), f(y)> 表示内积。

一些常见的核函数包括:

核函数用处公式
linear kernel线性可分时,特征数量多时,样本数量多再补充一些特征时,linear kernel可以是RBF kernel的特殊情况 K ( x i , x j ) = x i T x j K(x_i,x_j)=x_i^Tx_j K(xi,xj)=xiTxj
Polynomial kernelimage processing,参数比RBF多,取值范围是(0,inf) K ( x i , x j ) = ( γ x i T x j + r ) d , d &gt; 1 K(x_i,x_j)=(\gamma x_i^Tx_j+r)^d,d&gt;1 K(xi,xj)=(γxiTxj+r)d,d>1
Gaussian radial basis function (RBF)通用,线性不可分时,特征维数少 样本数量正常时,在没有先验知识时用,取值在[0,1] K ( x i , x j ) = e x p ( − γ ∥ x i − x j ∥ 2 ) K(\mathbf{x}_i,\mathbf{x}_j)=exp(-\gamma {\left\| {\mathbf{x_i-x_j}} \right\|}^2) K(xi,xj)=exp(γxixj2)
Sigmoid kernel生成神经网络,在某些参数下和RBF很像,可能在某些参数下是无效的 k ( x , y ) = t a n h ( α x T y + c ) k(x,y)=tanh(\alpha x^Ty+c) k(x,y)=tanh(αxTy+c)
Gaussian kernel通用,在没有先验知识时用 k ( x , y ) = e x p ( − ∥ x − y ∥ 2 2 σ 2 ) k(x,y)=exp(-\frac{{\left\| {{x-y}} \right\|}^2}{2\sigma ^2 }) k(x,y)=exp(2σ2xy2)
Laplace RBF kernel通用,在没有先验知识时用 k ( x , y ) = e x p ( − ∥ x − y ∥ σ ) k(x,y)=exp(-\frac{\left\|x-y\right\|}{\sigma}) k(x,y)=exp(σxy)
Hyperbolic tangent kernelneural networks中用 K ( x i , x j ) = t a n h ( k x i ⋅ x j + c ) K(x_i,x_j)=tanh(kx_i \cdot x_j+c) K(xi,xj)=tanh(kxixj+c)
Bessel function of the first kind Kernel可消除函数中的交叉项 k ( x , y ) = J v + 1 ( σ ∥ x − y ∥ ) ∥ x − y ∥ − n ( v + 1 ) k(x,y)=\frac{J_{v+1}(\sigma {\left\| {{x-y}} \right\|})}{ {\left\| {{x-y}} \right\|}^{-n(v+1)} } k(x,y)=xyn(v+1)Jv+1(σxy)
ANOVA radial basis kernel回归问题 k ( x , y ) = ∑ k = 1 n exp ⁡ ( − σ ( x k − y k ) 2 ) d k(x,y)=\sum\limits_{k = 1}^n {\exp {{( - \sigma {{({x^k} - {y^k})}^2})}^d}} k(x,y)=k=1nexp(σ(xkyk)2)d
Linear splines kernel in one-dimensiontext categorization,回归问题,处理大型稀疏向量 k ( x , y ) = 1 + x y + x y min ⁡ ( x , y ) − x + y 2 min ⁡ ( x , y ) 2 + 1 3 min ⁡ ( x , y ) 3 k(x,y) = 1 + xy + xy\min (x,y) - \frac{{x + y}}{2}\min {(x,y)^2} + \frac{1}{3}\min {(x,y)^3} k(x,y)=1+xy+xymin(x,y)2x+ymin(x,y)2+31min(x,y)3

调参

在 sklearn 中可以用 grid search 找到合适的 kernel,以及它们的 gamma,C 等参数。
其中有两个重要的参数,即 C(惩罚系数) 和 γ \gamma γ γ \gamma γ越大,支持向量越少, γ \gamma γ越小,支持向量越多。 而支持向量的个数影响训练和预测的速度。 C 越高,容易过拟合。C 越小,容易欠拟合。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值