支持向量机(Support Vector Machine)原理总结(一)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_40449129/article/details/102678600

        支持向量机(support vector machine)是一个非常强大并且有多种功能的机器学习模型,能够处理线性或非线性分类问题、回归问题,同时还可以做异常值的检测。SVM特别适合应用于复杂但中小规模数据集的分类问题。
        支持向量机按照是否线性可分,可分为线性支持向量机,非线性支持向量机。本篇我们将对线性支持向量机原理进行总结。

1)线性分类器到线性支持向量机
        对于线性可分的数据集 D = { ( x i , y i ) } i = 1 n D=\left\{ (x^i,y^i) \right\}^n_{i=1} x i R d x^i\in R^d y i { 1 , 1 } y^i\in\left\{ -1,1\right\} ,对于任意一个 x i x^i ,满足
  { w T x i + b 0 y i ^ = 1 w T x i + b < 0 y i ^ = 1 \qquad \ \qquad \qquad \qquad \qquad \begin{cases} w^Tx^i+b≥0 时\qquad\hat{y^i}=1 \\ w^Tx^i+b<0 时\qquad\hat{y^i}=-1 \\ \end{cases}
        我们可以看出,其决策边界为 w T x + b = 0 w^Tx+b=0 ,对于这样的线性可分的数据,我们总可以找到无数条线将其分开,但是哪一条决策边界既能将所有的数据准确的分开,同时在新的数据上也能表现不错呢?
        下图是鸢尾花的部分数据,这两个种类能够被非常清晰,非常容易的用一条直线分开(即线性可分)。左图显示了三种可能的线性分类器的判定边界,其中虚线表示的线性模型判定边界很差,甚至不能正确的划分类别,另外两个线性模型在这个数据集表现很好,但是它们的判定边界离样本点很近,在新的数据上可能不会表现很好。相反,右边的SVM判定边界实线既能够很开两个类,而且还能够尽可能的远离了最近的样本点。你可以认为SVM分类器让两个类之间保持尽可能宽的”街道“(图中的两个平行的虚线),尽可能宽的”街道“就叫做最大间隔距离。
在这里插入图片描述
        当我们增加远离虚线外的样本,这并不会影响决策边界,因为决策边界是由“街道”(平行的虚线)边缘的样本决定的,这些决定决策边界的样本称为支持向量(support vector),如上图中的虚线上的两个被圆圈圈出来的点。

2)硬间隔分类的目标函数
        对于线性可分数据集 D = { ( x i , y i ) } i = 1 n D=\left\{ (x_i,y_i) \right\}^n_{i=1} x i R d x_i\in R^d y i { 1 , 1 } y_i\in\left\{ -1,1\right\} ,决策边界为 w T X + b = 0 w^TX+b=0 ,支持向量为
    { w T x i + b = 1 w T x i + b = 1 \ \qquad \ \qquad \qquad \qquad \qquad\begin{cases} w^Tx^i+b=1 \\ w^Tx^i+b=-1\\ \end{cases}
在这里插入图片描述
        下面我们来推导SVM的目标函数。我们先在决策边界上取两个点 x 1 , x 2 x^1,x^2 x 1 , x 2 x^1,x^2 满足:
  w T x 1 + b = 0 \qquad \ \qquad \qquad \qquad \qquad w^Tx^1+b=0
  w T x 2 + b = 0 \qquad \ \qquad \qquad \qquad \qquad w^Tx^2+b=0
将两式相减,得: w T ( x 1 x 2 ) = 0 w^T(x^1-x^2)=0 ,因此 w T w^T 垂直 x 1 x 2 x^1-x^2
        同样我们对决策边界做垂线,垂线相交于支持向量的点为 x + , x x^+,x^- x + x x^+-x^- 垂直决策边界。转成数学语言为: w     x + x w\ ||\ x^+-x^- ,因此支持向量间隔距离可以表示为: x + x = λ w x^+-x^- = \lambda w
        已知, w T x + + b = 1 w^Tx^++b=1 ,将 x + = λ w + x x^+= \lambda w+-x^- 带入得,
w T ( λ w + x ) + b = 1 w^T(\lambda w+-x^-)+b=1
w T λ w + w T x + b = 1 w^T\lambda w+w^Tx^-+b=1 ,其中 w T x + b = 1 w^Tx^-+b=-1
w T λ w 1 = 1 w^T\lambda w-1=1
w T λ w = 2 w^T\lambda w=2
λ = 2 w T w \lambda =\frac{2}{ w^Tw}
        将 λ = 2 w T w \lambda =\frac{2}{ w^Tw} 带入间隔距离公式 x + x = λ w x^+-x^- = \lambda w ,得: x + x = 2 w 1 x^+-x^- = \frac{2}{ ||w||_1}
        因此对于线性可分支持向量的目标函数为:
  m a x i m i z e 2 w 1 \qquad \ \qquad \qquad \qquad \qquad maximize\frac{2}{ ||w||_1}
  s . t . \qquad \ \qquad \qquad \qquad \qquad s.t. { w T x i + b 1    i f   y ^ = 1 w T x i + b < 1    i f   y ^ = 1 \begin{cases} w^Tx^i+b\geq 1\ \ if\ \hat{y}=1 \\ w^Tx^i+b< -1\ \ if\ \hat{y}=-1\\ \end{cases}
        将约束条件合并,目标函数为:
  m a x i m i z e 2 w 1 \qquad \ \qquad \qquad \qquad \qquad maximize\frac{2}{ ||w||_1}
  s . t . \qquad \ \qquad \qquad \qquad \qquad s.t. ( w T x i + b ) y i 1 (w^Tx^i+b)y^i\geq 1
        由于我们习惯求取最小值,且一范式在0处不可导,因此对目标函数取导数转化成求取最小值问题,并取 w w 的二范式,目标函数变为:
  m i n i m i z e w 2 2 2 \qquad \ \qquad \qquad \qquad \qquad minimize\frac{||w||^2_2}{ 2}
  s . t . \qquad \ \qquad \qquad \qquad \qquad s.t. ( w T x i + b ) y i 1 (w^Tx^i+b)y^i\geq 1

2)软间隔分类的目标函数
        硬间隔分类有两个问题:首先,数据必须线性可分,其次,对异常值非常敏感。下图展示了带有一个异常值的鸢尾花数据(左图),是不可能找到一个硬间隔分类,右边的图中存在异常值,使的间隔距离比上图中的间隔距离窄了很多,判定边界和没有异常点的判定边界也非常不一样,这样的判定边界很难一般化。
在这里插入图片描述
        为了避免这些问题,我们更加愿意使用更加软性的模型。假如我们能够在尽可能宽的间隔距离和间隔违规(比如样本在分割间隔中间,甚至有样本被分类错误)找到一个很好的平衡,那我们既可以保证了间隔最大,也保证了模型的一般化,这就叫做软间隔分类,又叫线性支持向量机。
        为了获得软间隔(线性支持向量机)的目标函数,我们需要对每一个样本应用一个松弛变量 ε ( i ) ( ε ( i ) 0 ) \varepsilon (i) (\varepsilon (i) ≥0) ,使得函数间隔加上松弛变量大于等于1, ε ( i ) \varepsilon (i) 表示第 i i 个样本允许违规间隔约束的程度。我们现在有两个不一致的目标:一个是使松弛变量尽可能的小,从而减小间隔违规,另一个是使 w 2 2 2 \frac{||w||^2_2}{ 2} 尽量小,从而增大间隔。这时可以增加一个超参数 λ \lambda ,让它在两个目标之间找到权衡。
        因此,软间隔分类的目标函数为:
                                                        m i n i m i z e w 2 2 2 + λ i = 1 n ε i minimize\frac{||w||^2_2}{ 2}+\lambda\sum_{i=1}^{n}\varepsilon _i
                                                        s . t . s.t. ( w T x i + b ) y i 1 ε i (w^Tx^i+b)y^i\geq 1-\varepsilon _i ( i = 1 , 2 , . . . n ) (i=1,2,...n)
                                                                ε i 0   ( i = 1 , 2 , . . . n ) \varepsilon _i\geq0 \ (i=1,2,...n)

3)软间隔分类的损失函数
        软间隔分类的目标函数为:
                                                        m i n i m i z e w 2 2 2 + λ i = 1 n ε i minimize\frac{||w||^2_2}{ 2}+\lambda\sum_{i=1}^{n}\varepsilon _i
                                                        s . t . s.t. ( w T x i + b ) y i 1 ε i (w^Tx^i+b)y^i\geq 1-\varepsilon _i ( i = 1 , 2 , . . . n ) (i=1,2,...n)
                                                        ε i 0   ( i = 1 , 2 , . . . n ) \varepsilon _i\geq0 \ (i=1,2,...n)
        对约束条件 ( w T x i + b ) y i 1 ε i (w^Tx^i+b)y^i\geq 1-\varepsilon _i 进行变形, ε i 1 ( w T x i + b ) y i \varepsilon _i\geq 1-(w^Tx^i+b)y^i 。当我们求取目标函数的最小值时,可以进行一下等价替换。
{ ε i 1 ( w T x i + b ) y i ε i 0 m a x ( 0 , 1 ( w T x i + b ) y i ) \begin{cases} \varepsilon _i \geq 1-(w^Tx^i+b)y^i\\ \varepsilon _i\geq0 \\ \end{cases} \Leftrightarrow max(0,1-(w^Tx^i+b)y^i)
        因此,我们的目标函数变为:
                                                        m i n i m i z e w 2 2 2 + λ i = 1 n m a x ( 0 , 1 ( w T x i + b ) y i ) minimize\frac{||w||^2_2}{ 2}+\lambda\sum_{i=1}^{n}max(0,1-(w^Tx^i+b)y^i)
       本质上 ε \varepsilon 是损失项, w 2 2 2 \frac{||w||^2_2}{ 2} L 2 L2 正则。当 ε i 0 \varepsilon _i≤0 时,没有损失产生;当 ε i > 0 \varepsilon _i>0 时,产生损失, ε i = 1 ( w T x i + b ) y i ) \varepsilon _i=1-(w^Tx^i+b)y^i)
       以上函数即为软间隔分类的损失函数:Hinge损失,函数图像如下。
