这篇文章仅介绍支持向量机的基础知识,不涉及特别复杂的求解。不清楚基础知识的小伙伴可以看一下这篇文章。


首先呢,支持向量机解决的是将数据点分成两类的问题。本文只考虑线性分类器。对于二维的数据而言,就是要找到一条直线,将数据点分成两类,一类在直线这边,另一类在直线那边。对于更高维,比如nnn维的数据,就是要找到一个“超平面”,将数据分到超平面两侧。这里的“超平面”一定是n−1n-1n−1维的,它的方程一定是a1x1+a2x2+⋯+anxn+b=0a_1x_1+a_2x_2+\cdots+a_nx_n+b=0a1​x1​+a2​x2​+⋯+an​xn​+b=0因为增加一个(有效的)约束条件就相当于降一维,在原来没有约束条件(nnn维)的基础上增加一个方程就降到了(n−1)(n-1)(n−1)维。例如,在三维中,“超平面”就是二维的平面;二维中,“超平面”就是一维的直线。不论如何,超平面的方程一定是线性函数,这就是为什么叫线性分类器。

观察上面那个式子,用线性代数的知识我们很容易看出左边可以写成两个向量内积的形式。令w=[a1a2⋯an]\bm w=\begin{bmatrix}a_1\\a_2\\\cdots\\a_n\end{bmatrix}w=⎣⎢⎢⎡​a1​a2​⋯an​​⎦⎥⎥⎤​,x=[x1x2⋯xn]\bm x=\begin{bmatrix}x_1\\x_2\\\cdots\\x_n\end{bmatrix}x=⎣⎢⎢⎡​x1​x2​⋯xn​​⎦⎥⎥⎤​,则超平面的方程一定可以表示为wTx+b=0{\bm w}^T\bm x+b=0wTx+b=0特别地,在二维的情况下,x=[xy]\bm x=\begin{bmatrix}x\\y\end{bmatrix}x=[xy​],wTx+b=0{\bm w}^T\bm x+b=0wTx+b=0就是直线Ax+By+C=0Ax+By+C=0Ax+By+C=0。

这个向量w\bm ww的含义是什么呢?其实它就是超平面的法向量。我们知道,法向量与超平面上的任意向量正交(垂直)。任取超平面上两点x1,x2\bm x_1,\bm x_2x1​,x2​,则x2−x1\bm x_2-\bm x_1x2​−x1​就是平面上的一个向量,而wT(x2−x1)=wTx1−wTx2=(−b)−(−b)=0\bm w^T(\bm x_2-\bm x_1)={\bm w}^T\bm x_1-{\bm w}^T\bm x_2=(-b)-(-b)=0wT(x2​−x1​)=wTx1​−wTx2​=(−b)−(−b)=0,所以wT\bm w^TwT与x2−x1\bm x_2-\bm x_1x2​−x1​正交,w\bm ww与超平面上的任意向量垂直,故w\bm ww是超平面的法向量。特别地,直线Ax+By+C=0Ax+By+C=0Ax+By+C=0的法向量就是(A,B)(A,B)(A,B)。

那我们的目标是什么呢?且看下图:

对于这些数据点,显然有无数条直线可以把它们完全分成两类。选哪条最好呢?答案是:选择的这条直线,离它最近的数据点距离它的距离必须最大。换言之:我们要最大化数据点到直线的最短距离。离直线最近的数据点就是支持向量(Support Vector),任意维数中分割数据的超平面称为最大间隔超平面(在这里就是这条直线)。

