目录html
博客园的渲染有点问题:能够看个人博客效果会更好:https://wangjs-jacky.github.io/2019/11/07/%E8%A5%BF%E7%93%9C%E4%B9%A6%E7%AC%AC%E5%85%AD%E7%AB%A0-SVM/
SVM算法其实不难主要是思路很差整理。本篇博客的资料来源于西瓜书,邹博,白板书笔记三处。具体的理论背景就不作具体介绍了,直接上公式。git
SVM这章的内容主要打算分为三块:github
SVM的目标就是找到一个划分超平面把两类数据划分开来,经过下面这张图能够发现这样的超平面有很是多,可是凭直觉发现粗的那跟线(超平面)划分效果最好。算法
补充:超平面的公式??app
公式描述:函数
公式中的直线方程为\(Ax+By+C=0\),点\(P\)的坐标为\((x_0,y_0)\)。优化
\[ d=\left|\frac{A x_{0}+B y_{0}+C}{\sqrt{A^{2}+B^{2}}}\right| \]spa
根据点到直线的距离,每一类样本中的全部样本点到直线的距离为:.net
\[ margin = r = \frac{\left|w^{T} x_{i}+b\right|}{\|w\|} \]
将上述最小的值(min)做为单侧的 \(margin\)设计
\[ margin = 2 \times \min _{w, b, x_{i}} \frac{\left|w^{T} x_{i}+b\right|}{\|w\|} \]
注1:刚开始学总觉得单侧margin能够取到0,实际上这里漏加了一个条件。设置标签\(y_i\in\{-1,+1\}\)
\[ \left\{ \begin{array}{l} w^Tx_i+b>0\\ w^Tx_i+b<0\\ \end{array} \right. \begin{array}{c} y_i=+1\\ y_i=-1\\ \end{array} \]
加入了这个条件后,保证了分类必定正确。注2:这里的\(y\)的标签必定为{+1,-1} ?
答:否,y只是一个标签而已,能够为其他值,只须要知足上式的分类准则而已。可是这里取1,确实为了计算方便,见下面如何去掉绝对值的过程,就能体会到y为啥取正负1
根据注1能够推导出,条件知足于\(y_i(w^Tx_i+b)\ge0\),\(y_i\)与\((w^Tx_i+b)\)同号
\[ margin = 2 \times \min _{w, b, x_{i}} \frac{\left|w^{T} x_{i}+b\right|}{\|w\|} = 2 \times \min _{w, b, x_{i}} \frac{y_i(w^Tx_i+b)}{\|w\|} \]
\[ \begin{array}{l}{\max _{w, b} \frac{1}{\|w\|} 2 \times \min _{x_{i}, y_{i}} y_{i}\left(w^{T} x_{i}+b\right)} \\ {\text { s.t. }} \\ {y_{i}\left(w^{T} x_{i}+b\right) \geqslant 0, i=1, \ldots, m}\end{array} \]
\[ y_i(w^Tx_i+b)>0 \Rightarrow \exists \gamma>0 ,\ s.t.\ min\ y_i(w^Tx_i+b)=\gamma \]
令\(\gamma = 1:\)
\[ s.t.\ min\ y_i(w^Tx_i+b)=\gamma\\ \Rightarrow y_i(w^Tx_i+b) \ge 1,i=1,\dots,N \]
上述能够这样作的缘由:
综上上述条件能够变为:
\[ \begin{array}{l}{\max _{w, b} \frac{2}{\|w\|}} \\ {\text { s.t. } y_{i}\left(w^{T} x_{i}+b\right) \geq 1, \quad i=1,2, \ldots, m}\end{array} \]
进一步能够简化为:
\[ \begin{array}{l}{\min _{w, b} \frac{1}{2}\|w\|^{2}} \\ {\text {s.t.} y_{i}\left(w^{T} x_{i}+b\right) \geq 1, \quad i=1,2, \dots, m}\end{array} \]
凸二次规划
问题
当目标函数和约束条件都为变量的线性函数
-- 线性规划问题
当目标函数为:变量的二次函数
;当约束条件为:变量的线性函数
-- 二次规划问题
当目标函数和约束条件都为非线性函数
-- 非线性规划问题
\[ L(w, b, \alpha)=\frac{1}{2}\|w\|^{2}+\sum_{i=1}^{m} \alpha^{i}\left(1-y_{i}\left(w^{T} x_{i}+b\right)\right)\\ s.t. \alpha_i \ge 0 \]
根据两个补充知识点1、二(本节最后) 可得对偶条件:
\[ \min _{w, b} \max_{\alpha}L(w,b,\alpha) \Leftrightarrow \max_{\alpha}\min _{w, b}L(w,b,\alpha) \\ s.t. \alpha_i \ge 0 \]
⭐插入KKT条件:
\[ L(x, \alpha, \beta)=f(x)+\sum_{i=1}^{m} \alpha_{i} h_{i}(x)+\sum_{j=1}^{n} \beta_{i} g_{i}(x) \]
\[ \begin{aligned} \nabla_{x} L(x, \alpha, \beta) &=0 \\ \beta_{j} g_{j}(x) &=0, j=1,2, \ldots, n \\ h_{i}(x) &=0, i=1,2, \ldots, m \\ g_{j}(x) & \leq 0, j=1,2, \ldots, n \\ \beta_{j} & \geq 0, j=1,2, \ldots, n \end{aligned} \]
介绍KKT条件比较好的博客:http://www.javashuo.com/article/p-kchfpcrr-ng.html
根据\(KKT\)第一个结论可有:
\[ \min _{w,b}L\left( w,b,\alpha \right) \ \rightarrow \ \nabla _w/\nabla _bL\left( w,b,\lambda \right) =0 \]
求导后可得:
\[ \begin{aligned} \hat w = & \sum_{i=1}^n \alpha_iy_ix_i\\ 0 = & \sum_{i=1}^n \alpha_iy_i \end{aligned} \]
将\(\hat w\)代入拉格朗日条件:
\[ \begin{aligned} L\left( w,b,x \right) = & \frac{1}{2}\lVert w \rVert ^2+\sum_{i=1}^n{\alpha ^i\left( 1-y_i\left( w^Tx_i+b \right) \right)}\\ = & \frac{1}{2}\sum_{i,j=1}^n{\alpha _i}\alpha _jy_iy_jx_{i}^{T}x_j+\sum_{i=1}^n{\alpha ^i-\sum_{i=1}^n{\alpha ^iy_i\left( \sum_{i=1}^n{\alpha _iy_ix_{i}^{T}x_j} \right) -\sum_{i=1}^n{\alpha ^iy_ib}}}\\ =&-\frac{1}{2}\sum_{i,j=1}^n{\alpha _i}\alpha _jy_iy_jx_{i}^{T}x_j+\sum_{i=1}^n{\alpha ^i} \end{aligned} \]
求\(\hat b\) :【根据SVM最大间隔分界线可得】
\[ y_i(w^Tx_i+b)-1 =0\\ y_iy_i(w^Tx_i+b)-y_i=0\\ \hat b = y_i - w^Tx_i \]
其实这里省略了不少能内容,为啥子b是在最大间隔分界上求到的b,由于根据KKT条件,可知只有在分界线上拉格朗日乘子\(\alpha _i\)才大于0,分解线外的样本对建模无心义,因此\(\hat{b}\)必知足与等式\(y_i(w^Tx_i+b)-1 =0\)在正则化那章有过更为详细的分析,见下。
\[ \begin{aligned} \hat w ={} & \sum_{i=1}^n \alpha_iy_ix_i\\ \hat b ={} & y_i - w^Tx_i \end{aligned} \]
\[ L\left( w,b,x \right)=-\frac{1}{2}\sum_{i,j=1}^n{\alpha _i}\alpha _jy_iy_jx_{i}^{T}x_j+\sum_{i=1}^n{\alpha ^i} \\ s.t. \sum_{i=1}^n \alpha_iy_i=0, \alpha_i \ge 0,i=1,2,\dots,n \]
最后一步:经过\(SMO\)算法求出 \(\alpha_i\)【太难看不懂】
最终可求解出模型\(f(x)\):
\[ \begin{aligned} f(\boldsymbol{x}) &=\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}+b \\ &=\sum_{i=1}^{m} \alpha_{i} y_{i} \boldsymbol{x}_{i}^{\mathrm{T}} \boldsymbol{x}+b \end{aligned} \]
补充1:KKT(互补松弛条件)【slackness complementory】
这是不等式的条件约束问题化为无条件约束问题。
当\((1-y_{i}\left(w^{T} x_{i}+b\right)\le0\)时,则\(min\ \alpha^i(1-y_{i}\left(w^{T} x_{i}+b\right)=0\) \(\Rightarrow minL=\frac{1}{2}\|w\|^2\)
当\((1-y_{i}\left(w^{T} x_{i}+b\right)>0\)时,则\(min\ \alpha^i(1-y_{i}\left(w^{T} x_{i}+b\right)\rightarrow+\infty\) \(\Rightarrow\) 求最小值无心义。
故通过上述分析,能够得若要知足上述,自然知足1这个条件。
补充2:对偶问题【极大极小值互换】
这里若要讲清楚仍是比较有困难的。对偶关系分为两类,强对偶关系以及弱对偶关系。
弱对偶关系【简单记忆:鸡头凤尾】
\[ min \ max\ L(w,b,\alpha) \ge max \ min \ L(w,b,\alpha) \]
强对偶关系:若等号存在,则为强对偶。【\(SVM\) 天生知足强对偶条件】
故这里极小极大等价于极大极小。
容许分类存在一点点的错误
然而,\(l_{0/1}\)非凸、非连续、数学性质很差,不容易直接求解,因而用其他的函数来替代\(l_{0/1}\),称为“替代损失”(surrogate loss)。替代损失函数具备较好的额数学性质,一般凸的连续函数且是\(l_{0/1}\)的上界。西瓜书提供了三种经常使用的替代损失函数:
\(Loss:\)hinge损失函数(见上图)
根据距离的远近设置损失函数。
\[ \left\{ \begin{array}{l} y_i(w^Tx_i+b)\ge1\\ y_i(w^Tx_i+b) <1\\ \end{array} \right. \begin{array}{l} Loss =0\\ Loss =1-y_i(w^Tx_i+b)\\ \end{array} \]
能够发现上面的公式,就是\(hinge\)损失嘛!
\[ Loss = max \{0,1-y_i(w^Tx_i+b\} \]
若采用的是hinge损失:
\[ min \frac{1}{2}w^Tw+C\cdot loss = min \frac{1}{2}w^Tw+ C \cdot max \{0,1-y_i(w^Tx_i+b\} \]
通常咱们不用上述合页损失的公式。
令\(\xi_i=1-y_i(w^Tx_i+b)\),故可有\(\xi_i\ge 0\)
最终能够推出:
\[ \Rightarrow min \frac{1}{2}w^Tw+ C\sum_{i=1}^n \xi(i)\\ s.t.y_i(w^Tx_i+b)\ge1-\xi(i),i=1,2,\dots,n \\ s.t.\ \xi_i \ge 0 \]
拉格朗日乘子法:
\[ \begin{aligned} L(\boldsymbol{w}, b, \boldsymbol{\alpha}, \boldsymbol{\xi}, \boldsymbol{\mu})=& \frac{1}{2}\|\boldsymbol{w}\|^{2}+C \sum_{i=1}^{m} \xi_{i} \\ &+\sum_{i=1}^{m} \alpha_{i}\left(1-\xi_{i}-y_{i}\left(\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b\right)\right)-\sum_{i=1}^{m} \mu_{i} \xi_{i} \end{aligned} \]
其中,\(\alpha_i\ge0,\mu_i\ge0\)是拉格朗日乘子。
直接求偏导:
\[ \begin{aligned} \boldsymbol{w} &=\sum_{i=1}^{m} \alpha_{i} y_{i} \boldsymbol{x}_{i} \\ 0 &=\sum_{i=1}^{m} \alpha_{i} y_{i} \\ C &=\alpha_{i}+\mu_{i} \end{aligned} \]
得对偶问题(dual problem):
\[ \begin{array}{cl}{\max _{\alpha}} & {\sum_{i=1}^{m} \alpha_{i}-\frac{1}{2} \sum_{i=1}^{m} \sum_{j=1}^{m} \alpha_{i} \alpha_{j} y_{i} y_{j} \boldsymbol{x}_{i}^{\mathrm{T}} \boldsymbol{x}_{j}} \\ {\text { s.t. }} & {\sum_{i=1}^{m} \alpha_{i} y_{i}=0} \\ {} & {0 \leqslant \alpha_{i} \leqslant C, \quad i=1,2, \ldots, m}\end{array} \]
与硬间隔的区别是对偶变量的约束不一样:前者\(0 \leqslant \alpha_{i} \leqslant C\),后者是\(0 \leqslant \alpha_{i}\)
KKT条件:
\[ \left\{\begin{array}{l}{C\geqslant\alpha_{i} \geqslant 0, \quad \mu_{i} \geqslant 0} \\ {y_{i} f\left(x_{i}\right)-1+\xi_{i} \geqslant 0} \\ {\alpha_{i}\left(y_{i} f\left(x_{i}\right)-1+\xi_{i}\right)=0} \\ {\xi_{i} \geqslant 0, \mu_{i} \xi_{i}=0}\end{array}\right. \]
根据以前已经获得的公式:
\[ \begin{aligned} f(\boldsymbol{x}) &=\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}+b \\ &=\sum_{i=1}^{m} \alpha_{i} y_{i} \boldsymbol{x}_{i}^{\mathrm{T}} \boldsymbol{x}+b \end{aligned} \]
模型取决于\(w\),进一步取决于\(\alpha_i\)
能够通过如下四种分析:
当\(\alpha_i>0\)时,\(y_{i} f\left(x_{i}\right)-1+\xi_{i}\)必为零,说明边界上的权重不为零,即模型建模主要却决与支持向量。
当\(\alpha_i<C\)时,\(\mu_i\)必大于零【根据公式:\(C=\alpha_i+\mu_i\)】,进一步必有\(\xi_i=0\)。即样本就在最大分类边界上。
总结对于支持向量的结论:
如今的问题就是,假设C=0,这种margin扩展,就是在以前的边界上平行远离吗?
若使用对率损失函数来替代0/1损失,几乎能够获得对率回归模型(Logisitc回归)
其优势:
1. 输出具备天然几率意义。
2. 可用于处理多分类任务
而SVM的输出不具有几率意义且多分类任务须要推广。对率损失是光滑的单调递减函数,SVM的解要求具备稀疏性,hinge有一块平坦的区域能够知足这个条件。而若须要用对率回归则须要更多的训练样本,开销大【这部分理解的不是很好,可是是西瓜书的内容,就记在这把!】
【我对这句话的理解】:
对hinge损失求导,必定是一个常数。
\[ \begin{aligned} L(\boldsymbol{w}, b, \boldsymbol{\alpha}, \boldsymbol{\xi}, \boldsymbol{\mu})=& \frac{1}{2}\|\boldsymbol{w}\|^{2}+C \sum_{i=1}^{m} \xi_{i} \\ &+\sum_{i=1}^{m} \alpha_{i}\left(1-\xi_{i}-y_{i}\left(\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b\right)\right)-\sum_{i=1}^{m} \mu_{i} \xi_{i} \end{aligned} \]
\[ \nabla _{\xi \left( i \right)}L=C-\alpha _i-\mu _i=0 \]
将相近的点映射到一个空间,将远的点分到另外一个空间
核函数的诀窍在于解决了映射后高维空间中样本距离\(\left\|\Phi\left(x_{i}\right)-\Phi\left(x_{j}\right)\right\|\)的计算,但又不显式地展现出映射函数\(\Phi(\cdot)\)。
一般表示为:
\[ \kappa\left(x_{1}, x_{2}\right)=<\Phi\left(x_{1}\right), \Phi\left(x_{2}\right)> \]
从而有:
\[ \begin{aligned}\left\|\Phi\left(x_{i}\right)-\Phi\left(x_{j}\right)\right\|^{2} &=<\Phi\left(x_{1}\right)-\Phi\left(x_{2}\right), \Phi\left(x_{1}\right)-\Phi\left(x_{2}\right)>\\ &=<\Phi\left(x_{1}\right), \Phi\left(x_{1}\right)>-2<\Phi\left(x_{1}\right), \Phi\left(x_{2}\right)>+<\Phi\left(x_{2}\right), \Phi\left(x_{2}\right)>\\ &=\kappa\left(x_{1}, x_{1}\right)-2 \kappa\left(x_{1}, x_{2}\right)+\kappa\left(x_{2}, x_{2}\right) \end{aligned} \]
取\(\kappa(x, z)=<x, z>^{2}\),这里\(x=(x_1,x_2)\),\(z=(z_1,z_2)^T \in R^2\)故有;
\[ \begin{aligned} \kappa(x, z) &=<x, z>^{2} \\ &=\left(x_{1} z_{1}+x_{2} z_{2}\right)^{2} \\ &=\left(x_{1} z_{1}\right)^{2}+2 x_{1} x_{2} z_{1} z_{2}+\left(x_{2} z_{2}\right)^{2} \end{aligned} \]
取\(\Phi(x)=\left(x_{1}^{2}, x_{1} x_{2}, x_{2}^{2}\right)\).则有成\(\kappa(x, z)=<\Phi(x), \Phi(z)>\)成立。也就是说此时映射函数将二维特征空间\(\left(\begin{array}{l}{x_{1}} \\ {x_{2}}\end{array}\right)\)映射成了三维空间\(\left(\begin{array}{l}{x_{1}^{2}} \\ {x_{1} x_{2}} \\ {x_{2}^{2}}\end{array}\right)\) \(\Phi: R^{2} \rightarrow R^{3}\)。
\[ \kappa(x, z)=\exp \left(-\frac{\|x-z\|^{2}}{2 \sigma^{2}}\right) \]
指数泰勒展开:
\[ e^{x}=1+\frac{x}{1 !}+\frac{x^{2}}{2 !}+\frac{x^{3}}{3 !}+\ldots=\sum_{n=0}^{\infty} \frac{x^{n}}{n !} \]
根据泰勒级数,展开高斯核:
\[ \begin{aligned} \kappa(x, z) &=\exp \left(-\frac{\|x-z\|^{2}}{2 \sigma^{2}}\right) \\ &=\exp \left[-\frac{1}{2 \sigma^{2}}<x-z, x-z>\right] \\ &=\exp \left[-\frac{1}{2 \sigma^{2}}\left(\|x\|^{2}+\|z\|^{2}-2 x^{T} z\right)\right] \\ &=\exp \left(\gamma\|x\|^{2}\right) * \exp \left(\gamma\|z\|^{2}\right) * \exp \left(-2 \gamma x^{T} z\right), \gamma=-\frac{1}{2 \sigma^{2}} \end{aligned} \]
其中指数部分根据泰勒展开:
\[ \begin{aligned} \exp \left(\gamma\|x\|^{2}\right) &=\sum_{n=0}^{\infty} \frac{\left(\gamma\|x\|^{2}\right)^{n}}{n !} \\ &=\sum_{n=0}^{\infty} \frac{\gamma^{n\left(x_{1}^{2}+x_{2}^{2}+\ldots x_{k}^{2}\right)^{n}}}{n !}, x=\left(x_{1}, x_{2} \cdots x_{k}\right)^{T} \end{aligned} \]
K 是有限数,指数能够映射为无限维空间。
也就是说,\(\exp \left(\gamma\|x\|^{2}\right)\)含有了无穷多项的多项式,对应的映射函数\(\Phi(\cdot)\)将k维空间映射成了无限维空间,即::\(\Phi: R^{k} \rightarrow R^{\infty}\)。
区分:\(\gamma\)
\[ \gamma=-\frac{1}{2 \sigma^{2}} \]
\[ \sigma \rightarrow 0,-\frac{\|x-z\|^{2}}{2 \sigma^{2}} \rightarrow-\infty, \kappa(x, z) \rightarrow 0 \]
\[ |\Phi(x)-\Phi(z)|^{2}=\kappa(x, x)-2 \kappa(x, z)+\kappa(z, z)=2-2 \kappa(x, z)=2 \]
两个相同的点高斯核为1,不一样点的高斯核为0,推出不一样的点映射后距离都为()故不存在聚类,自成一类。
\[ \sigma \rightarrow \infty,-\frac{\|x-z\|^{2}}{2 \sigma^{2}} \rightarrow 0, \kappa(x, z) \rightarrow 1 \]
\[ |\Phi(x)-\Phi(z)|^{2}=\kappa(x, x)-2 \kappa(x, z)+\kappa(z, z)=2-2 \kappa(x, z)=0 \]
不一样点的高斯核为1,推出:不一样点映射后得距离都为0,故聚类为一点。
综上: 参数\(\sigma\)越小,分的类别会越细,也就是说越容易致使过拟合;参数\(\sigma\)越大,分的类别会越粗,致使没法将数据区分开来。