惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 三生石上(FineUI控件)
月光博客
月光博客
S
SegmentFault 最新的问题
有赞技术团队
有赞技术团队
Stack Overflow Blog
Stack Overflow Blog
Engineering at Meta
Engineering at Meta
T
The Blog of Author Tim Ferriss
The GitHub Blog
The GitHub Blog
小众软件
小众软件
Hugging Face - Blog
Hugging Face - Blog
IT之家
IT之家
宝玉的分享
宝玉的分享
A
About on SuperTechFans
Vercel News
Vercel News
P
Proofpoint News Feed
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 【当耐特】
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
V
Visual Studio Blog
Jina AI
Jina AI
Y
Y Combinator Blog
T
Tailwind CSS Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Last Week in AI
Last Week in AI

Go Further

【教程】manim动画制作工具 【直观算法】二叉搜索树算法总结 【直观算法】二叉树遍历算法总结 【直观算法】Egg Puzzle 鸡蛋难题 博客文章总目录 TensorSpace 一个3D神经网络可视化框架 【直观详解】通俗易懂了解什么是黎曼猜想 支持币与去中心化商业模式 那些值得一看的TED演讲附全文文稿笔记 【区块链】共识算法与如何解决拜占庭将军问题 【直观详解】让你永远忘不了的傅里叶变换解析 【直观详解】泰勒级数 微信跳一跳解题报告 Dota2-A帐效果 深入浅出看懂AlphaGo Zero/AlphaGo元 【直观详解】线性代数中的转置正交正规正定 程序员技能图谱 【直观详解】线性代数的本质 【直观详解】什么是PCA、SVD 【直观详解】什么是正则化 Pandas-Wiki 【区块链】比特币与金融、ICO和监管 【区块链】现代区块链与新技术 【区块链】一文看懂区块链:一步一步发明比特币 【直观详解】拉格朗日乘法和KKT条件 Dota2伤害类型详解 【直观详解】机器学习分类器性能指标详解 【直观详解】信息熵、交叉熵和相对熵 Dota2机制总结 【直观详解】Logistic Regression
【直观详解】支持向量机SVM
2017-09-19 · via Go Further

【阅读时间】13min - 19min
【内容简介】详解解读什么是支持向量机,如何解支持向量以及涉及的拉普拉斯乘子法,还有核方法的解读

什么是支持向量机-SVM

支持向量机-SVM(Support Vector Machine)从本质来说是一种:用一条线(方程)分类两种事物

SVM的任务是找到这条分界线使得它到两边的margin都最大注意,这里的横坐标是 $x_1$ 纵坐标为 $x_2$,如下图所示

margin

margin

有了直观的感知,在定义这一节在做一些深入的思考,分解名词(Support Vector Machine)并尝试解释:

  • Machine - Classification Machine 说明它的本质是一个分类器
  • Support Vector - 如上图所示,在Maximum Margin上的这些点就是支持向量,具体说即最终分类器表达式中只含有这些支持向量的信息,而与其他数据点无关。在下面的公式中,只有支持向量的系数 $\alpha_i$ 不等于0。说人话,上图中两个红色的点,一个蓝色的点,合起来就是支持向量 $$ \mathbf w \cdot \varphi (\mathbf x) = \sum_i \lambda_i y_i k(\mathbf x_i,\mathbf x) $$

公式中每一个符号的含义在后文有说明

如何求解支持向量机

对于我们需要求解的这个超平面(直线)来说,我们知道

  • 它离两边一样远(待分类的两个部分的样本点)
  • 最近的距离就是到支持向量中的点的距离

根据这两点,抽象SVM的直接表达(Directly Representation)

注:$arg \operatorname*{max}_{x} f(x)$ 表示当 $f(x)$ 取最大值时,x的取值

$$ arg \operatorname*{max}_{boundary} margin(boundary) \\ \text{所有正确归类的两类到boundary的距离} \ge margin \tag{1} $$

其实这个公式是一点也不抽象,需要更进一步的用符号来表达。

我们知道在准确描述世界运行的规律这件事上,数学比文字要准确并且无歧义的多,文字(例子)直观啰嗦,数学(公式)准确简介

硬间隔

SVM支持向量机

SVM支持向量机

