• 从感知器到SVM


    这篇文章主要是分析感知器和SVM处理分类问题的原理,不涉及求解

    感知器:

    感知器要解决的是这样的一个二分类问题:给定了一个线性可分的数据集,我们需要找到一个超平面,将该数据集分开。这个超平面的描述如下:                                  

                           $w*x+b=0$      

    而感知器的决策函数是: 

                           $f(x)=sign(w*x+b)$

    其中     $z=w*x+b$ 是数据集的一个线性回归。

    而 $sign$则是一个简单的符号函数。

    所以,我们可以这样理解。感知器是在线性回归的基础上,加了一个阈值,将:

    $w * x_i + bgeq 0$ 的y值离散化为+1、$w * x_i + bleq 0$ 的y值离散化为-1的一个分类器。

    理论上,可以使用最小化均方误差的办法来求得所有的权值 W。但是,感知器给出了一个更加简练的办法。

    对于一个已知的平面 $w*x+b=0 $,一个点 $(x_i,y_i)$到该平面的距离是:

    $d=frac{|w * x_i + b|}{||w||}$,当该点被正确分类以后,

    $y_i=1$时,$w * x_i + b>0$ ,该点到超平面的距离是 $frac{w * x_i + b}{||w||}$

    $y_i=-1$时,$w * x_i + b<0$ ,该点到超平面的距离是 $- frac{w * x_i + b}{||w||}$

    这可以表示为: $frac{y_i * (w * x_i + b)}{||w||}$

    若被误分,则误分点到超平面的距离是  $-frac{y_i * (w * x_i + b)}{||w||}$

    将所有的误分点都相加起来,不考虑$frac{1}{||W||}$,就得到了感知器的损失函数:

     

    $L(w,b)=-$ $sum_{i=1}^{n}$$y_i * (w * x_i + b)$

    对于一个线性可分的数据集,我们当然是希望误分点越少越好,误分点越少,则损失函数越小。于是,感知器的训练就变成了一个无约束条件的最优化问题:

         $min L(w,b) $

    从无约束到有约束,从感知器到SVM:

    前面我们得到了感知器的分离超平面: $w*x+b=0 $,这是在无约束的条件下得到的结果。无约束带来的一个很显见的特点是,这样的解有无穷多个。像感知器这样的分类器,我们不能保证每一个分离超平面都能够以最大的确信度将可分数据集分离开来。所以,在感知器的基础上,我们希望做到:有最大的确信程度,确定数据的分类。

    一般情况下,分类点和超平面的距离衡量了分类的确信程度,分类点和分离超平面越远,说明分类越靠谱。而$|w*x+b|$衡量了点到超平面$w*x+b=0$的距离。而$y_i $和 $w*x_i+b$符号是否一致可以描述分类的正确性。因此,使用$y_i*(w*x_i+b)$可以描述分类的正确与否和确信度。

    函数间隔:

    (1)    样本点函数间隔:

    定义:样本点$(x_i,y_i) $和分离超平面$w*x+b=0 $的函数间隔为:

            $T_i$$'$ $=y_i * (w * x_i + b)$ $ $ $i=1,2,3......n$

     

    (2)    训练集的函数间隔:

    定义:训练集的函数间隔是所有样本点的函数间隔的最小值:

              $T_i$$'$ $=min($$T_i$$'$$) $   $i=1,2,3......n$

    但是,函数间隔有一个问题是:当 w 和 b 等比例地扩大的时候,y’实际上也在等比例地扩大,但是分离超平面却没有变化。这样,不利于确定最优分离超平面,说明函数间隔舍弃了重要的信息。而从感知器的推导过程来看,唯一被舍弃的信息只有||w||。我们也可以这样理解,w、b之所以能等比例地扩大,这是因为我们没有对w加以约束,因此,需要在函数间隔的基础上加一约束。这样,函数间隔就变成了:

              $T=frac{y * (w * x + b)}{||w||}=frac{T'}{||w||}$

    由于T描述的是样本点$(x_i,y_i) $和分离超平面$w*x+b=0 $的几何距离,因此,得到下面的定义:

    (3)    样本点几何间隔:

    定义:样本点$(x_i,y_i) $和分离超平面$w*x+b=0 $的几何间隔为:

              $T_i=frac{y_i * (w * x + b)}{||w||}$ $ $ $i=1,2,3......n$

     

    (4)    训练集的几何间隔:

    定义:训练集的函数间隔是所有样本点的函数间隔的最小值:

              $T = min(T_i) $ $ $ $i=1,2,3......n$

    根据SVM需要最大的确信度的思想,可以得到SVM的目标函数如下:

              $ max T$

              $frac{y_i * (w * x_i + b)}{||w||}geq T$ $ $ $i=1,2,3.....n$

    由于 $T=frac{T'}{||W||}$

    因此,可以将这个关系代入上面的目标函数 :

    得到    $max frac{T'}{||w||}$

              $y_i$$* (w * x_i + b)geq T'$ $ $   $i=1,2,3......n$

    因为 T’表示的是函数间隔,从前面的分析,我们可以知道,w、b等比例的变化的时候,T’也会等比例地变化。因此,我们可以让T’变化为 1 ,这样是可以解得相应的 w 和 b 。

    于是,得到:  max $frac{1}{||w||}$

              $y_i$$* (w * x_i + b)geq 1$ $ $   $i=1,2,3......n$

     

    由于 max $frac{1}{||w||}$ 等价于 min $ frac{1}{2}||w||^2$

     

    所以,问题可以变成:

             

              $ min frac{1}{2}||w||^2$

              $1-y_i * (w * x_i + b) leq0$ $ $   $i=1,2,3......n$

    上面讨论的都是基于数据集线性可分的前提条件,因此,将其称为线性可分支持向量机

    但是,在实际的生活中,我们能够收集到的数据集常常不是线性可分的。这时候,需要在原来线性可分支持向量机的基础上,往深处延伸一下。于是,就有了下一步

    从线性可分数据集到近似线性数据集,从线性可分支持向量机到线性支持向量机:

    有些训练集不能线性可分,是因为存在一些特异点,将这些特异点去掉以后,剩下的大部分样本组成的集合依然是线性可分的。

    在这种情况下,意味着某些样本点$(x_i,y_i) $不能满足函数间隔大于1的约束条件。为了解决这个问题,可以对每个样本点引入一个松弛变量,使得函数间隔加上这个松弛变量后,满足约束条件。因此,约束条件变成了:

             $y_i * (w * x_i + b)+ zeta_i geq 1$ $ $   $i=1,2,3......n$

     

    于是可以写成:$y_i * (w * x_i + b) geq 1 - zeta_i $ $ $   $i=1,2,3......n$

     

    这种情况下,对每一个松弛变量$zeta_i$,支付一个代价$zeta_i$。则目标函数由原来的$frac{1}{2}||w||^2$  变成:$frac{1}{2}||w||^2$ $+C$$sum_{i=1}^{n}$ $zeta_i$

     

    所以,具有特异点的线性可分支持向量机实际上可以归纳为下面有约束最优化的问题:

             $min frac{1}{2}||w||^2 + Csum_{i=1}^{n}zeta_i$

             $y_i * (w * x_i + b) geq 1 - zeta_i $ $ $   $i=1,2,3......n$

         $zeta_i geq 0, i=1,2,3......n$

    从近似线性数据集线性不可分数据集,从线性支持向量机到非线性支持向量机:

    除去了线性可分数据集和近似线性可分数据集,剩下的就是非线性数据集了。如果非线性可分数据集能够用一个超曲面将数据集分开,那么,称这类问题为非线性可分问题。

    当遇到非线性可分问题时,我们希望通过一个变换,让数据集经过映射后,成为线性可分数据集。这样,我们就能继续沿用前面提到的办法。

    记 $z=phi (x) $是从非线性到线性的映射,那么,只需要将x替换成映射后的函数,就可以继续沿用线性支持向量机的办法,于是,得到目标函数如下:

              $min frac{1}{2}||w||^2 + Csum_{i=1}^{n}zeta_i$

              $y_i*(w * phi (x_i) + b) geq 1 - zeta_i $ $ $   $i=1,2,3......n$

        $zeta_i geq 0, i=1,2,3......n$

     

    非线性支持向量机的特殊例子:One Class SVM

    前面我们谈到,如果一个非线性数据集,可以用一个超曲面将其和其他数据分开,那么这个数据集是非线性可分的。但是,现实生活中有这样的一个应用场景,我们现在只知道正样本,但是其他的样本们无法判断是正样本还是负样本,

    举个例子,比如现在有一堆某产品的历史销售数据,记录着买该产品的用户的各种信息(这些信息在特征提取时会用到),然后还有些没买过该产品的用户的数据,想通过2类classification预测他们是否会买该产品,也就是弄2个类,一类是“买”,另一类是“不买”。这时候问题就来了,如果把买了该产品的用户看成正例,没买该产品的用户看成负例,就会出现(1)已经买了的用户,可以明确知道他已经买了,而没买的用户,却不知道他是的确对该产品不感兴趣,还是说想买但由于种种原因暂时没买成。(2)一般来说,没买的用户数会远远大于已经买了的用户数,这会造成training set中正负样本不均衡,使train出来的model有bias。

    另外一个例子是,现在有一堆用户行为的记录,记录着该用户对推送给他的文章的应答行为。如果将点击推送文章的用户标记为正样本,而对于没有点击的用户,我们没有办法确定他是不是对该文章是否感兴趣。

    还有一个例子是广告方面的例子,记录着用户对广告的点击。我们同样也会得到类似的结果。

    那么,对于这种类型的问题,我们应该如何处理呢?如果我们只是考虑用户是否会买商品/点击文章/点击广告,认为不点击的用户不是负样例的话,这一类问题可以理解为只有正样例的学习问题。

    这时候,问题就变成了只有正样本的训练问题。因此,可以使用One Class SVM来进行求解。

    那One Class SVM的原理是什么呢?由于现在只有一个Class,因此,训练出一个最小的超球面(3维以上),将这些数据都包含起来。遇到一个新的数据点时,如果这个数据点落在超球面上,就是这个类,否则不是。这个算法被称为SVDD(support vector domain description)

    由于SVDD的目标是找到一个超球面,只需要一个中心和一个半径,就能确定一个超球面。因此,目标函数如下:

    $min F(R,a,zeta_i)=R^2+Csum_{i}zeta_i$

    $s.t (x_i-a)^T(x_i-a)leq R^2+zeta_i$ $ $ $forall i,zeta_igeq 0$

    上面讨论到的函数求解将会在后续的文章中讨论,敬请期待。

    参考文献:

    1、《统计学习方法》 李航

    2、维基百科

    转载请注明源地址:http://www.cnblogs.com/weibao/p/5547587.html

    有任何问题请联系:weibao798@gmail.com

  • 相关阅读:
    滑动窗口(单调队列)
    离散化
    leetcode第196场周赛
    WindowsForm实现警告消息框
    WindowsForm实现TextBox占位符Placeholder提示
    WindowsForm如何移动一个没有标题栏的窗口
    WindowsForm给窗口添加一些简单的动画效果
    WindowsForm切换窗口的几种常见实现
    Visual Studio Code搭建django项目
    PyInstaller打包Python源程序
  • 原文地址:https://www.cnblogs.com/weibao/p/5547587.html
Copyright © 2020-2023  润新知