Hinge Loss

4)随机梯度下降算法优化Hinge损失函数
       由上节可知线性支持向量机的损失函数为:
                                              m i n i m i z e w 2 2 2 + λ i = 1 n m a x ( 0 , 1 ( w T x i + b ) y i ) minimize\frac{||w||^2_2}{ 2}+\lambda\sum_{i=1}^{n}max(0,1-(w^Tx^i+b)y^i)
1 ( w T x i + b ) y i 0 1-(w^Tx^i+b)y^i≤0 时,损失函数为 m i n i m i z e w 2 2 2 minimize\frac{||w||^2_2}{ 2}
1 ( w T x i + b ) y i > 0 1-(w^Tx^i+b)y^i>0 ,损失函数为 m i n i m i z e w 2 2 2 + λ i = 1 n 1 ( w T x i + b ) y i minimize\frac{||w||^2_2}{ 2}+\lambda\sum_{i=1}^{n}1-(w^Tx^i+b)y^i
       下面利用SGD对目标函数进行优化,伪代码如下:
初始化 w 0 , b 0 w^0,b^0
f o r   i t e r = 1 , 2 , . . . . i t e r s : for \ iter=1,2,....iters:
        s h u f f l e ( { x 1 , y 1 } i = 1 n ) shuffle(\left \{ x^1,y^1 \right \}_{i=1}^n)
        f o r   i = 1 , 2... n : for \ i=1,2...n:
                i f   1 ( w T x i + b ) y i 0 : if \ 1-(w^Tx^i+b)y^i≤0:
                        w = w η 2 w w^*=w-\eta 2w
                e l s e : else:
                        w = w η w L ( w , b ) w^*=w-\eta \bigtriangledown_w L(w,b)
                        b = b η b L ( w , b ) b^*=b-\eta \bigtriangledown_b L(w,b)

5)线性支持向量机小结
线性支持向量机优点:

  • 分类速度快
  • 当数据集维度很大时,表现不错

线性支持向量机缺点:

  • 数据必须线性可分

我们下篇就来讨论线性不可分支持向量机和核函数的原理。

(欢迎转载,转载请注明出处。)

猜你喜欢

转载自blog.csdn.net/weixin_40449129/article/details/102678600
今日推荐