注:公式中加粗或者带有向量箭头的都表达一个向量

  • 假设这些数据线性可分,也可称为硬间隔(Hard Margin)
  • 首先定义超平面:$\mathbf w^T \vec x_i + b = 0$,接下来为了方便,设 $\vec x = (x_1,x_2)$ 即一条直线
  • 任意点 $\vec x_i$ 到该直线的距离为 $\frac{1}{\lVert \mathbf w \lVert} (\mathbf w^T \vec x_i + b)$
  • 对于空间内所有训练点的坐标记为 $(\vec x_i,y_i)$,其中 $y_i$ = 1 or -1, 表示点 $\vec x_i$ 所属的类
  • 如果这些训练数据是线性可分的,选出两条直线(上图中的虚线),使得他们的距离尽可能的大,这两条直线的中央就是待求的超平面(直线)
  • 为了表达直观,我们定义这两个超平面(直线)分别为 $\mathbf w^T \vec x_i + b = 1$ 和 $\mathbf w^T \vec x_i + b = -1$,两个超平面(直线)之间的距离为 $\gamma = \frac{2}{\lVert \mathbf w \lVert}$

    注:选择1的好处是,wb进行尺缩变换(kwkb)不改变距离,方便计算

  • 为了使得所有样本数据都在间隔区(两条虚线)以外,我们需要保证对于所有的 $i$ 满足下列的条件

    • $\mathbf w^T \vec x_i + b \geqslant 1$ 若 $y_i = 1$
    • $\mathbf w^T \vec x_i + b \leqslant -1$ 若 $y_i = -1$
  • 上述两个条件可以写作 $y_i(\mathbf w^T \vec x_i + b) \geqslant 1, \;\text{for all 1}\; 1\leqslant i \leqslant n$ 这里的n指样本点的数量
  • 上面的表达(Directly Representation)可以被写成

    $$ arg \operatorname*{max}_{\mathbf w,b} \left\{ {\frac{1}{\lVert \mathbf w \lVert} \operatorname*{min}_{n} [y_i(\mathbf w^T\vec x_i}+b)]\right\} \tag{2} $$
  • 最终目的是找到具有“最大间隔”(Maximum Margin)的划分超平面(直线),找到参数 $\mathbf w$ 和 $b$ 使得 $\gamma$ 最大

  • 则可以对(2)式进行形式变换,得到 canonical representation $$ arg \operatorname*{max}_{\mathbf w,b} \frac{2}{\lVert \mathbf w \lVert} \implies arg \operatorname*{min}_{\mathbf w,b} \frac{1}{2}\lVert \mathbf w \lVert ^2 \\ s.t.\; y_i(\mathbf w^T\vec x_i+b) \geqslant1,\;i = 1,2,\ldots,m \tag{3} $$

注:s.t. :subject to 表示约束条件,表达的意思等价于:为了使得所有样本数据都在间隔区(两条虚线)以外

为了解(3)式,需要用到拉格朗日乘子法(Method of lagrange multiplier),它是用来求解在约束条件目标函数的极值的,详细直观详解

注:以下解算过程希望完全看懂强烈建议理解阅读详细直观详解,很多地方推导过程只写必要过程及结论

根据约束的形式,我们引入m个拉格朗日乗法子,记为 $\boldsymbol \lambda = (\lambda_1,\ldots,\lambda_m)^T$ ,原因是,有m个约束,所以需要m个拉格朗日乗法子。可以得出拉格朗日方程如下:
$$ \mathcal{L}(\mathbf w,b,\boldsymbol \lambda) = \frac{1}{2}\lVert \mathbf w \lVert ^2 - \sum_{i=1}^m \lambda_i \{ y_i(\mathbf w^T\vec x_i+b) -1 \} \tag{4} $$

解这个拉格朗日方程,对 $\mathbf w$ 和 $b$ 求偏导数,可以得到以下两个条件
$$ \mathbf w = \sum_{i=1}^m \lambda_i y_i \vec x_i \\ 0 = \sum_{i=1}^m \lambda_i y_i $$

将这两个条件带回公式(4),可以得到对偶形式(dual representaiton),我们的目的也变为最大化 $\mathcal{L}(\boldsymbol \lambda)$,表达式如下
$$ arg \operatorname*{max}_{\boldsymbol \lambda}\mathcal{L}(\boldsymbol \lambda) = \sum_{i=1}^m \lambda_i - \frac{1}{2} \sum_{i=1}^m \sum_{j=1}^m \lambda_i \lambda_j \vec x_i \vec x_j \mathbf x_i^T \mathbf x_j \\ s.t. \qquad \lambda_i \geqslant 0, \forall i\;;\quad \sum_{i=1}^m \lambda_i y_i = 0 \tag{5} $$

以上表达式可以通过二次规划算法解出 $\boldsymbol \lambda$ 后,带回,求出$\mathbf w$ 和 $b$,即可得到模型
$$ f(\mathbf x) = \mathbf w^T\mathbf x + b = \sum_{i=1}^m \lambda_i y_i \mathbf x_i^T \mathbf x + b \tag{6} $$

补充一些关于二次规划算法的相关,(3)式的约束是一个不等式约束,所以我们可以使用KKT条件得到三个条件:
$$ \lambda_i \geqslant0 ;\quad y_i f(\mathbf x_i)-1 \geqslant0; \quad \lambda_i\{ y_i f(\mathbf x_i)-1 \}=0 $$