怎么计算一个点到直线的距离呢?假设对于数据点x\bm xx,我们要计算它到直线wTx+b=0\bm w^T\bm x+b=0wTx+b=0的距离。取直线上任一点x0\bm x_0x0​,则x\bm xx到x0\bm x_0x0​的距离为∥x−x0∥\|\bm x-\bm x_0\|∥x−x0​∥。令x−x0\bm x-\bm x_0x−x0​垂直于直线,则x−x0\bm x-\bm x_0x−x0​于直线的法向量w\bm ww平行,即x−x0=λw\bm x-\bm x_0=\lambda\bm wx−x0​=λw,x0=x−λw\bm x_0=\bm x-\lambda\bm wx0​=x−λw。而x0\bm x_0x0​在直线上,有wTx0+b=0\bm w^T\bm x_0+b=0wTx0​+b=0,带入得wTx−λwTw+b=0\bm w^T\bm x-\lambda\bm w^T\bm w+b=0wTx−λwTw+b=0,λwTw=wTx+b\lambda\bm w^T\bm w=\bm w^T\bm x+bλwTw=wTx+b,解得
λ=wTx+b∥w∥2\lambda=\frac{\bm w^T\bm x+b}{\|\bm w\|^2}λ=∥w∥2wTx+b​∥x−x0∥=∥λw∥=∣wTx+b∣∥w∥\|\bm x-\bm x_0\|=\|\lambda\bm w\|=\frac{|\bm w^T\bm x+b|}{\|\bm w\|}∥x−x0​∥=∥λw∥=∥w∥∣wTx+b∣​这就是x\bm xx到直线的距离。这个公式对于任意维数的超平面都成立。

怎么表示分类的结果呢?其实就是一个函数y=f(x)y=f(\bm x)y=f(x),使得对于一类x\bm xx有f(x)=1f(\bm x)=1f(x)=1,另一类有f(x)=−1f(\bm x)=-1f(x)=−1。

回到点x\bm xx到直线的距离公式,如果我们把分子的绝对值去掉,那这个距离就可能是负的。但是,有一个很好的性质:在直线上方的这类点距离为正,下面为负。如果我们定义上面这类点yyy值为+1+1+1,下面为−1-1−1,那ywTx+b∥w∥y\frac{\bm w^T\bm x+b}{\|\bm w\|}y∥w∥wTx+b​就是恒正的。我们称γ~(x)=ywTx+b∥w∥\tilde{\gamma}(\bm x)=y\frac{\bm w^T\bm x+b}{\|\bm w\|}γ~​(x)=y∥w∥wTx+b​为x\bm xx的几何间隔,它恒正,如果是负的,表示出现了分类错误

