zoukankan      html  css  js  c++  java
  • 2. SVM线性分类器

    在一个线性分类器中,可以看到SVM形成的思路,并接触很多SVM的核心概念。用一个二维空间里仅有两类样本的分类问题来举个小例子。如图所示

    无标题

    clip_image004clip_image006是要区分的两个类别,在二维平面中它们的样本如上图所示。中间的直线就是一个分类函数,它可以将两类样本完全分开。

    实际上,一个线性函数是一个实值函数,而我们的分类问题需要离散的输出值,例如用1表示某个样本属于类别clip_image004[1],而用0表示不属于(不属于clip_image004[2]也就意味着属于clip_image006[1]),这时候只需要简单的在实值函数的基础上附加一个阈值即可,通过分类函数执行时得到的值大于还是小于这个阈值来确定类别归属。 例如我们有一个线性函数:

    clip_image002[6]

    我们可以取阈值为0,此时也等价于给函数clip_image004[8]附加一个符号函数clip_image006[6],即clip_image008是最终真正的判别函数。

    实际上很容易看出来,中间那条分界线并不是唯一的,我们把它稍微旋转一下,只要不把两类数据分错,仍然可以达到上面说的效果,稍微平移一下,也可以。此时就牵涉到一个问题,对同一个问题存在多个分类函数的时候,哪一个函数更好呢?显然必须要先找一个指标来量化“好”的程度,通常使用的都是叫做“分类间隔”的指标。

    函数间隔(functional margin)和几何间隔(geometric margin

    给定一个训练样本clip_image002[4],x是特征,y是结果标签。i表示第i个样本。我们定义函数间隔如下:

    clip_image004[10]

    可想而知,当clip_image006[8]时,在我们的g(z)定义中,clip_image008[4]clip_image010的值实际上就是clip_image012。反之亦然。为了使函数间隔最大(更大的信心确定该例是正例还是反例),当clip_image002[8]时,clip_image004[12]应该是个大正数,反之是个大负数。因此函数间隔代表了我们认为特征是正例还是反例的确信度

    继续考虑w和b,如果同时加大w和b,比如在clip_image006[10]前面乘个系数比如2,那么所有点的函数间隔都会增大二倍,这个对求解问题来说不应该有影响,因为我们要求解的是clip_image008[6],同时扩大w和b对结果是无影响的。这样,我们为了限制w和b,可能需要加入归一化条件,毕竟求解的目标是确定唯一一个w和b,而不是多组线性相关的向量。

    刚刚我们定义的函数间隔是针对某一个样本的,现在我们定义全局样本上的函数间隔

    clip_image010[4]

    说白了就是在训练样本上分类正例和负例确信度最小那个函数间隔。

    接下来定义几何间隔,先看图

    clip_image002[4]

    假设我们有了B点所在的clip_image004[14]分割面。任何其他一点,比如A到该面的距离以clip_image002[16]表示,假设B就是A在分割面上的投影。我们知道向量BA的方向是clip_image008[8](分割面的梯度),单位向量是clip_image010[6]。A点是clip_image012[4],所以B点是clip_image002[10](几何向量),带入clip_image004[15]得:

    clip_image002[12]

    进一步得到

    clip_image004[18]

    clip_image006[14]实际上就是点到平面距离。

    上式更为准确的写法(考虑正例和反例):

    clip_image002[14]

    clip_image004[20]时,不就是函数间隔吗?是的,前面提到的函数间隔归一化结果就是几何间隔。他们为什么会一样呢?因为函数间隔是我们定义的,在定义的时候就有几何间隔的色彩。同样,同时扩大w和b,w扩大几倍,clip_image006[16]就扩大几倍,结果无影响。同样定义全局的几何间隔clip_image008[10]

    最优间隔分类器(optimal margin classifier

    回想前面我们提到我们的目标是寻找一个超平面,使得离超平面比较近的点能有更大的间距。也就是我们不考虑所有的点都必须远离超平面,我们关心求得的超平面能够让所有点中离它最近的点具有最大间距。形象的说,我们将上面的图看作是一张纸,我们要找一条折线,按照这条折线折叠后,离折线最近的点的间距比其他折线都要大。形式化表示为:

    clip_image002[18]

    这里用clip_image004[22]规约w,使得clip_image006[18]是几何间隔。

    到此,我们已经将模型定义出来了。如果求得了w和b,那么来一个特征x,我们就能够分类了,称为最优间隔分类器。接下的问题就是如何求解w和b的问题了。

    我们想先处理转化一下,考虑几何间隔和函数间隔的关系,clip_image002[20],我们改写一下上面的式子:

    clip_image004[24]

    这时候其实我们求的最大值仍然是几何间隔,只不过此时的w不受clip_image006[20]的约束了。

    然而这个时候目标函数仍然不是凸函数,没法直接代入优化软件里计算。我们还要改写。(前面说到同时扩大w和b对结果没有影响,但我们最后要求的仍然是w和b的确定值,不是他们的一组倍数值,因此,我们需要对clip_image007做一些限制,以保证我们解是唯一的。)这里为了简便我们取clip_image009。这样的意义是将全局的函数间隔定义为1,也即是将离超平面最近的点的距离定义为clip_image011。由于求clip_image011[1]的最大值相当于求clip_image013的最小值(之所以采用这种形式,是因为后面的求解过程会对目标函数作一系列变换,2次方形式会使变换后的形式更为简洁),因此改写后结果为:

    clip_image002[22]

    这下好了,只有线性约束了,而且是个典型的二次规划问题(目标函数是自变量的二次函数)。代入优化软件可解。

    到这里发现,这个讲义虽然没有像其他讲义一样先画好图,画好分类超平面,在图上标示出间隔那么直观,但每一步推导有理有据,依靠思路的流畅性来推导出目标函数和约束。

    接下来介绍的是手工求解的方法了,一种更优的求解方法。

  • 相关阅读:
    linux常用命令
    linux下redis配置
    Git使用命令
    linux学习笔记
    NOPI读取Excel2003、Excel2007或更高级的兼容性问题
    netcore开发常用命令
    netcore3.0 dotnet ef执行报错
    vscode配置nuget常见问题
    PDMReader结合PowerDesigner导出word格式数据字典
    微信网页授权开发遇到问题
  • 原文地址:https://www.cnblogs.com/houkai/p/3391316.html
Copyright © 2011-2022 走看看