目标

在这一章中

  • 我们将对SVM有一个直观的了解

理论

线性可分数据

考虑下面的图像,它具有两种数据类型,红色和蓝色。在kNN中,对于测试数据,我们用来测量其与所有训练样本的距离,并以最小的距离作为样本。测量所有距离都需要花费大量时间,并且需要大量内存来存储所有训练样本。但是考虑到图像中给出的数据,我们是否需要那么多?

考虑另一个想法。我们找到一条线\(f(x)=ax_1 + bx_2+c\),它将两条数据都分为两个区域。当我们得到一个新的test_data \(X\)时,只需将其替换为\(f(x)\)即可。如果\(f(X)> 0\),则属于蓝色组,否则属于红色组。我们可以将此行称为“决策边界”。它非常简单且内存高效。可以将这些数据用直线(或高维超平面)一分为二的数据称为线性可分离数据。

因此,在上图中,你可以看到很多这样的行都是可能的。我们会选哪一个?非常直观地,我们可以说直线应该从所有点尽可能远地经过。为什么?因为传入的数据中可能会有噪音。此数据不应影响分类准确性。因此,走最远的分离线将提供更大的抗干扰能力。因此,SVM要做的是找到到训练样本的最小距离最大的直线(或超平面)。请参阅下面图像中穿过中心的粗线。

因此,要找到此决策边界,你需要训练数据。那么需要全部吗?并不用。仅接近相反组的那些就足够了。在我们的图像中,它们是一个蓝色填充的圆圈和两个红色填充的正方形。我们可以称其为支撑向量,通过它们的线称为支撑平面。它们足以找到我们的决策边界。我们不必担心所有数据。它有助于减少数据量。

接下来,找到了最能代表数据的前两个超平面。例如,蓝色数据由\(w^Tx+b_0>-1\)表示,红色数据由\(wTx+b_0<-1\)表示,其中\(w\)是权重向量(\(w=[w_1,w_2,...,w_n]\)),\(x\)是特征向量(\(x =[x_1,x_2,...,x_n]\))。\(b_0\)是偏置。权重矢量确定决策边界的方向,而偏置点确定其位置。现在,将决策边界定义为这些超平面之间的中间,因此表示为\(w^Tx + b_0 = 0\)。从支持向量到决策边界的最小距离由\(distance_{support vectors}=\frac{1}{\|w\|}\)给出。间隔是此距离的两倍,因此我们需要最大化此间隔。也就是说,我们需要使用一些约束来最小化新函数\(L(w,b_0)\),这些约束可以表示如下:

\[\min_{w, b_0} L(w, b_0) = \frac{1}{2}||w||^2 \; \text{subject to} \; t_i(w^Tx+b_0) \geq 1 \; \forall i
\]

其中\(t_i\)是每类的标签,\(t_i\in[-1,1]\).

非线性可分数据

考虑一些不能用直线分成两部分的数据。例如,考虑一维数据,其中'X'位于-3和+3,而'O'位于-1和+1。显然,它不是线性可分离的。但是有解决这些问题的方法。如果我们可以使用函数\(f(x)=x^2\)映射此数据集,则在线性可分离的9处获得'X',在1处获得'O'。

否则,我们可以将此一维数据转换为二维数据。我们可以使用\(f(x)=(x,x^2)\)函数来映射此数据。然后,'X'变成(-3,9)和(3,9),而'O'变成(-1,1)和(1,1)。这也是线性可分的。简而言之,低维空间中的非线性可分离数据更有可能在高维空间中变为线性可分离。

通常,可以将d维空间中的点映射到某个D维空间\((D> d)\),以检查线性可分离性的可能性。有一个想法可以通过在低维输入(特征)空间中执行计算来帮助在高维(内核)空间中计算点积。我们可以用下面的例子来说明。

考虑二维空间中的两个点,\(p=(p_1,p_2)\)和\(q=(q_1,q_2)\)。令\(ϕ\)为映射函数,它将二维点映射到三维空间,如下所示:

\[ϕ(p)=(p^2_1,p^2_2,\sqrt{2}p_1p_2)ϕ(q)=(q^2_1,q^2_2,\sqrt{2}q_1q_2)$$让我们定义一个核函数$K(p,q)$,该函数在两点之间做一个点积,如下所示:

\]

\begin{aligned} K(p,q) = \phi(p).\phi(q) &= \phi(p)^T \phi(q) \ &= (p_{1}2,p_{2}2,\sqrt{2} p_1 p_2).(q_{1}2,q_{2}2,\sqrt{2} q_1 q_2) \ &= p_1 q_1 + p_2 q_2 + 2 p_1 q_1 p_2 q_2 \ &= (p_1 q_1 + p_2 q_2)^2 \ \phi(p).\phi(q) &= (p.q)^2 \end{aligned}

