本文始发于个人公众号:TechFlow,原创不易,求个关注

今天是机器学习专题的第32篇文章,我们来聊聊SVM。

SVM模型大家可能非常熟悉,可能都知道它是面试的常客,经常被问到。它最早诞生于上世纪六十年代。那时候虽然没有机器学习的概念,也没有这么强的计算能力,但是相关的模型和理论已经提出了不少,SVM就是其中之一。

SVM完全可以说是通过数学推导出来的模型,由于当时还没有计算机,所以模型当中的参数都是数学家们用手来算的。它有一个巨大的应用就是前苏联的计划经济体系,我们知道在计划经济当中,国家有多少社会资源,每样商品需要生产多少都是国家统筹规划的。

但是国家和社会不是一成不变的,去年消耗了多少粮食不意味着今年也会消耗这么多,很多因素会影响。所以当时前苏联的科学家们用当时最先进的方法来计算参数预测各项商品的消耗来完成社会资源的调度,这个最先进的方法就是SVM。

废话说了这么多,下面我们就来看看这个模型实际的原理吧。

算法描述

SVM的英文全称是Support Vector Machine,翻译过来的意思是支持向量机。无论是英文还是中文,我们直观上有些难以理解。

难以理解没有关系,我们先把支持向量这个概念放一放,先来介绍一下它整体的原理。

SVM最基本的原理就是寻找一个分隔“平面”将样本空间一分为二,完成二分类。进一步我们可以知道,对于二维的平面,我们要分隔数据需要一条线。对于三维的空间我们要分开需要一个面,发散开去对于一个n维的空间,我们要将它分开需要一个n-1的超平面。

SVM寻找的就是这样的超平面,为了方便理解,我们以最简单的二维场景为例。

我们观察一下上图,很明显图中的数据可以分成两个部分。对于上图的数据而言理论上来说我们有无数种划分的方法,我们既可以像左边这样随意的划分,也可以像右边这样看起来严谨许多的划分,在这么多划分方法当中究竟哪一种是最好的呢?我们怎么来定义划分方法的好和坏呢?

SVM对这个问题的回答很干脆,右图的划分是最好的,原因是它的间隔最大

从图中我们可以看到,间隔也就是被划分成两个部分之间最接近的距离,间隔正中的这条红线就是SVM找到的用来划分的超平面。

我们进一步观察可以发现,对于间隔这个事情来说,绝大多数样本都不起作用,能够起作用的只有在落在虚线上也就是间隔边缘的样本。是这些样本确定了间隔,从而间接确定了分隔平面,支撑起了模型。

所以SVM当中把这些落在边缘上的样本成为支持向量,这也是SVM得名的由来。

模型推导

我们首先来考虑最简单的情况,即线性可分,也就是说所有样本都可以被正确的划分。这样划分出来得到的间隔是实实在在的,所以我们把线性可分的情况下的间隔称为硬间隔

首先我们先写出这个分隔平面的公式:

\[\omega^Tx+b = 0
\]

其中x表示一条n维的样本特征组成的向量,\(\omega\)是平面的n维法向量,决定平面的方向。虽然从公式上来看和线性回归很像,但是它们之间的本质区别是线性回归是用来拟合label的,而SVM的平面方程是用来确定平面方向的。这里的b就是简单的偏移量,表示平面距离原点的距离。

表示出来分隔平面之后,我们就可以表示出每一个样本距离平面的距离:

\[\gamma = \frac{|\omega^Tx + b|}{||\omega||}
\]

这个公式看起来好像不太明白,其实它是由二维的点到平面的距离公式演化得到的:\(d = \frac{|Ax + By + c|}{A^2 + B^2}\)

这里的\(||\omega||\)是一个L2范数,我们把它也展开可以写成:\(||\omega|| = \sqrt{\sum_{i=1}^k \omega_i^2}\)

模型假设

这里我们做一点假设,对于样本当中的点,在分隔平面上方的类别为1,在分隔平面下方的类别为-1。那么我们可以进一步得到\(\omega x_i +b\)应该和\(y_i\)同号。所以我们可以写成:\(y(\omega^T x + b) > 0\)。

我们来观察支持向量,也就是刚好在间隔边缘的点,它们到分割平面的距离刚好是间隔的一半。我们假设这个点的函数值是\(\gamma\),我们把它表示出来可以得到:

\[\begin{aligned}
y_i(\omega^T x_i + b)&=\gamma\\
y_i(\frac{\omega}{\gamma}x_i + \frac{b}{\gamma}) &= 1
\end{aligned}
\]

我们令新的\(\hat{\omega} = \frac{\omega}{\gamma}\),新的\(\hat{b}= \frac{b}{\gamma}\)。也就是说我们通过变形可以将函数值缩放到1,为了方便计算,我们选取恰当的参数,使得间隔刚好为1。既然如此,对于所有的样本点,我们都可以得到\(y_i(\omega^Tx_i + b) \ge 1\),对于支持向量来说\(y_i(\omega^Tx_i + b)\)=1。

利用这点,我们可以表示出间隔:

\[\gamma = 2\frac{|\omega^Tx + b|}{||\omega||} = \frac{2}{||\omega||}
\]

\(\frac{2}{||\omega||}\)是一个分数,我们要求它的最大值,也就是求\(||\omega||^2\)的最小值。我们想要在线性可分的基础上让这个间隔尽量大,所以这是一个带约束的线性规划问题,我们把整个式子写出来:

