SVM之问题形式化

   SVM之对偶问题

>>>SVM之核函数

   SVM之解决线性不可分

   写在SVM之前——凸优化与对偶问题

上一篇SVM之对偶问题中讨论到,SVM最终形式化为以下优化问题\[\begin{align}\left\{ \begin{matrix}\underset{\alpha }{\mathop{\max }}\,\sum\limits_{i}{{{\alpha }_{i}}}-\frac{1}{2}\sum\limits_{i,j}{{{\alpha }_{i}}{{\alpha }_{j}}{{y}^{i}}{{y}^{j}}<{{x}^{i}},{{x}^{j}}>}  \\s.t.\left\{ \begin{matrix}{{\alpha }_{i}}\ge 0  \\\sum\limits_{i}{{{\alpha }_{i}}{{y}^{i}}}=0  \\\end{matrix} \right.  \\\end{matrix} \right.\end{align}\]

而且最终的判别式可以写成\[\begin{align}{{w}^{T}}x+b=\sum\limits_{i}{{{\alpha }_{i}}{{y}^{i}}<{{x}^{i}},x>}+b\end{align}\]

之前已对(1)的求解做了简单提及,需要注意的是,优化问题(1)虽然可以直接求解,但是要基于训练数据线性可分的基础,如果数据本身线性不可分呢?

解决方法之一就是将数据,或者更加正式的称为特征,向高维映射,以期待映射后数据在更高维的空间中数据可分,这样就可以在新的高维空间中继续使用之前的方法。

简单起见,考虑一维不可分的数据

显然,原始的一维数据是线性不可分的,现在取映射$\phi (x)=(x,{{x}^{2}})$ 将原始的一维数据映射到二维,数据变的线性可分了。这种向高维映射的方法一定程度上解决的线性不可分问题,但同时也带来了相当的计算复杂度。

SVM现在将在新的二维空间运行,原来问题中的$x$ 将用$\phi (x)$ 取代,优化问题中向量内积$<{{x}^{i}},{{x}^{j}}>$ 也将被$<\phi ({{x}^{i}}),\phi ({{x}^{j}})>$ 取代,判别函数中向量内积$<{{x}^{i}},x>$也将被$<\phi ({{x}^{i}}),\phi (x)>$取代,换句话说,我们需要将原来所有一维训练样本首先一个个计算,映射到新的二维空间,然后在二维空间中计算新样本之间的内积。这与原来直接在一维空间中直接计算一维向量内积相比,虽然并不会复杂多少,然而随着样本维度和映射后维度的增加,计算复杂的的提升是非常显著的,甚至变得不可计算。(这不是危言损听,比如高斯核将样本映射的无限维空间,那么怎么计算呢?)

已经说过,上面的过程是由两个步骤组成的。首先是映射,其次是计算映射后的内积。但其实我们真正需要的知道的只是映射后的内积,我们不需要$\phi (x)$ 、$\phi ({{x}^{i}})$ 、$\phi ({{x}^{j}})$ ,我们真正需要的是$<\phi ({{x}^{i}}),\phi ({{x}^{j}})>$和$<\phi ({{x}^{i}}),\phi (x)>$,这对优化问题(1)和判别函数(2)来说已经足够了。然而,怎么绕过映射本身而直接求解映射后向量内积呢?核函数就是用来做这样的事情。

核函数定义为 \[\begin{align}K(x,y)=<\phi (y),\phi (y)>\end{align}\]

以上核函数的定义应该来讲是“意义化”的,而不是“计算化”的,定义中出现$\phi (x)$ 、$\phi (y)$ 并不表明需要显式计算映射本身,而是来说明核函数的意义是映射后向量的内积,而核函数“计算化”的定义是需要我们自己设计给出的。

还是上面一维到二维的例子,考虑两个一维样本$x$和$y$ 映射到二维样本$\phi (x)=(x,{{x}^{2}})$ 和$\phi (y)=(y,{{y}^{2}})$,则\[\begin{align*}<\phi (x),\phi (y)> & ={{(x,{{x}^{2}})}^{T}}(y,{{y}^{2}}) \\& =xy+{{(xy)}^{2}} \\\end{align*}\]

那么,我们就可以定义对应的核函数为\[K(x,y)=xy+{{(xy)}^{2}}\],这和映射到二维后再计算内积的结果是一样的,但是现在直接计算$K(x,y)=xy+{{(xy)}^{2}}$使得我们不需要关心映射本身,而且计算是在原来的一维空间进行的。当样本维度增加时,这样方法带来的计算优势是不言而喻的。这就是核函数的主要作用,它隐藏映射本身而直接在低维空间计算高维空间向量的内积,显著降低计算复杂度。这简直就像加了特技,duang一下就完成了高维空间内积的计算,所以有些文献将核函数称为kernel trick,是trick,是特技!

那么,当我们需要将样本向高维空间映射以期望将数据变得线性可分时,怎样找到这种映射对应的核函数呢?上面一维到二维的示例过于简单,可以很方便的找到对应的核函数,当样本维度较高时,设计一个核函数并非易事。幸运的是,牛人们已经帮我们设计好了许多核函数,所以我们现在不需要根据映射去设计对应的精确的核函数,而是反过来选取设计好的核函数来尽可能满足我们的映射,保证映射后数据尽可能的线性可分。

常见的核函数有高斯核、多项式核、感知器核等。

高斯核:$K(x,y)=\exp (-\frac{{{\left\| x-y \right\|}^{2}}}{2{{\sigma }^{2}}})$

多项式核:$K(x,y)={{(<x,y>+c)}^{d}}$

感知器核:$K(x,y)=\tanh ({{\rho }_{1}}<x,y>+{{\rho }_{2}})$

这些核函数都对应不同的映射,拥有不同的性质。比如高斯核对应一个到无限维空间的映射,而且高斯核的意义比较明确:对原空间内相近的两个向量$x$、$y$计算 结果的数值较大,反之较小,参数$\sigma $ 控制这核函数值随${{\left\| x-y \right\|}^{2}}$变化的速度;多项式核对应一个到$C_{n+d}^{d}$ 维的映射。仅从这两个其他核函数的映射维度来看,核函数在降低计算复杂度上是很显著的,比如对多项式核,可以取$n$ (原样本维度)和$d$ 为不同值,看看映射后维度有多高。其他关于核函数本身的性质可以去查看专门的文献。作为一般应用,以上几个核函数可能在很多情况下已经够用了,而且高斯核应用最广。

已经选取好核函数之后,需要做到就是将原来的优化问题和判别函数中的向量内积用核函数替代,这样优化问题变为:\[\begin{align}\left\{ \begin{matrix}\underset{\alpha }{\mathop{\max }}\,\sum\limits_{i}{{{\alpha }_{i}}}-\frac{1}{2}\sum\limits_{i,j}{{{\alpha }_{i}}{{\alpha }_{j}}{{y}^{i}}{{y}^{j}}K(x{{,}^{i}}{{x}^{j}})}  \\s.t.\left\{ \begin{matrix}{{\alpha }_{i}}\ge 0  \\\sum\limits_{i}{{{\alpha }_{i}}{{y}^{i}}}=0  \\\end{matrix} \right.  \\\end{matrix} \right.\end{align}\]

判别函数变为:\[\begin{align}{{w}^{T}}x+b=\sum\limits_{i}{{{\alpha }_{i}}{{y}^{i}}K({{x}^{i}},x)}+b\end{align}\]

现在我们去求解优化问题(4)后用判别式(5)对新样本分类。

需要注意,核函数不是SVM的专利,只是在SVM中的一个应用,其他所有存在向量内积的场景,如果需要都可以引人核函数。

核函数隐藏着一个到高维的映射,可能使得数据在高维变得线性可分,但并不保证映射后一定是线性可分的。那怎样彻底处理线性不可分的问题呢?其实可以换个思路,我们并不要求数据一定得线性可分,不过如果有些样本错分了,我们给它一个惩罚代价,并将惩罚代价引人优化目标,这样的话,虽然分类器不能保证对训练数据线性可分,但它会根据我们给出的惩罚因子找到代价最小的分类器。这个问题将在下一篇文章SVM之解决线性不可分中介绍。

SVM之核函数的更多相关文章

  1. 6. 支持向量机(SVM)核函数

    1. 感知机原理(Perceptron) 2. 感知机(Perceptron)基本形式和对偶形式实现 3. 支持向量机(SVM)拉格朗日对偶性(KKT) 4. 支持向量机(SVM)原理 5. 支持向量 ...

  2. svm常用核函数介绍

    这里有一篇博文介绍了,每个核函数的用途: https://blog.csdn.net/batuwuhanpei/article/details/52354822 在吴恩达的课上,也曾经给出过一系列的选 ...

  3. svm常用核函数

    SVM核函数的选择对于其性能的表现有至关重要的作用,尤其是针对那些线性不可分的数据,因此核函数的选择在SVM算法中就显得至关重要.对于核技巧我们知道,其目的是希望通过将输入空间内线性不可分的数据映射到 ...

  4. [白话解析] 深入浅出支持向量机(SVM)之核函数

    [白话解析] 深入浅出支持向量机(SVM)之核函数 0x00 摘要 本文在少用数学公式的情况下,尽量仅依靠感性直觉的思考来讲解支持向量机中的核函数概念,并且给大家虚构了一个水浒传的例子来做进一步的通俗 ...

  5. 机器学习——支持向量机(SVM)之核函数(kernel)

    对于线性不可分的数据集,可以利用核函数(kernel)将数据转换成易于分类器理解的形式. 如下图,如果在x轴和y轴构成的坐标系中插入直线进行分类的话, 不能得到理想的结果,或许我们可以对圆中的数据进行 ...

  6. 机器学习:SVM(核函数、高斯核函数RBF)

    一.核函数(Kernel Function) 1)格式 K(x, y):表示样本 x 和 y,添加多项式特征得到新的样本 x'.y',K(x, y) 就是返回新的样本经过计算得到的值: 在 SVM 类 ...

  7. 支持向量机 (二): 软间隔 svm 与 核函数

    软间隔最大化(线性不可分类svm) 上一篇求解出来的间隔被称为 "硬间隔(hard margin)",其可以将所有样本点划分正确且都在间隔边界之外,即所有样本点都满足 \(y_{i ...

  8. SVM算法核函数的选择

    SVM支持向量机,一般用于二分类模型,支持线性可分和非线性划分.SVM中用到的核函数有线性核'linear'.多项式核函数pkf以及高斯核函数rbf. 当训练数据线性可分时,一般用线性核函数,直接实现 ...

  9. 详解SVM模型——核函数是怎么回事

    大家好,欢迎大家阅读周二机器学习专题,今天的这篇文章依然会讲SVM模型. 也许大家可能已经看腻了SVM模型了,觉得我是不是写不出新花样来,翻来覆去地炒冷饭.实际上也的确没什么新花样了,不出意外的话这是 ...

随机推荐

  1. memcache类的扩展函数

    Memcache — Memcache类 /****连接****/1.Memcache::connect – 创建一个Memcache对象语法:bool Memcache::connect ( str ...

  2. 理解Linux系统调用

    目录 1.什么是系统调用 2.linux的系统调用 3.linux系统调用实现 1.什么是系统调用 系统调用,指的是操作系统提供给用户程序调用的一组特殊接口,用户程序可以根据这组接口获得操作系统内核的 ...

  3. 记一次 Android 客户端(CJYYKT)的逆向

    主角: 描述: 湖南省教育局推的一款大学生 App,需要每个学生看完里面的一个课程的视频,共 8 章,每章 10 - 23 个视频(连续播放大约 24 小时),每个视频每隔不定时间就会弹出一个选择题答 ...

  4. LeetCode: 51. N-Queens(Medium)

    1. 原题链接 https://leetcode.com/problems/n-queens/description/ 2. 题目要求 游戏规则:当两个皇后位于同一条线上时(同一列.同一行.同一45度 ...

  5. springBoot -webSocket 基于STOMP协议交互

    浅谈WebSocket WebSocket是在HTML5基础上单个TCP连接上进行全双工通讯的协议,只要浏览器和服务器进行一次握手,就可以建立一条快速通道,两者就可以实现数据互传了.说白了,就是打破了 ...

  6. CC3200-LAUNCHXL仿真器驱动异常(未完成)

    1. 测试中发现,跳线帽J2和J3连接的情况下,驱动不正常如图2,不连接的情况下,驱动正常,VCC_LDO_3V3给仿真器FT2232供电,VCC_BRD这个电源很奇怪,用途不清晰,VBAT_CC是给 ...

  7. OSG-视口&LOD&Imposter

    本文转至http://www.cnblogs.com/shapherd/archive/2010/08/10/osg.html 作者写的比较好,再次收藏,希望更多的人可以看到这个文章 互联网是是一个相 ...

  8. Visual Studio Code 工具使用教程

    软件下载这里就不用讲了,安装完之后: 1.切换中文: 选择扩展 搜索“Language”,在下列选项选择 Chinese (Simplified) Language Pack for Visual S ...

  9. 利用爬虫、SMTP和树莓派3B发送邮件(爬取墨迹天气预报信息)

    -----------------------------------------学无止境----------------------------------------- 前言:大家好,欢迎来到誉雪 ...

  10. OIDC in Angular 6

    参照 草根专栏- ASP.NET Core + Ng6 实战:https://v.qq.com/x/page/i07702h18nz.html 1. OIDC-Client https://githu ...