假设数据点到直线的最短距离为ddd,则ywTx+b∥w∥=dy\frac{\bm w^T\bm x+b}{\|\bm w\|}=dy∥w∥wTx+b​=d。令∥w∥=1d\|\bm w\|=\frac1d∥w∥=d1​,则有min⁡y(wTx+b)=1\min y(\bm w^T\bm x+b)=1miny(wTx+b)=1。这样做是为了方便计算,此时支持向量在直线wTx+b=±1\bm w^T\bm x+b=\pm 1wTx+b=±1上。(其中γ^(x)=y(wTx+b)\hat\gamma(\bm x)=y(\bm w^T\bm x+b)γ^​(x)=y(wTx+b)称为函数间隔。)那么,对于任意数据点xi\bm x_ixi​,有yi(wTxi+b)≥1y_i(\bm w^T\bm x_i+b)\ge 1yi​(wTxi​+b)≥1。这个约束条件相当于规定了数据点不能落在直线wTx+b=1\bm w^T\bm x+b=1wTx+b=1与wTx+b=−1\bm w^T\bm x+b=-1wTx+b=−1之间。现在要让ddd最大,就是让1∥w∥\frac1{\|\bm w\|}∥w∥1​最大。问题转化为求max⁡w,b1∥w∥,s.t. yi(wTxi+b)≥1\max_{\bm w,b}\frac1{\|\bm w\|},\ \text{s.t. }y_i(\bm w^T\bm x_i+b)\ge1w,bmax​∥w∥1​, s.t. yi​(wTxi​+b)≥1要让1∥w∥\frac1{\|\bm w\|}∥w∥1​最大,就是让12∥w∥2\frac12\|\bm w\|^221​∥w∥2最小。问题又转化为求max⁡w,b12∥w∥2,s.t. yi(wTxi+b)≥1\max_{\bm w,b}\frac12\|\bm w\|^2,\ \text{s.t. }y_i(\bm w^T\bm x_i+b)\ge1w,bmax​21​∥w∥2, s.t. yi​(wTxi​+b)≥1这里平方是为了去除∥w∥\|\bm w\|∥w∥的根号,乘12\frac1221​是为了简化计算。
接下来就要用拉格朗日乘数法了。设有nnn个数据,就有nnn个约束条件。于普通的拉格朗日乘数法不同,这里的约束条件是“大于等于”,不是等于,所以需要一些别出心裁的设计。按照套路,定义拉格朗日函数L(w,b,α)=12∥w∥2−∑i=1nαi[yi(wTxi+b)−1]L(\bm w,b,\bm\alpha)=\frac12\|\bm w\|^2-\sum_{i=1}^n\alpha_i[y_i(\bm w^Tx_i+b)-1]L(w,b,α)=21​∥w∥2−i=1∑n​αi​[yi​(wTxi​+b)−1]其中α=(α1,α2,⋯,αn)\bm\alpha=(\alpha_1,\alpha_2,\cdots,\alpha_n)α=(α1​,α2​,⋯,αn​)是拉格朗日乘数。令θ(w)=max⁡αi≥0L(w,b,α)\theta(\bm w)=\max_{\alpha_i\ge0}L(\bm w,b,\bm\alpha)θ(w)=αi​≥0max​L(w,b,α)添加约束条件αi≥0\alpha_i\ge0αi​≥0就是解决“大于等于”的问题。试想,假如某个约束条件不满足,即yi(wTxi+b)<1y_i(\bm w^T\bm x_i+b)<1yi​(wTxi​+b)<1,那么对应的那一项−αi[yi(wTxi+b)−1]>0-\alpha_i[y_i(\bm w^T\bm x_i+b)-1]>0−αi​[yi​(wTxi​+b)−1]>0,此时取αi→∞\alpha_i\to\inftyαi​→∞就有θ(w)→∞\theta(\bm w)\to\inftyθ(w)→∞,所以条件不满足是很容易甄别出来的。

接下来就是令∂L∂w=∂L∂b=0\frac{\partial L}{\partial \bm w}=\frac{\partial L}{\partial b}=0∂w∂L​=∂b∂L​=0,进行进一步的计算。


好啦,这篇文章的使命到此就结束了,后面的内容就超出我的知识范围了,涉及到二次规划、KTT条件什么的。希望对你理解SVM的基础知识有帮助~

支持向量机(Support Vector Machine, SVM)基础知识相关推荐

  1. 支持向量机(support vector machine)(SVM)(1)

    背景 对于两类问题,给定数据,使用线性函数,如何分类? 方案1(只看黑色分界线,红色不用管) 方案2(只看黑色分界线,红色不用管) 哪一个更好? 第二个好,将两类数据分得更开,而且: 建模 有了目标之 ...

  2. 详解支持向量机(Support Vector Machine, SVM)

    接触支持向量机(Support Vector Machine, SVM)有很长一段时间了,对它的原理一直懵懵懂懂.有幸在国科大听了兰艳艳老师的课,对SVM有了更加深入的认识,决定写成笔记记录下来,当作 ...

  3. [机器学习] 分类 --- Support Vector Machine (SVM)

    1. 基本概念 支持向量机(Support Vector Machine, SVM)的基本模型是在特征空间上找到最佳的分离超平面使得训练集上正负样本间隔最大.SVM是用来解决二分类问题的有监督学习算法 ...

  4. 【翻译论文】An Architecture Combining Convolutional Neural Network (CNN) and Support Vector Machine (SVM)

    [翻译论文]An Architecture Combining Convolutional Neural Network (CNN) and Support Vector Machine (SVM) ...

  5. OpenCV3.3中支持向量机(Support Vector Machines, SVM)实现简介及使用

    OpenCV 3.3中给出了支持向量机(Support Vector Machines)的实现,即cv::ml::SVM类,此类的声明在include/opencv2/ml.hpp文件中,实现在mod ...

  6. 【李宏毅2020 ML/DL】补充:Support Vector Machine (SVM)

    我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 本次笔记补充视频 BV1JE411g7XF 的缺失部分.在另一个UP主上传的2017课程BV13x411v7U ...

  7. 李宏毅机器学习笔记(2016年的课程):Support Vector Machine (SVM)

    目录 1. 各种loss函数 2.线性SVM 3.kernel 3.1 前言 3.2 各种 kernel 3.3 kernel VS 神经网络 1. 各种loss函数 f = np.arange(-3 ...

  8. 西瓜书+实战+吴恩达机器学习(十)监督学习之支持向量机 Support Vector Machine

    文章目录 0. 前言 1. 拉格朗日乘子法 2. SVM参数求解方法 3. 软间隔 4. 核方法 5. 支持向量回归 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~ 0. 前 ...

  9. 机器学习中的数学基础(4.1):支持向量机Support Vector Machine(SVM)

    SVM可以说是一个很经典的二分类问题,属于有监督学习算法的一种.看过那么多的博客知乎解释SVM我一定要自己总结一篇,加深一下自己的理解. 带着问题去读文章会发现,柳暗花明又一村,瞬间李敏浩出现在眼前的 ...

最新文章

  1. python使用matplotlib可视化使用subplots子图、subplots绘制子图、并为可视化的每个子图添加标题(title for each subplots)
  2. 计算机体系结构:嵌入式方法_计科考研里的【计算机系统结构、计算机软件与理论、计算机应用技术】都是什么意思?...
  3. 完整的一次 HTTP 请求响应过程(二)
  4. ceil和floor
  5. ORACLE数据库维护
  6. linux 自动挂载usb设备,Raspberry Pi 自动挂载USB存储设备
  7. 力扣题目——653. 两数之和 IV - 输入 BST
  8. 《Effective Python》笔记
  9. WinAPI: wvsprintf 与 wsprintf - Windows 的格式化输出函数
  10. linux安装雅黑字体,在CentOS系统中安装雅黑字体
  11. Ubuntu 软件包管理 常用 apt 命令
  12. 相册视频制作APP有什么推荐?看这里!轻松把照片做成视频
  13. 深入理解计算机系统 csapp 家庭作业(第三章完整版)
  14. python Shapely使用指南详解
  15. 什么是MBTI,16种人格类型详解
  16. C++中未定义标识符ULONG,UINT的报错解决方法 VS2019
  17. tACS恢复老年人认知控制能力的EEG功能和DTI结构网络机制
  18. 元宇宙是什么?解密扎克伯格的“元宇宙梦”
  19. DELL OMSA(SrvAdmin)-监控软件与Promethues结合
  20. 东方证券首席架构师樊建:企业微服务架构转型实践

热门文章

  1. 关于EOSUNION 的商业创业大赛的一点心得
  2. 初级会计实务--第三章第四节、应交税费
  3. CA双向认证完整实现步骤(附java客户端代码)
  4. Word为什么会报告磁盘空间已满
  5. 景安网络快云mysql版本_景安快云数据库使用教程
  6. 网络安全系列-二十九: 读《透视APT 赛博空间的高级威胁》笔记
  7. 打桥位程序lisp_【下载】借花献佛,AutoLISP程序的安装包制作,感谢秋枫大侠的程序...
  8. 页面之间数据调转传输
  9. qml的focus问题
  10. 黑马程序员_网络电视用中国电信路由器不能联网的问题