使用这些条件,可以构建高效算法来解这个方程,比如SMO(Sequential Minimal Optimization)就是其中一个比较著名的。至于SMO是如何做的,考虑到现代很多SVM的Pakage都是直接拿来用,秉承着前人付出了努力造了轮子就不重复造的核心精神,直接调用就好

软间隔

已经说明了如何求得方程,以上的推导形式都是建立在样本数据线性可分的基础上,如果样本数据你中有我我中有你(线性不可分),应该如何处理呢?这里就需要引入软间隔(Soft Margin),意味着,允许支持向量机在一定程度上出错

SoftMargin

由上一节我们得知,约束为: $y_i(\mathbf w^T\vec x_i+b) \geqslant1,\;i = 1,2,\ldots,m$ ,目标是使目标函数可以在一定程度不满足这个约束条件,我们引入常数 $C$ 和 损失函数 $\ell_{0/1}(z)$ 为0/1损失函数,当z小于0函数值为1,否则函数值为0
$$ \operatorname*{min}_{\mathbf w,b} \frac{1}{2}\lVert w \lVert^2 + C \sum_{i=1}^m \ell_{0/1}(y_i(\mathbf w^T\vec x_i+b) -1) \tag {7} $$

对于(7)式来说 $C \geqslant 0$ 是个常数,当C无穷大时,迫使所有样本均满足约束;当C取有限值时,允许一些样本不满足约束

但 $\ell_{0/1}(z)$ 损失函数非凸、非连续,数学性质不好,不易直接求解,我们用其他一些函数来代替它,叫做替代损失函数(surrogate loss)
$$ \begin{align} & \text{hinge损失:} \ell_{hinge}(z) = max(0,1-z)\\ & \text{指数损失:} \ell_{exp}(z) = e^{-z}\\ & \text{对数损失:} \ell_{log}(z) = log(1+e^{-z})\\ \end{align} $$
三种常见损失函数如下图

损失函数

为了书写方便,我们引入松弛变量(slack variables): $\xi_i \geqslant 0$,可将(7)式重写为
$$ \operatorname*{min}_{\mathbf w,b,\xi_i} \frac{1}{2}\lVert w \lVert^2 + C \sum_{i=1}^m \xi_i \\ s.t. \quad y_i(\mathbf w^T\vec x_i+b) \geqslant 1 - \xi_i ;\; \xi_i \geqslant 0,\; i = 1,2,\ldots,m \tag{8} $$
(8)式就是常见的软间隔支持向量机,其中,每一个样本都有一个对应的松弛变量,用以表征该样本不满足约束的程度,求解的方法同理硬间隔支持向量机

支持向量机扩展

核方法

以上我们求解的支持向量机都是在线性情况下的,那么非线性情况下如何处理?这里就引入:核方法

对于这样的问题,可以将样本从原始空间映射到一个更高为的特征空间,使得样本在这个特征空间内线性可分直观可视化解释

为了完成这个目的,令 $\phi(\mathbf x)$ 表示将 $\mathbf x$ 映射后的特征向量,于是,在特征空间划分超平面所对应的模型可表示为:
$$ f(\mathbf x) = \mathbf w^T \phi(\mathbf x) + b $$

同理上文中引入拉格朗日乘子,求解整个方程后可得
$$ \begin{align} f(\mathbf x) &= \mathbf w^T \phi(\mathbf x) + b \\ &= \sum_{i=1}^m \lambda_i y_i \phi(\mathbf x_i)^T \phi(\mathbf x) + b \\ &= \sum_{i=1}^m \lambda_i y_i k(\mathbf x,\mathbf x_i)+ b \end{align} $$

这里的函数 $k(\cdot,\cdot)$ 就是核函数(kernel function),常见的核函数见下表

名称 表达式 参数
线性核 $\boldsymbol x_i^T \boldsymbol x_j$
多项式核 $(\boldsymbol x_i^T \boldsymbol x_j)^d$ $d \geqslant 1$ 多项式次数
高斯核 $exp(-\frac{\lVert\boldsymbol x_i - \boldsymbol x_j \lVert^2}{2\sigma^2})$ $\sigma>0$ 高斯核带宽
拉普拉斯核 $exp(-\frac{\lVert\boldsymbol x_i - \boldsymbol x_j \lVert^2}{\sigma})$ $\sigma>0$
Sigmoid核 $tanh(\beta \boldsymbol x_i^T\boldsymbol x_j + \theta)$ $\beta>0$ $\theta>0$

也可以通过函数组合得到这些值

多类问题

多类问题可以使用两两做支持向量机,再由所有的支持向量机投票选出这个类别的归属,被称为one-versus-one approace

Reference
知乎各类回答
Wiki百科
PRML
周志华-机器学习