本文源自微信公众号【Python编程和深度学习】原文链接:[机器学习系列(五)支持向量机(SVM)](https://mp.weixin.qq.com/s?__biz=MzUxNTY1MjMxNQ==&mid=2247484512&idx=1&sn=b76a844c41ede0f9e380245e8522eee1&chksm=f9b22bd4cec5a2c2fbc2923d0c84ad679fadd531d1355785eb1aa98f3bb71037eb2bea68e0d2&token=826655880&lang=zh_CN#rd),欢迎扫码关注鸭! ![扫它!扫它!扫它](http://cookdata.cn/media/bbs/images/公众号_1602413881117_5d14.jpg =200x200) 支持向量机(SVM)是一种有监督的机器学习算法,主要用于分类任务, 给定训练样本集D = ((x1,y1),(x2,y2),…,(xn,yn)),yi的取值为{-1,1},当yi为1时就是正类,为-1时就是负类,线性分类器基于训练样本D在二维空间中找到一个超平面来对样本进行分类。 # 目录 [一、线性可分问题](#1)<br> [1.1、最大间隔超平面](#1.1)<br> [1.2、SVM最优化问题](#1.2)<br> [1.3、拉格朗日目标函数](#1.3)<br> [1.4、KKT条件](#1.4)<br> [1.5、序列最小优化算法(SMO](#1.5)<br> <div id="1"></div> ##一、数据类型 D0和D1是n维欧氏空间中的两个点集。如果存在n维向量*w*和实数b,使得所有属于D0的点xi都有$w x_{i}+b>0$,而对于所有属于 D1的点 xj则有$w x_{j}+b<0$,则我们称D0和D1线性可分。在二维空间中就是一条直线把两类点完全分开。 <div id="1.1"></div> ### 1.1 最大间隔超平面 我们将特征空间扩展到高维空间,就需要一个超平面来将两种数据进行分开,这样的超平面往往很多,我们需要选择最佳的分类超平面,使得超平面两侧最近的样本到超平面的距离最大,称为最大间隔超平面,距离超平面最近的点称为支持向量。图中红实圈和红空圈都是支持向量,中间的实线为最佳超平面。 ![](http://cookdata.cn/media/bbs/images/1_1607953341446_5d14.jpg) <div id="1.2"></div> ### 1.2 SVM最优化问题 这里间隔超平面用下面式子代表: $$ w^{T} x+b=0 $$ 在二维空间中,点到直线的标准距离公式为: $$ \frac{|A x+B y+C|}{\sqrt{A^{2}+B^{2}}} $$ 在n维空间中点x到间隔超平面的距离为: $$ \frac{\left|w^{T} x+b\right|}{\|w\|} $$ 其中$\|w\|=\sqrt{w_{1}^{2}+\ldots w_{n}^{2}}$,我们假设支持向量到最佳超平面的距离为d,那么可以知道其他点到最佳超平面的距离都大于d,则有 $$ \left\{\begin{array}{l} \frac{w^{T} x+b}{\|w\|} \geq d \quad y=1 \\ \frac{w^{T} x+b}{\|w\|} \leq-d \quad y=-1 \end{array}\right. $$ 变换为 $$ \left\{\begin{array}{l} \frac{w^{T} x+b}{\|w\| d} \geq 1 \quad y=1 \\ \frac{w^{T} x+b}{\|w\| d} \leq-1 \quad y=-1 \end{array}\right. $$ 由于$\|w\| d$是正数,为了方便计算给它置1, $$ \left\{\begin{array}{l} w^{T} x+b \geq 1 \quad y=1 \\ w^{T} x+b \leq-1 \quad y=-1 \end{array}\right. $$ 简写为: $$ y\left(w^{T} x+b\right) \geq 1 $$ 前面介绍过支持向量到超平面的距离为 $$ d=\frac{\left|w^{T} x+b\right|}{\|w\|} $$ 替换为 $$ d=\frac{y\left|w^{T} x+b\right|}{\|w\|} $$ 我们定margin为2个d,则目标变为最大化两侧支持向量到最佳超平面的距离, $$ \max 2 * \frac{y\left(w^{T} x+b\right)}{\|w\|} $$ 由于支持向量到最大超平面的距离为1,因此 $$ \max \frac2{\|w\|} $$ 将求最大变为求最小 $$ \min \frac{1}{2}\|w\| $$ 这样,最终的支持向量机最优化问题为: $$ \left\{\begin{array}{l} \min \frac{1}{2}\|w\|\\ \begin{array}{ll}\text { s. t. } \quad y_{i} & \left(w^{T} x_{i}+b\right) \geq 1\end{array} \end{array}\right. $$ <div id="1.3"></div> ### 1.3 拉格朗日目标函数 这是一个含有不等式约束的凸二次规划问题,可以对其使用拉格朗日乘子法得到其对偶问题(dual problem)。 将有约束的原始目标函数转换为无约束的拉格朗日目标函数, $$ L(\boldsymbol{w}, b, \boldsymbol{\alpha})=\frac{1}{2}\|\boldsymbol{w}\|^{2}-\sum_{i=1}^{N} \alpha_{i}\left(y_{i}\left(\boldsymbol{w} \cdot \boldsymbol{x}_{i}+b\right)-1\right) $$ 其中,alpha为拉格朗日乘子,且大于等于0,得到 $$ \theta(\boldsymbol{w})=\max _{\alpha_{i} \geq 0} L(\boldsymbol{w}, b, \boldsymbol{\alpha}) $$ 当样本点不满足约束条件时,即在可行解区域外: $$ y_{i}\left(\boldsymbol{w} \cdot \boldsymbol{x}_{i}+b\right)<1 $$ 此时,将 alpha设置为无穷大,则$\theta(\boldsymbol{w})$也为无穷大。 当满本点满足约束条件时,即在可行解区域内: $$ y_{i}\left(\boldsymbol{w} \cdot \boldsymbol{x}_{i}+b\right)\geq 1 $$ 此时,$\theta(\boldsymbol{w})$为原函数本身。于是,将两种情况合并起来就可以得到我们新的目标函数 $$ \theta(\boldsymbol{w})=\left\{\begin{array}{ll} \frac{1}{2}\|\boldsymbol{w}\|^{2}, \boldsymbol{x} \in \text { 可行区域 } \\ +\infty & , \boldsymbol{x} \in \text { 不可行区域 } \end{array}\right. $$ 于是原约束问题就等价于 $$ \min _{\boldsymbol{w}, b} \theta(\boldsymbol{w})=\min _{\boldsymbol{w}, b} \max _{\alpha_{i} \geq 0} L(\boldsymbol{w}, b, \boldsymbol{\alpha})=p^{*} $$ 该式先求最大值,再求最小值,使用拉格朗日函数对偶性,将最小和最大的位置交换一下,这样就变成了 $$ \max _{\alpha_{i} \geq 0} \min _{\boldsymbol{w}, b} L(\boldsymbol{w}, b, \boldsymbol{\alpha})=d^{*} $$ <div id="1.4"></div> ### 1.4 KKT条件 要有![](http://cookdata.cn/media/bbs/images/微信截图_20201220173241_1608456724807_5d14.jpg)需要满足两个条件: 1)优化问题是凸优化问题 2)满足KKT条件 本问题明显是凸优化问题,KKT条件是 $$ \left\{\begin{array}{l} \alpha_{i} \geq 0 \\ y_{i}\left(\boldsymbol{w}_{i} \cdot \boldsymbol{x}_{i}+b\right)-1 \geq 0 \\ \alpha_{i}\left(y_{i}\left(\boldsymbol{w}_{i} \cdot \boldsymbol{x}_{i}+b\right)-1\right)=0 \end{array}\right. $$ 为了得到求解对偶问题的具体形式,令$L(\boldsymbol{w}, b, \boldsymbol{\alpha})$对 w 和 b的偏导为0,可得 $$ \boldsymbol{w}=\sum_{i=1}^{N} \alpha_{i} y_{i} \boldsymbol{x}_{i} $$ $$ \sum_{i=1}^{N} \alpha_{i} y_{i}=0 $$ 将以上两个等式带入拉格朗日目标函数,消去 w和 b, 得 $$ \begin{array}{l} L(\boldsymbol{w}, b, \boldsymbol{\alpha})=\frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_{i} \alpha_{j} y_{i} y_{j}\left(\boldsymbol{x}_{i} \cdot \boldsymbol{x}_{j}\right)-\sum_{i=1}^{N} \alpha_{i} y_{i}\left(\left(\sum_{j=1}^{N} \alpha_{j} y_{j} \boldsymbol{x}_{j}\right) \cdot \boldsymbol{x}_{i}+b\right)+\sum_{i=1}^{N} \alpha_{i} \\ =-\frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_{i} \alpha_{j} y_{i} y_{j}\left(\boldsymbol{x}_{i} \cdot \boldsymbol{x}_{j}\right)+\sum_{i=1}^{N} \alpha_{i} \end{array} $$ 即 $$ \min _{w, b} L(\boldsymbol{w}, b, \boldsymbol{\alpha})=-\frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_{i} \alpha_{j} y_{i} y_{j}\left(\boldsymbol{x}_{i} \cdot \boldsymbol{x}_{j}\right)+\sum_{i=1}^{N} \alpha_{i} $$ 求$\min _{\boldsymbol{w}, b} L(\boldsymbol{w}, b, \boldsymbol{\alpha})$对alpha的极大,是对偶问题 $$ \begin{array}{l} \max _{\alpha}-\frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_{i} \alpha_{j} y_{i} y_{j}\left(\boldsymbol{x}_{i} \cdot \boldsymbol{x}_{j}\right)+\sum_{i=1}^{N} \alpha_{i} \\ \text { s.t. } \quad \sum_{i=1}^{N} \alpha_{i} y_{i}=0 \\ \quad \alpha_{i} \geq 0, i=1,2, \ldots, N \end{array} $$ 为了计算方便给式子取负号,转换为求解极小, $$ \begin{array}{l} \min _{\alpha} \frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_{i} \alpha_{j} y_{i} y_{j}\left(\boldsymbol{x}_{i} \cdot \boldsymbol{x}_{j}\right)-\sum_{i=1}^{N} \alpha_{i} \\ \text {s.t.} \quad \sum_{i=1}^{N} \alpha_{i} y_{i}=0 \\ \alpha_{i} \geq 0, i=1,2, \ldots, N \end{array} $$ <div id="1.5"></div> ### 1.5 序列最小优化算法(SMO) 到现在我们的优化问题需要更高效的优化算法,序列最小优化算法(SMO),我们通过这个优化算法能得到 alpha,再根据 alpha,我们就可以求解出 w和 b ,进而求得我们最初的目的:找到超平面,即”决策平面”。 根据前面的推导,还有下面两个式子成立 $$ \begin{array}{l} \boldsymbol{w}=\sum_{i=1}^{N} \alpha_{i} y_{i} \boldsymbol{x}_{i} \\ \sum_{i=1}^{N} \alpha_{i} y_{i}=0 \end{array} $$ 由此可知在 alpha中,至少存在一个$\alpha_{j}^{*}>0$(反证法可以证明,若全为0,则 w=0,矛盾),对此 j有 ![](http://cookdata.cn/media/bbs/images/微信截图_20201220173454_1608456843593_5d14.jpg) 得到 ![](http://cookdata.cn/media/bbs/images/微信截图_20201220173545_1608456894972_5d14.jpg) 大部分的训练样本都不需要保留,最终模型仅与支持向量有关。