【机器学习】支持向量机 SVM(非常详细)

简介: SVM 想要的就是找到各类样本点到超平面的距离最远,也就是找到最大间隔超平面。




【机器学习】支持向量机 SVM(非常详细)

关注他

1. 支持向量

1.1 线性可分

首先我们先来了解下什么是线性可分。



在二维空间上,两类点被一条直线完全分开叫做线性可分。

严格的数学定义是:

是 n 维欧氏空间中的两个点集。如果存在 n 维向量 w 和实数 b,使得所有属于的点都有,而对于所有属于的点则有,则我们称线性可分。

1.2 最大间隔超平面

从二维扩展到多维空间中时,将完全正确地划分开的就成了一个超平面。

为了使这个超平面更具鲁棒性,我们会去找最佳超平面,以最大间隔把两类样本分开的超平面,也称之为最大间隔超平面。

  • 两类样本分别分割在该超平面的两侧;
  • 两侧距离超平面最近的样本点到超平面的距离被最大化了。

1.3 支持向量

样本中距离超平面最近的一些点,这些点叫做支持向量。

1.4 SVM 最优化问题

SVM 想要的就是找到各类样本点到超平面的距离最远,也就是找到最大间隔超平面。任意超平面可以用下面这个线性方程来描述:

二维空间点到直线的距离公式是:

扩展到 n 维空间后,点到直线的距离为:

其中

如图所示,根据支持向量的定义我们知道,支持向量到超平面的距离为 d,其他点到超平面的距离大于 d。

于是我们有这样的一个公式:

稍作转化可以得到:

是正数,我们暂且令它为 1(之所以令它等于 1,是为了方便推导和优化,且这样做对目标函数的优化没有影响),故:

将两个方程合并,我们可以简写为:

至此我们就可以得到最大间隔超平面的上下两个超平面:

每个支持向量到超平面的距离可以写为:

由上述可以得到,所以我们得到:

最大化这个距离:

这里乘上 2 倍也是为了后面推导,对目标函数没有影响。刚刚我们得到支持向量,所以我们得到:

再做一个转换:

为了方便计算(去除的根号),我们有:

所以得到的最优化问题是:

2. 对偶问题

对偶问题:是实质相同但从不同角度提出不同提法的一对问题。对偶现象是许多管理与工程实际中存在的一种普遍现象

2.1 拉格朗日乘数法

2.1.1 等式约束优化问题

本科高等数学学的拉格朗日程数法是等式约束优化问题:

我们令,函数称为 Lagrange 函数,参数称为 Lagrange 乘子没有非负要求

利用必要条件找到可能的极值点:

具体是否为极值点需根据问题本身的具体情况检验。这个方程组称为等式约束的极值必要条件。

等式约束下的 Lagrange 乘数法引入了个 Lagrange 乘子,我们将一视同仁,把也看作优化变量,共有个优化变量。

2.1.2 不等式约束优化问题

而我们现在面对的是不等式优化问题,针对这种情况其主要思想是将不等式约束条件转变为等式约束条件,引入松弛变量,将松弛变量也是为优化变量。

以我们的例子为例:

我们引入松弛变量得到。这里加平方主要为了不再引入新的约束条件,如果只引入那我们必须要保证才能保证,这不符合我们的意愿。

由此我们将不等式约束转化为了等式约束,并得到 Lagrange 函数:

由等式约束优化问题极值的必要条件对其求解,联立方程:

(为什么取,可以通过几何性质来解释,有兴趣的同学可以查下 KKT 的证明)。

针对我们有两种情况:

情形一

由于,因此约束条件不起作用,且

情形二

此时,可以理解为约束条件起作用了,且

综合可得:,且在约束条件起作用时;约束不起作用时

由此方程组转换为:

以上便是不等式约束优化优化问题的KKT(Karush-Kuhn-Tucker) 条件称为 KKT 乘子。

这个式子告诉了我们什么事情呢?

直观来讲就是,支持向量,所以即可。而其他向量

我们原本问题时要求:,即求

由于,故我们将问题转换为:

假设找到了最佳参数是的目标函数取得了最小值 p。即。而根据,可知,因此,为了找到最优的参数,使得接近 p,故问题转换为出

故我们的最优化问题转换为:

出了上面的理解方式,我们还可以有另一种理解方式: 由于

所以,所以转化后的式子和原来的式子也是一样的。

2.2 强对偶性

对偶问题其实就是将:

变成了:

假设有个函数我们有:

也就是说,最大的里面挑出来的最小的也要比最小的里面挑出来的最大的要大。这关系实际上就是弱对偶关系,而强对偶关系是当等号成立时,即:

如果是凸优化问题,强对偶性成立。而我们之前求的 KKT 条件是强对偶性的充要条件

3. SVM 优化

我们已知 SVM 优化的主问题是:

那么求解线性可分的 SVM 的步骤为:

步骤 1

构造拉格朗日函数:

步骤 2

利用强对偶性转化:

现对参数 w 和 b 求偏导数:

得到:

我们将这个结果带回到函数中可得:

也就是说:

步骤 3

由步骤 2 得:

我们可以看出来这是一个二次规划问题,问题规模正比于训练样本数,我们常用 SMO(Sequential Minimal Optimization) 算法求解。

SMO(Sequential Minimal Optimization),序列最小优化算法,其核心思想非常简单:每次只优化一个参数,其他参数先固定住,仅求当前这个优化参数的极值。我们来看一下 SMO 算法在 SVM 中的应用。

我们刚说了 SMO 算法每次只优化一个参数,但我们的优化目标有约束条件:,没法一次只变动一个参数。所以我们选择了一次选择两个参数。具体步骤为:

  1. 选择两个需要更新的参数,固定其他参数。于是我们有以下约束:

这样约束就变成了:

其中,由此可以得出,也就是说我们可以用的表达式代替。这样就相当于把目标问题转化成了仅有一个约束条件的最优化问题,仅有的约束是

2. 对于仅有一个约束条件的最优化问题,我们完全可以在上对优化目标求偏导,令导数为零,从而求出变量值,然后根据求出

3. 多次迭代直至收敛。

通过 SMO 求得最优解

步骤 4

我们求偏导数时得到:

由上式可求得 w。

我们知道所有对应的点都是支持向量,我们可以随便找个支持向量,然后带入:,求出 b 即可,

两边同乘,得

因为,所以:

为了更具鲁棒性,我们可以求得支持向量的均值:

步骤 5: w 和 b 都求出来了,我们就能构造出最大分割超平面:

分类决策函数:

其中为阶跃函数:

将新样本点导入到决策函数中既可得到样本的分类。

4. 软间隔

4.1 解决问题

在实际应用中,完全线性可分的样本是很少的,如果遇到了不能够完全线性可分的样本,我们应该怎么办?比如下面这个:



于是我们就有了软间隔,相比于硬间隔的苛刻条件,我们允许个别样本点出现在间隔带里面,比如:



我们允许部分样本点不满足约束条件:

为了度量这个间隔软到何种程度,我们为每个样本引入一个松弛变量,令,且。对应如下图所示:



4.2 优化目标及求解

增加软间隔后我们的优化目标变成了:

其中 C 是一个大于 0 的常数,可以理解为错误样本的惩罚程度,若 C 为无穷大,必然无穷小,如此一来线性 SVM 就又变成了线性可分 SVM;当 C 为有限值的时候,才会允许部分样本不遵循约束条件。

接下来我们将针对新的优化目标求解最优化问题:

步骤 1

构造拉格朗日函数:

其中是拉格朗日乘子,w、b 和是主问题参数。

根据强对偶性,将对偶问题转换为:

步骤 2

分别对主问题参数w、b 和求偏导数,并令偏导数为 0,得出如下关系:

将这些关系带入拉格朗日函数中,得到:

最小化结果只有而没有,所以现在只需要最大化就好:

我们可以看到这个和硬间隔的一样,只是多了个约束条件。

然后我们利用 SMO 算法求解得到拉格朗日乘子

步骤 3

然后我们通过上面两个式子求出 w 和 b,最终求得超平面

这边要注意一个问题,在间隔内的那部分样本点是不是支持向量?

我们可以由求参数 w 的那个式子可看出,只要的点都能够影响我们的超平面,因此都是支持向量。

5. 核函数

5.1 线性不可分

我们刚刚讨论的硬间隔和软间隔都是在说样本的完全线性可分或者大部分样本点的线性可分。

但我们可能会碰到的一种情况是样本点不是线性可分的,比如:



这种情况的解决方法就是:将二维线性不可分样本映射到高维空间中,让样本点在高维空间线性可分,比如:

对于在有限维度向量空间中线性不可分的样本,我们将其映射到更高维度的向量空间里,再通过间隔最大化的方式,学习得到支持向量机,就是非线性 SVM。

我们用 x 表示原来的样本点,用表示 x 映射到特征新的特征空间后到新向量。那么分割超平面可以表示为:

对于非线性 SVM 的对偶问题就变成了:

可以看到与线性 SVM 唯一的不同就是:之前的变成了

5.2 核函数的作用

我们不禁有个疑问:只是做个内积运算,为什么要有核函数的呢?

这是因为低维空间映射到高维空间后维度可能会很大,如果将全部样本的点乘全部计算好,这样的计算量太大了。

但如果我们有这样的一核函数在特征空间的内积等于它们在原始样本空间中通过函数计算的结果,我们就不需要计算高维甚至无穷维空间的内积了。

举个例子:假设我们有一个多项式核函数:

带进样本点的后:

而它的展开项是:

如果没有核函数,我们则需要把向量映射成:

然后在进行内积计算,才能与多项式核函数达到相同的效果。

可见核函数的引入一方面减少了我们计算量,另一方面也减少了我们存储数据的内存使用量。

5.3 常见核函数

我们常用核函数有:

线性核函数

多项式核函数

高斯核函数

这三个常用的核函数中只有高斯核函数是需要调参的。

6. 优缺点

6.1 优点

  • 有严格的数学理论支持,可解释性强,不依靠统计方法,从而简化了通常的分类和回归问题;
  • 能找出对任务至关重要的关键样本(即:支持向量);
  • 采用核技巧之后,可以处理非线性分类/回归任务;
  • 最终决策函数只由少数的支持向量所确定,计算的复杂性取决于支持向量的数目,而不是样本空间的维数,这在某种意义上避免了“维数灾难”。

https://zhuanlan.zhihu.com/p/87577972

6.2 缺点

  • 训练时间长。当采用 SMO 算法时,由于每次都需要挑选一对参数,因此时间复杂度为,其中 N 为训练样本的数量;
  • 当采用核技巧时,如果需要存储核矩阵,则空间复杂度为
  • 模型预测时,预测时间与支持向量的个数成正比。当支持向量的数量较大时,预测计算复杂度较高。

因此支持向量机目前只适合小批量样本的任务,无法适应百万甚至上亿样本的任务。

7. 参考

  1. 《机器学习》 周志华
  2. 最优化问题的KKT条件
  3. 一文理解拉格朗日对偶和KKT条件
  4. 支持向量机通俗导论(理解SVM的三层境界)







相关文章
|
12月前
|
机器学习/深度学习 数据采集 算法
机器学习在医疗诊断中的前沿应用,包括神经网络、决策树和支持向量机等方法,及其在医学影像、疾病预测和基因数据分析中的具体应用
医疗诊断是医学的核心,其准确性和效率至关重要。本文探讨了机器学习在医疗诊断中的前沿应用,包括神经网络、决策树和支持向量机等方法,及其在医学影像、疾病预测和基因数据分析中的具体应用。文章还讨论了Python在构建机器学习模型中的作用,面临的挑战及应对策略,并展望了未来的发展趋势。
765 1
|
机器学习/深度学习 算法
【机器学习】SVM面试题:简单介绍一下SVM?支持向量机SVM、逻辑回归LR、决策树DT的直观对比和理论对比,该如何选择?SVM为什么采用间隔最大化?为什么要将求解SVM的原始问题转换为其对偶问题?
支持向量机(SVM)的介绍,包括其基本概念、与逻辑回归(LR)和决策树(DT)的直观和理论对比,如何选择这些算法,SVM为何采用间隔最大化,求解SVM时为何转换为对偶问题,核函数的引入原因,以及SVM对缺失数据的敏感性。
344 3
|
机器学习/深度学习 运维 算法
深入探索机器学习中的支持向量机(SVM)算法:原理、应用与Python代码示例全面解析
【8月更文挑战第6天】在机器学习领域,支持向量机(SVM)犹如璀璨明珠。它是一种强大的监督学习算法,在分类、回归及异常检测中表现出色。SVM通过在高维空间寻找最大间隔超平面来分隔不同类别的数据,提升模型泛化能力。为处理非线性问题,引入了核函数将数据映射到高维空间。SVM在文本分类、图像识别等多个领域有广泛应用,展现出高度灵活性和适应性。
592 2
|
机器学习/深度学习 算法
【机器学习】解释对偶的概念及SVM中的对偶算法?(面试回答)
解释了对偶的概念,指出对偶性在优化问题中的重要性,尤其是在强对偶性成立时可以提供主问题的最优下界,并且详细阐述了支持向量机(SVM)中对偶算法的应用,包括如何将原始的最大间隔优化问题转换为对偶问题来求解。
399 2
|
机器学习/深度学习 算法
【机器学习】支持向量机SVM、逻辑回归LR、决策树DT的直观对比和理论对比,该如何选择(面试回答)?
文章对支持向量机(SVM)、逻辑回归(LR)和决策树(DT)进行了直观和理论上的对比,并提供了在选择这些算法时的考虑因素,包括模型复杂度、损失函数、数据量需求、对缺失值的敏感度等。
443 1
|
机器学习/深度学习 算法 Windows
【阿旭机器学习实战】【34】使用SVM检测蘑菇是否有毒--支持向量机
【阿旭机器学习实战】【34】使用SVM检测蘑菇是否有毒--支持向量机
|
机器学习/深度学习 算法
探索机器学习中的支持向量机(SVM)算法
【5月更文挑战第31天】 在数据科学的广阔天地中,支持向量机(SVM)以其卓越的性能和强大的理论基础脱颖而出。本文将深入剖析SVM的工作原理、核心概念以及实际应用,旨在为读者提供一个清晰的理解视角,并通过实例演示其在分类问题中的有效性。我们将从线性可分的情况出发,逐步过渡到非线性问题的处理方法,并探讨如何通过调整参数来优化模型的性能。
428 0
|
机器学习/深度学习 人工智能 算法
探索机器学习中的支持向量机(SVM)算法
【5月更文挑战第28天】 在数据科学与人工智能的领域中,支持向量机(Support Vector Machines, SVM)是一种强大的监督学习模型,它基于统计学习理论中的VC维理论和结构风险最小化原则。本文将深入探讨SVM的数学原理、关键概念以及实际应用案例。我们将透过SVM的镜头,理解其在分类和回归问题中的应用,并讨论如何通过核技巧克服维度灾难,提高模型的泛化能力。文章还将展示使用SVM解决实际问题的步骤和注意事项,为读者提供一个清晰的SVM应用指南。
|
1月前
|
机器学习/深度学习 数据采集 人工智能
【机器学习算法篇】K-近邻算法
K近邻(KNN)是一种基于“物以类聚”思想的监督学习算法,通过计算样本间距离,选取最近K个邻居投票决定类别。支持多种距离度量,如欧式、曼哈顿、余弦相似度等,适用于分类与回归任务。结合Scikit-learn可高效实现,需合理选择K值并进行数据预处理,常用于鸢尾花分类等经典案例。(238字)
|
12月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
1149 6

热门文章

最新文章

下一篇
oss云网关配置