支持向量机(Support Vector Machine, SVM)基础知识
这篇文章仅介绍支持向量机的基础知识,不涉及特别复杂的求解。不清楚基础知识的小伙伴可以看一下这篇文章。
首先呢,支持向量机解决的是将数据点分成两类的问题。本文只考虑线性分类器。对于二维的数据而言,就是要找到一条直线,将数据点分成两类,一类在直线这边,另一类在直线那边。对于更高维,比如nnn维的数据,就是要找到一个“超平面”,将数据分到超平面两侧。这里的“超平面”一定是n−1n-1n−1维的,它的方程一定是a1x1+a2x2+⋯+anxn+b=0a_1x_1+a_2x_2+\cdots+a_nx_n+b=0a1x1+a2x2+⋯+anxn+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=⎣⎢⎢⎡a1a2⋯an⎦⎥⎥⎤,x=[x1x2⋯xn]\bm x=\begin{bmatrix}x_1\\x_2\\\cdots\\x_n\end{bmatrix}x=⎣⎢⎢⎡x1x2⋯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,则有miny(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最大。问题转化为求maxw,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最小。问题又转化为求maxw,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,bmax21∥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≥0maxL(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)基础知识相关推荐
- 支持向量机(support vector machine)(SVM)(1)
背景 对于两类问题,给定数据,使用线性函数,如何分类? 方案1(只看黑色分界线,红色不用管) 方案2(只看黑色分界线,红色不用管) 哪一个更好? 第二个好,将两类数据分得更开,而且: 建模 有了目标之 ...
- 详解支持向量机(Support Vector Machine, SVM)
接触支持向量机(Support Vector Machine, SVM)有很长一段时间了,对它的原理一直懵懵懂懂.有幸在国科大听了兰艳艳老师的课,对SVM有了更加深入的认识,决定写成笔记记录下来,当作 ...
- [机器学习] 分类 --- Support Vector Machine (SVM)
1. 基本概念 支持向量机(Support Vector Machine, SVM)的基本模型是在特征空间上找到最佳的分离超平面使得训练集上正负样本间隔最大.SVM是用来解决二分类问题的有监督学习算法 ...
- 【翻译论文】An Architecture Combining Convolutional Neural Network (CNN) and Support Vector Machine (SVM)
[翻译论文]An Architecture Combining Convolutional Neural Network (CNN) and Support Vector Machine (SVM) ...
- OpenCV3.3中支持向量机(Support Vector Machines, SVM)实现简介及使用
OpenCV 3.3中给出了支持向量机(Support Vector Machines)的实现,即cv::ml::SVM类,此类的声明在include/opencv2/ml.hpp文件中,实现在mod ...
- 【李宏毅2020 ML/DL】补充:Support Vector Machine (SVM)
我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 本次笔记补充视频 BV1JE411g7XF 的缺失部分.在另一个UP主上传的2017课程BV13x411v7U ...
- 李宏毅机器学习笔记(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 ...
- 西瓜书+实战+吴恩达机器学习(十)监督学习之支持向量机 Support Vector Machine
文章目录 0. 前言 1. 拉格朗日乘子法 2. SVM参数求解方法 3. 软间隔 4. 核方法 5. 支持向量回归 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~ 0. 前 ...
- 机器学习中的数学基础(4.1):支持向量机Support Vector Machine(SVM)
SVM可以说是一个很经典的二分类问题,属于有监督学习算法的一种.看过那么多的博客知乎解释SVM我一定要自己总结一篇,加深一下自己的理解. 带着问题去读文章会发现,柳暗花明又一村,瞬间李敏浩出现在眼前的 ...
最新文章
- keras inceptionv1 到 inceptionv4演化
- vim尾部空格标红显示插件
- JAVA基本数据类型、数据类型转换
- P2082 区间覆盖(加强版)
- arcengine 将地图文件保存为图片(包括各种图片格式)
- 那些35岁的程序员都去哪了
- 程序员修神之路--容器技术为什么会这么流行(记得去抽奖)
- 工作334:uni-控制整个label区域可选
- MethodInvokingJobDetailFactoryBean的并发问题
- Google 正式抛弃 HTTP!
- 知道路程时间求加速度_人教版高中物理必修一重点知识点—加速度分析与讲解...
- Java框架搭建-Maven、Mybatis、Spring MVC整合搭建
- Java学习之路 之 使用技巧篇
- 笔记本电脑怎样截屏_被辞退,我是怎样一步步打赢仲裁官司,拿到70万赔偿的(一)--纠纷起源...
- 给神经网络加入先验知识!
- 文件系统FatFsR0.09a翻译(三):ff.h
- cad卸载不干净_还怕软件卸载不干净吗?试试它:Revo Uninstaller Pro
- html分列代码,实现分列的两段excel vba 分列代码
- HTML显示证件页面图形,证件信息.html
- 通过游戏,ACCU和乌克兰进行测试
热门文章
- google adwords express使用心得
- 黑莓招聘 BlackBerry Developer Evangelist (based in China)
- 加解密遇到的JCE cannot authenticate the provider BC问题解决方案
- php计算用户留存,利用Python计算新增用户留存率
- c语言例题功能作用,一篇C语言面试题的汇总
- win10安装无线显示器失败
- 平价的无线蓝牙耳机,性价比高的无线蓝牙耳机
- 瑞芯微1126环境配置说明
- C++实现动态烟花,噼里啪啦过新年啦
- python红楼梦人物词频统计_用Python绘制红楼梦词云图,竟然发现了这个!