\[
这意味着,可以使用二维空间中的平方点积来实现三维空间中的点积。这可以应用于更高维度的空间。因此,我们可以从较低尺寸本身计算较高尺寸的特征。一旦将它们映射,我们将获得更高的空间。

除了所有这些概念之外,还存在分类错误的问题。因此,仅找到具有最大间隔的决策边界是不够的。我们还需要考虑分类错误的问题。有时,可能会找到间隔较少但分类错误减少的决策边界。无论如何,我们需要修改我们的模型,以便它可以找到具有最大间隔但分类错误较少的决策边界。最小化标准修改为:$\min \|w\|^2+C$(分类错误的样本到其正确区域的距离)下图显示了此概念。对于训练数据的每个样本,定义一个新的参数$ξ_i$。它是从其相应的训练样本到其正确决策区域的距离。对于那些未分类错误的样本,它们落在相应的支撑平面上,因此它们的距离为零。

![](http://qiniu.aihubs.net/svm_basics3.png)

因此,新的优化函数为:
$$\min_{w, b_{0}} L(w,b_0) = ||w||^{2} + C \sum_{i} {\xi_{i}} \text{ subject to } y_{i}(w^{T} x_{i} + b_{0}) \geq 1 - \xi_{i} \text{ and } \xi_{i} \geq 0 \text{ } \forall i\]

如何选择参数C?显然,这个问题的答案取决于训练数据的分布方式。尽管没有一般性的答案,但考虑以下规则是很有用的:

  • C的值越大,解决方案的分类错误越少,但宽度也越小。考虑到在这种情况下,进行错误分类错误是昂贵的。由于优化的目的是最小化参数,因此几乎没有误分类的错误。
  • C的值越小,解决方案的宽度就越大,分类误差也越大。在这种情况下,最小化对总和项的考虑不多,因此它更多地集中在寻找具有大间隔的超平面上。

附加资源

  1. NPTEL notes on Statistical Pattern Recognition, Chapters 25-29.

练习

OpenCV-Python 理解SVM | 五十五的更多相关文章

  1. 孤荷凌寒自学python第五十五天初识MongoDb数据库

    孤荷凌寒自学python第五十五天第一天初识MongoDb数据库 (完整学习过程屏幕记录视频地址在文末) 大家好,2019年新年快乐! 本来我想的是借新年第一天开始,正式尝试学习爬虫,结果今天偶然发现 ...

  2. 第三百五十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy信号详解

    第三百五十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy信号详解 信号一般使用信号分发器dispatcher.connect(),来设置信号,和信号触发函数,当捕获到信号时执行 ...

  3. python自动华 (十五)

    Python自动化 [第十五篇]:CSS.JavaScript 和 Dom介绍 本节内容 CSS javascript dom CSS position标签 fixed: 固定在页面的某个位置 rel ...

  4. OpenCV开发笔记(六十五):红胖子8分钟带你深入了解ORB特征点(图文并茂+浅显易懂+程序源码)

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  5. 第三百五十五天 how can I 坚持

    快一年了,三百五十五天了,等写个程序算算时间,看看日期和天数能不能对的上,哈哈. 计划还是未制定,天气预报还是没有写完,立马行动,发完这个博客,立马行动. 计划:设计模式1个月,三大框架3个月,计算机 ...

  6. “全栈2019”Java第五十五章:方法的静态绑定与动态绑定

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  7. OpenCV开发笔记(五十五):红胖子8分钟带你深入了解Haar、LBP特征以及级联分类器识别过程(图文并茂+浅显易懂+程序源码)

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  8. abp(net core)+easyui+efcore实现仓储管理系统——出库管理之六(五十五)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统--ABP总体介绍(一) abp(net core)+ ...

  9. Py修行路 python基础 (二十五)线程与进程

    操作系统是用户和硬件沟通的桥梁 操作系统,位于底层硬件与应用软件之间的一层 工作方式:向下管理硬件,向上提供接口 操作系统进行切换操作: 把CPU的使用权切换给不同的进程. 1.出现IO操作 2.固定 ...

随机推荐

  1. 逆向破解之160个CrackMe —— 001(上)

    CrackMe--001 前置知识介绍: 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合,一共160个待逆向破解的程序 CrackMe:一些公开给别人尝试破解的小程序,制 ...

  2. Ubuntu 18.04安装搜狗输入法

    Ubuntu 18.04安装搜狗输入法 打开 terminal,输入 fcitx,检查是否安装搜狗输入法依赖,若提示未安装使用以下命令安装 sudo apt-get install fcitx-bin ...

  3. vue+element tree(树形控件)组件(1)

    最近做了第一个组内可以使用的组件,虽然是最简版,也废了不少力.各位前辈帮我解决问题,才勉强搞定.让我来记录这个树形组件的编写过程和期间用到的知识点. 首先说说需求,就是点击出现弹窗+蒙板,弹窗内容是一 ...

  4. python从一个目录中复制全部文件图片至另一个目录中,及删除指定目录中的图片

    import shutil import os #目录自己改一下即可,复制 path = "./static/imgs/" new_path = "./static/up ...

  5. SpringBoot1.5.10.RELEASE整合druid时,在druid monitor界面出现(*) property for user to setup

    接上篇随笔,配置druid之后出现的错误,解决方法如下: @Bean(destroyMethod = "close",initMethod = "init") ...

  6. webpack进阶(三)

    1)CommonsChunkPlugin已经从webpack4移除,所以在用webpack进行公共模块的拆分时,会报错 Cannot read property 'CommonsChunkPlugin ...

  7. C语言程序设计(五) 选择控制结构

    第五章 选择控制结构 分治策略:任务分解细化 程序设计语言:为了让计算机执行由高级语言编写的程序指令,必须把这些指令从高级语言形式转换成计算机能理解的机器语言形式,这种转换是由编译器来完成的 算法:为 ...

  8. C++ 别踩白块小游戏练习

    #include <iostream> #include <stdio.h> #include <stdlib.h> #include <easyx.h> ...

  9. MVC设计模式简介

    刚刚学习了MVC相关知识,在这里进行一下总结MVC设计模式提高了Java开发中的代码可读性,提高了开发效率,实乃开发利器 1在MVC中由客户端发送一个带参数的请求,经过servlet处理后做出相应的处 ...

  10. 蓝桥杯vip 字符串对比

    蓝桥杯vip 字符串对比 题目如下 给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一: 1:两个字符串长度不等.比如 Beijing 和 Hebei ...