机器学习入门|支持向量机(三)-软间隔与正则化

简介: SVM是解决线性可分问题的,如果线性不可分,那就引入核函数,使其在更高的维度上可分,虽说一定存在一个超平面使其可分(不出任何差错,这即是之前所说的“硬间隔”),但容易发生过拟合的风险,训练效果反而不好。所以,缓解的办法就是允许支持向量在一些样本上出错,这便引入了“软间隔”。

已经是大二新学期的第六周周末了,一番瞎折腾之后,还是想抽出一部分精力来搞一搞机器学习的理论部分,趁年轻,万一哪天开悟了。。。好了,除了废话不多了,博客以后正常更新噢,不光是机器学习的,还有其他方面的系列学习笔记,希望能有所收获( ̄︶ ̄)↗ 

接着之前的两篇博客:

现在来说说软间隔和正则化。

软间隔

软间隔要解决的问题

SVM是解决线性可分问题的,如果线性不可分,那就引入核函数,使其在更高的维度上可分,虽说一定存在一个超平面使其可分(不出任何差错,这即是之前所说的“硬间隔”),但容易发生过拟合的风险,训练效果反而不好。所以,缓解的办法就是允许支持向量在一些样本上出错,这便引入了“软间隔”。
WeChat_Image_20180408163547

如上图,“软间隔”允许某些样本不满足约束:

$$ 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))$
WeChat_Image_20180408173036

若采用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) $$

松弛变量

WeChat_Image_20180408193015

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分类器基本上属于这一类。

总结成一句话:支持向量机就是使用了核函数的软间隔线性分类法。

看书&&看大神们博客的整理,给以后复习记下笔记,也希望对你有用( ̄︶ ̄)↗ 

支持向量机的故事还在继续,我会持续更新哒~~也希望能关注一波我的独立博客——白水东城(●'◡'●)

参考:

目录
相关文章
|
3月前
|
机器学习/深度学习 数据采集 算法
深入了解机器学习:从入门到应用
【10月更文挑战第6天】深入了解机器学习:从入门到应用
|
22天前
|
机器学习/深度学习 传感器 运维
使用机器学习技术进行时间序列缺失数据填充:基础方法与入门案例
本文探讨了时间序列分析中数据缺失的问题,并通过实际案例展示了如何利用机器学习技术进行缺失值补充。文章构建了一个模拟的能源生产数据集,采用线性回归和决策树回归两种方法进行缺失值补充,并从统计特征、自相关性、趋势和季节性等多个维度进行了详细评估。结果显示,决策树方法在处理复杂非线性模式和保持数据局部特征方面表现更佳,而线性回归方法则适用于简单的线性趋势数据。文章最后总结了两种方法的优劣,并给出了实际应用建议。
58 7
使用机器学习技术进行时间序列缺失数据填充:基础方法与入门案例
|
2月前
|
机器学习/深度学习 数据采集
机器学习入门——使用Scikit-Learn构建分类器
机器学习入门——使用Scikit-Learn构建分类器
|
2月前
|
机器学习/深度学习 数据采集 算法
机器学习在医疗诊断中的前沿应用,包括神经网络、决策树和支持向量机等方法,及其在医学影像、疾病预测和基因数据分析中的具体应用
医疗诊断是医学的核心,其准确性和效率至关重要。本文探讨了机器学习在医疗诊断中的前沿应用,包括神经网络、决策树和支持向量机等方法,及其在医学影像、疾病预测和基因数据分析中的具体应用。文章还讨论了Python在构建机器学习模型中的作用,面临的挑战及应对策略,并展望了未来的发展趋势。
151 1
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
探索AI的奥秘:机器学习入门指南
【10月更文挑战第30天】本篇文章是一份初学者友好的机器学习入门指南,旨在帮助读者理解并开始实践机器学习。我们将介绍机器学习的基本概念,包括监督学习、无监督学习和强化学习等。我们还将提供一些实用的代码示例,以帮助读者更好地理解和应用这些概念。无论你是编程新手,还是有一定经验的开发者,这篇文章都将为你提供一个清晰的机器学习入门路径。
46 2
|
2月前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
机器学习基础:使用Python和Scikit-learn入门
38 1
|
2月前
|
机器学习/深度学习 数据采集 人工智能
机器学习入门:Python与scikit-learn实战
机器学习入门:Python与scikit-learn实战
71 0
|
2月前
|
机器学习/深度学习 算法 Python
机器学习入门:理解并实现K-近邻算法
机器学习入门:理解并实现K-近邻算法
41 0
|
3月前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
【10月更文挑战第12天】本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和入门实践。首先概述了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着详细讲解了Python和Scikit-learn的安装、数据处理、模型训练和评估等步骤,并提供了代码示例。通过本文,读者可以掌握机器学习的基本流程,并为深入学习打下坚实基础。
29 1
|
3月前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和实践。首先概述了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着详细讲解了Python和Scikit-learn的安装、数据处理、模型选择与训练、模型评估及交叉验证等关键步骤。通过本文,初学者可以快速上手并掌握机器学习的基本技能。
72 2