接下来我们要做的就是在满足约束的前提下找到使得\(\frac{1}{2}||\omega||^2\)最小的\(\omega\),这个式子看起来非常麻烦,又有不等式掺和在里面,那么我们应该怎么办呢?

这部分内容我们将会在下一篇文章分享,敬请期待。

今天的文章到这里就结束了,如果喜欢本文的话,请来一波素质三连,给我一点支持吧(关注、转发、点赞)。

机器学习 | 深入SVM原理及模型推导(一)的更多相关文章

  1. 机器学习之支持向量机—SVM原理代码实现

    支持向量机—SVM原理代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/9596898.html 1. 解决 ...

  2. 【机器学习】算法原理详细推导与实现(六):k-means算法

    [机器学习]算法原理详细推导与实现(六):k-means算法 之前几个章节都是介绍有监督学习,这个章解介绍无监督学习,这是一个被称为k-means的聚类算法,也叫做k均值聚类算法. 聚类算法 在讲监督 ...

  3. 机器学习技法课之Aggregation模型

    Courses上台湾大学林轩田老师的机器学习技法课之Aggregation 模型学习笔记. 混合(blending) 本笔记是Course上台湾大学林轩田老师的<机器学习技法课>的学习笔记 ...

  4. 机器学习 - 算法 - SVM 支持向量机

    SVM 原理引入 支持向量机( SVM,Support Vector Machine ) 背景 2012年前较为火热, 但是在12年后被神经网络逼宫, 由于应用场景以及应用算法的不同, SVM还是需要 ...

  5. 机器学习——支持向量机SVM

    前言 学习本章节前需要先学习: <机器学习--最优化问题:拉格朗日乘子法.KKT条件以及对偶问题> <机器学习--感知机> 1 摘要: 支持向量机(SVM)是一种二类分类模型, ...

  6. 机器学习:SVM

    SVM 前言:支持向量机(Support Vector Machine, SVM),作为最富盛名的机器学习算法之一,其本身是一个二元分类算法,为了更好的了解SVM,首先需要一些前提知识,例如:梯度下降 ...

  7. 【机器学习】svm

    机器学习算法--SVM 目录 机器学习算法--SVM 1. 背景 2. SVM推导 2.1 几何间隔和函数间隔 2.2 SVM原问题 2.3 SVM对偶问题 2.4 SMO算法 2.4.1 更新公式 ...

  8. Support Vector Machine (1) : 简单SVM原理

    目录 Support Vector Machine (1) : 简单SVM原理 Support Vector Machine (2) : Sequential Minimal Optimization ...

  9. 机器学习支持向量机SVM笔记

    SVM简述: SVM是一个线性二类分类器,当然通过选取特定的核函数也可也建立一个非线性支持向量机.SVM也可以做一些回归任务,但是它预测的时效性不是太长,他通过训练只能预测比较近的数据变化,至于再往后 ...

随机推荐

  1. python基础全部知识点整理,超级全(20万字+)

    目录 Python编程语言简介 https://www.cnblogs.com/hany-postq473111315/p/12256134.html Python环境搭建及中文编码 https:// ...

  2. Python File flush() 方法

    概述 flush() 方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入.高佣联盟 www.cgewang.com 一般情况下,文件关闭后会自动刷 ...

  3. PDO::__construct

    PDO::__construct — 创建一个表示数据库连接的 PDO 实例(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0) 说明 语法 PDO::__constru ...

  4. 2020牛客暑期多校训练营 第二场 C Cover the Tree 构造 贪心

    LINK:Cover the Tree 最受挫的是这道题,以为很简单 当时什么都想不清楚. 先胡了一个树的直径乱搞的贪心 一直过不去.后来意识到这类似于最经典长链剖分优化贪心的做法 然后那个是求最大值 ...

  5. 7.9 NOI模拟赛 A.图 构造 dfs树 二分图

    啥都想不出来的我是不是废了/dk 这道题考的主要是构造 而我想的主要是乱搞. 一个很假很假的做法:直接暴力4种颜色染色 我也不知道对不对.. 不过成功的话一定是对的. 然后考虑奇环的问题 一个很假很假 ...

  6. Hadoop学习之TextInputFormat分片逻辑探究

    期望 顺着上一篇文章<Hadoop学习之第一个MapReduce程序>中遗留的分片疑惑,探究TextInputFormat的分片逻辑. 第一步 上Apache官网下载实验所使用的Hadoo ...

  7. ios_中将UITextField输入框设置为密码形式

    1.通过XIB方式实现: 将UITextField中的secure选项勾中即可. 2.通过代码实现: UItextField * test = [ UItextField alloc] init ]; ...

  8. office2010的破解工具

    office2010的破解工具,找了好多的密钥都不合适,直接用这个软件一键搞定, 下载地址:https://pan.baidu.com/s/1phPwihCDipGwGdSmjWNeYw 提取码:8m ...

  9. 038_go语言中的状态协程

    代码演示: package main import ( "fmt" "math/rand" "sync/atomic" "time ...

  10. .Net 异常最佳做法

    异常信息原因 异常是易于滥用的那些构造之一.这可能包括不应该在应有的情况下引发异常或在没有充分理由的情况下捕获异常.还有一个引发错误异常的问题,它不仅无助于我们,而且会使我们困惑.另一方面,存在正确处 ...