已经是大二新学期的第六周周末了,一番瞎折腾之后,还是想抽出一部分精力来搞一搞机器学习的理论部分,趁年轻,万一哪天开悟了。。。好了,除了废话不多了,博客以后正常更新噢,不光是机器学习的,还有其他方面的系列学习笔记,希望能有所收获( ̄︶ ̄)↗
接着之前的两篇博客:
现在来说说软间隔和正则化。
软间隔
软间隔要解决的问题
SVM是解决线性可分问题的,如果线性不可分,那就引入核函数,使其在更高的维度上可分,虽说一定存在一个超平面使其可分(不出任何差错,这即是之前所说的“硬间隔”),但容易发生过拟合的风险,训练效果反而不好。所以,缓解的办法就是允许支持向量在一些样本上出错,这便引入了“软间隔”。
如上图,“软间隔”允许某些样本不满足约束:
$$
y_{i} (\boldsymbol{\omega^{T}}\boldsymbol{x}+b ) >=1\;(2)
$$
当然,在最大化间隔的同时,也需要让不满足约束的样本尽可能的少,于是,优化目标可以些为:
$$
min_{\boldsymbol{\omega},b}\frac{1}{2}||\boldsymbol{\omega}||^{2} + C\sum_{i = 1}^{m}l_{0/1}(y_{i}(\omega^{T}x_{i}+b)-1)\;(1)
$$
其中,$C$是一个常数,$l_{0/1}$是一个“0/1损失函数”
$$
l_{0/1}(z) = \left\{\begin{matrix}1 &if \;z<0 \\ 0 & otherwise \end{matrix}\right.
$$
$C>0$为惩罚参数,和逻辑回归等其他算法模型中的正则化参数一样,都是用于调节分类误差和模型复杂度代价的权重,使模型在保证分类误差最小的情况得到最大间隔超平面。$C$越大,对分类错误的惩罚越大(因为(1)式要求的是最小值,而$C$的增大产生了阻碍),C为无穷大时,式(1)迫使所有样本均满足约束条件(2)。$C$取有限值时,允许一些样本不满足约束。
然而,一般不使用$l_{0/1}$作为损失函数,因为它非凸,不连续,通常采用下面的函数来代替它,称为“替代损失”(surrogate loss):
hinge损失:$l_{hinge}(z) = max(0,1-z)$
指数损失(exponential loss):$l_{exp}(z) = exp(-z)$
对率损失(logistic loss):$l_{log}(z) = log(1+exp(-z))$
若采用hinge损失,则式(1)变成:
$$
min_{\boldsymbol{\omega},b}\frac{1}{2}||\boldsymbol{\omega}||^{2} + C\sum_{i = 1}^{m}max(0,1-y_{i}(\omega^{T}x_{i}+b)).\;(3)
$$
松弛变量
SVM对训练集里面的每个样本$(x_i,y_i)$引入了一个松弛变量$\xi_i \geq 0$,使函数间隔加上松弛变量大于等于1,也就是说:
$$
y_i(\omega\bullet x_i +b) \geq 1- \xi_i
$$
对比硬间隔最大化,可以看到我们对样本到超平面的函数距离的要求放松了,之前是一定要大于等于1,现在只需要加上一个大于等于0的松弛变量能大于等于1就可以了。当然,松弛变量不能白加,这是有成本的,每一个松弛变量$\xi_i$, 对应了一个代价$\xi_i$,这个就得到了我们的软间隔最大化的SVM学习条件,也就是把(3)重写为:
$$
\underset{\omega,b,\xi_i}{min}\;\; \frac{1}{2}||\omega||_2^2 +C\sum\limits_{i=1}^{m}\xi_i
$$
$$
s.t. \;\; y_i(\omega^Tx_i + b) \geq 1 - \xi_i \;\;(i =1,2,...m)
$$
$$
\xi_i \geq 0 \;\;(i =1,2,...m)
$$
这就是“软间隔支持向量机”
注意:
并非所有的样本点都有一个松弛变量与其对应。实际上只有“离群点”才有,或者也可以这么看,所有没离群的点松弛变量都等于0(对负类来说,离群点就是在前面图中,跑到H2右侧的那些负样本点,对正类来说,就是跑到H1左侧的那些正样本点)。
松弛变量的值实际上标示出了对应的点到底离群有多远,值越大,点就越远。
惩罚因子C决定了你有多重视离群点带来的损失,显然当所有离群点的松弛变量的和一定时,你定的C越大,对目标函数的损失也越大,此时就暗示着你非常不愿意放弃这些离群点,最极端的情况是你把C定为无限大,这样只要稍有一个点离群,目标函数的值马上变成无限大,马上让问题变成无解,这就退化成了硬间隔问题。
惩罚因子C不是一个变量,整个优化问题在解的时候,C是一个你必须事先指定的值,指定这个值以后,解一下,得到一个分类器,然后用测试数据看看结果怎么样,如果不够好,换一个C的值,再解一次优化问题,得到另一个分类器,再看看效果,如此就是一个参数寻优的过程,但这和优化问题本身决不是一回事,优化问题在解的过程中,C一直是定值,要记住。
尽管加了松弛变量这么一说,但这个优化问题仍然是一个优化问题(汗,这不废话么),解它的过程比起原始的硬间隔问题来说,没有任何更加特殊的地方。
引入拉格朗日乘子
那么,问题就和之前的一样了,通过引入拉格朗日乘子,来将有不等式约束条件的转化为无约束的:
$$
L(\omega,b,\xi,\alpha,\mu) = \frac{1}{2}||\omega||_2^2 +C\sum\limits_{i=1}^{m}\xi_i - \sum\limits_{i=1}^{m}\alpha_i[y_i(\omega^Tx_i + b) - 1 + \xi_i] - \sum\limits_{i=1}^{m}\mu_i\xi_i
$$
其中,$\mu_i \geq 0, \alpha_i \geq 0$是拉格朗日乘子。
令$L$对$\omega, b, \xi$的偏导为零可得:
$$
\frac{\partial L}{\partial \omega} = 0 \;\Rightarrow \omega = \sum\limits_{i=1}^{m}\alpha_iy_ix_i
$$
$$
\frac{\partial L}{\partial b} = 0 \;\Rightarrow \sum\limits_{i=1}^{m}\alpha_iy_i = 0
$$
$$
\frac{\partial L}{\partial \xi} = 0 \;\Rightarrow C- \alpha_i - \mu_i = 0
$$
$$
\begin{align} L(\omega,b,\xi,\alpha,\mu) & = \frac{1}{2}||\omega||_2^2 +C\sum\limits_{i=1}^{m}\xi_i - \sum\limits_{i=1}^{m}\alpha_i[y_i(\omega^Tx_i + b) - 1 + \xi_i] - \sum\limits_{i=1}^{m}\mu_i\xi_i \\&= \frac{1}{2}||\omega||_2^2 - \sum\limits_{i=1}^{m}\alpha_i[y_i(\omega^Tx_i + b) - 1 + \xi_i] + \sum\limits_{i=1}^{m}\alpha_i\xi_i \\& = \frac{1}{2}||\omega||_2^2 - \sum\limits_{i=1}^{m}\alpha_i[y_i(\omega^Tx_i + b) - 1] \\& = \frac{1}{2}\omega^Tw-\sum\limits_{i=1}^{m}\alpha_iy_iw^Tx_i - \sum\limits_{i=1}^{m}\alpha_iy_ib + \sum\limits_{i=1}^{m}\alpha_i \\& = \frac{1}{2}\omega^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i -\sum\limits_{i=1}^{m}\alpha_iy_iw^Tx_i - \sum\limits_{i=1}^{m}\alpha_iy_ib + \sum\limits_{i=1}^{m}\alpha_i \\& = \frac{1}{2}\omega^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i - \omega^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i - \sum\limits_{i=1}^{m}\alpha_iy_ib + \sum\limits_{i=1}^{m}\alpha_i \\& = - \frac{1}{2}\omega^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i - \sum\limits_{i=1}^{m}\alpha_iy_ib + \sum\limits_{i=1}^{m}\alpha_i \\& = - \frac{1}{2}\omega^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i - b\sum\limits_{i=1}^{m}\alpha_iy_i + \sum\limits_{i=1}^{m}\alpha_i \\& = -\frac{1}{2}(\sum\limits_{i=1}^{m}\alpha_iy_ix_i)^T(\sum\limits_{i=1}^{m}\alpha_iy_ix_i) - b\sum\limits_{i=1}^{m}\alpha_iy_i + \sum\limits_{i=1}^{m}\alpha_i \\& = -\frac{1}{2}\sum\limits_{i=1}^{m}\alpha_iy_ix_i^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i - b\sum\limits_{i=1}^{m}\alpha_iy_i + \sum\limits_{i=1}^{m}\alpha_i \\& = -\frac{1}{2}\sum\limits_{i=1}^{m}\alpha_iy_ix_i^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i + \sum\limits_{i=1}^{m}\alpha_i \\& = -\frac{1}{2}\sum\limits_{i=1,j=1}^{m}\alpha_iy_ix_i^T\alpha_jy_jx_j + \sum\limits_{i=1}^{m}\alpha_i \\& = \sum\limits_{i=1}^{m}\alpha_i - \frac{1}{2}\sum\limits_{i=1,j=1}^{m}\alpha_i\alpha_jy_iy_jx_i^Tx_j \end{align}
$$
注:
范数的定义:$||\omega||_2^2 =\omega^Tw$
$(a+b+c+…)(a+b+c+…)=aa+ab+ac+ba+bb+bc+…$
这个式子和我们上一篇线性可分SVM的一样。唯一不一样的是约束条件。现在我们看看我们的优化目标的数学形式:
$$
\underbrace{ max }_{\alpha} \sum\limits_{i=1}^{m}\alpha_i - \frac{1}{2}\sum\limits_{i=1,j=1}^{m}\alpha_i\alpha_jy_iy_jx_i^Tx_j
$$
$$
s.t. \; \sum\limits_{i=1}^{m}\alpha_iy_i = 0
$$
$$
C- \alpha_i - \mu_i = 0
$$
$$
\mu_i \geq 0 \;(i =1,2,...,m)\;\;,\alpha_i \geq 0 \;(i =1,2,...,m)
$$
这就是软间隔最大化时的线性可分SVM的优化目标形式,和硬间隔最大化的线性可分SVM相比,我们仅仅是多了一个约束条件$0 \leq \alpha_i \leq C$。我们依然可以通过SMO算法来求上式极小化时对应的$\alpha$向量就可以求出$\omega$和$b$了。
软间隔SVM也可以用于非线性支持向量机,只需要将内积改为的内核即可。软间隔支持向量的代价函数既考虑了样本分类误差,又考虑了模型的复杂度,通过调节其中的参数$C$可以使函数既能够兼顾训练集上的分类精度,又控制模型复杂度,使模型泛化能力增加。因此,我们实际中所使用的SVM分类器基本上属于这一类。
总结成一句话:支持向量机就是使用了核函数的软间隔线性分类法。
看书&&看大神们博客的整理,给以后复习记下笔记,也希望对你有用( ̄︶ ̄)↗
支持向量机的故事还在继续,我会持续更新哒~~也希望能关注一波我的独立博客——白水东城(●'◡'●)
参考: