机器学习:支持向量机SVM
一、优化目标
1.1 从逻辑回归模型开始
在介绍SVM之前,我们先从逻辑回归模型开始,我们知道,逻辑回归的假设函数为
,这就是一个Sigmoid函数,其图像如下图所示:
我们的目标是对于
,希望
对于
, 希望
下面对逻辑回归的代价函数进行分析:
当
时,代价函数变为
,代价图像如上图左所示,我们的优化目标是使得代价函数尽量的小,在图中可以看出,当
尽量大的时候,代价函数就趋近于0,这和我们的真实目标相符合,即对于
,希望
。同样对于,
的情况也是如此,不重复分析。我们可以将代价函数图形化简,如上图粉红色的线段所示,化简后的代价函数用
和
表示。
1.2 SVM优化目标
对于逻辑回归的优化目标如下:
对于支持向量机的优化目标如下:
对比两个表达式,首先SVM的优化目标将参数
删去,这是不重要的,因为这就是个常量,不会影响最优质的选取。直观来讲,对于一个函数乘上一个系数,只是将整个函数放大拉长了,最优解所在自变量的位置没变,只不过是函数值改变了。其次就是用新的代价函数
和
替换了逻辑回顾中的相应部分。此外将正则化系数
删去,而是在前面加入了一个系数
,这对整个式子也是没有影响的,因为这些系数都是模型自己学习的,改变位置造成的效果可以看出,将
考虑成
。注意这里说的只是效果上近似,并不是完全等价。比如
的作用是使得表达式前面一部分的值变小,那么
就要取一个较大的值 ,那么这和在前一部分乘上
效果是类似的。
最后有别于逻辑回归输出的概率,支持向量机所做的是它来直接预测y 的值等于1,还是等于0。因此,当
时,这个假设函数会预测1。
二、大边界分类器的理解
2.1 直观理解
人们有时也会将SVM称为大间距分类器,这里就来理解一下其中的原因。
如上图所示就是支持向量机的代价函数和图像,我们的目标是最小化代价函数。所以我们考虑一下最小化代价函数的必要是什么,假如现在有个正样本
,那么代价函数就变成了上图左边的图像,观察图像可以发现,只有在
的时候代价函数最小为0。也就是说,当
时,我们期望的是
,同理,当
时,我们期望
,这和逻辑回归以 0 作为边界不同。支持向量机在正负类别之间空出了一个
的间隔,相当于在SVM中嵌入了一个额外的安全因子,或者说是一个安全的间距因子。
当
设置地很大的时候,比如说100000,那么支持向量机的目标函数就可以写成:
对于这样的SVM模型,在如下图所示的数据中进行训练,通过数据分布可以看出这个数据是线性可分的,我们可以很轻松的用一条直线分开这两个数据集,如图中绿色和粉红的直线。但是当
设置很大的时候,SVM会选择黑色的线作为决策边界,并且将黑线到正负样本之间的距离成为间距(margin),这也是SVM有很好的鲁棒性的原因,因为它一直努力用一个最大间距来分类样本,这也是SVM被称为大间距分类器的原因。至于为什么会选择黑线,在后面的数学解释中会介绍。
再来说一下SVM的正则化系数
,考虑下面这样的数据分布,如果将
设置很大,则很可能会得到粉线,如果将
设置的不是非常大时,则可能得到黑线。
总结可以得到:
- C 较大时,相当于 λ 较小,可能会导致过拟合,高方差 。
- C较小时,相当于 λ 较大,可能会导致低拟合,高偏差。
2.2 数学解释
向量内积的回顾:
向量内积在几何意义上等于 投影 乘 被投影的向量长度,在坐标意义上等于对应坐标相乘再相加,用向量表示就是第一个向量的转置乘上第二个向量。
现在我们讨论的是
很大的情形,并且为了简单起见我们假设
,并且数据只有两个属性, 也就是说只有
和
,那么对于
很大的时候的SVM 的决策函数:
我们可以推得
,由此我们就知道,优化目标是使得参数向量
的范数最小,也就是长度最小。而对于约束条件
,其实就是向量
和向量
的内积(因为第一个向量的转置乘上第二个向量就是向量的内积)。由于向量内积也有其几何意义,即
,其中
表示第
个数据在向量
上的投影。
于是,对于这样一个特殊的化简情况,我们就可以将目标函数写成:
对于下图的数据集,我们随意画了一条决策边界(绿色直线),由于
与决策边界垂直正交,所以我们可以画出
的方向。至于为什么垂直,我们可以分别表示出决策边界和
的斜率。由于决策边界上
,所以决策边界的斜率为
,由于向量
过原点,所以斜率就是
,相乘为-1,表示两直线垂直。
对于正样本,由于
表示在
上的投影是一个定值,由于下图中的投影长度很短,所以要让
,就必须要让
很大,同样对于负样本,受制于约束条件,也会让
很大,这样的结果显然与目标函数(最小化
)相悖。
所以在目标函数的作用下,SVM会选择如下的决策边界,在这样的边界下,每个样本到
的投影都尽量地大,使得
就能尽量地小。
但需要注意的是,上述的推导都是基于
,且特征只有两个的情况,如果
不为0,则表示
可以不过原点,特征增加,则表示在高维空间用超平面划分数据集,原理是相同的。
三、核函数
首先,先来回顾一下非线性回归问题分决策边界,如下图所示,通常情况下,对于一个非线性的问题,我们通过构造高次的特征项来解决。具体来说,我们的假设函数的定义能是当
时,
,反之等于0。
现在我们将假设函数换一种表示方法:
,对于上面的式子,
,那么除了无脑构造高次项,有没有更好的构造新特征的方式呢?有,那就是核函数。
3.1 高斯核函数
我们现在样本空间里随机取三个点,称为标记点(landmarks),分别标记为
,如下图所示。
然后我们可以定义三个特征
,其中
的含义为某个样本与
的相似度,
的含义为某个样本与
的相似度,以此类推。对于
其表达式为:
其余两个特征的定义类似,下面我们分析一下这个表达式:
- 当样本
与
很接近时,
约等于0,则
约等于1。(exp表示
的指数,
)
- 当样本
与
相差很多时,
为一个很大的数字,加上前面的负号,整体为一个很大的负数,则
约等于0。
下面再来观察
对表达式的影响,假设
,分别画出不同
值的图像,从而我们得出,
控制着表达式的变化速度。
上面的这个表达式就是高斯核函数,那么使用高斯核函数为什么可以达到非线性的表达能力呢?可以看下面的例子:
假设我们的假设函数为
,并且
的取值如图中所示。对于图中红色的点,由于靠近
远离
和
,而靠近
则
接近1,否则接近0,那么假设函数和可能就是一个正数,表示正类。而对于右下角的点,它远离三个
点,则所有特征
取值都为0,代入得结果为-0.5,表示负类。 最终能得道类似红色的决策边界(之所以
被排除在外是因为它的权重
)。
3.2 标记点的选取
前面介绍了为何核函数可以使SVM有非线性表达能力,那么我们应该如何选择标记点呢?我们通常是根据训练集的数量选择地标的数量,即如果训练集中有 m 个实例,则我们选取 m 个标记点,并且令:
。这样做的好处在于:现在我们得到的新特征是建立在原有特征与训练集中所有其他特征之间距离的基础之上的,即:
下面将核函数运用到支持向量机中,修改我们的支持向量机假设函数为:
在具体实现代码的过程中,我们还需要对最后的归一化项进行些微调整,在计算
时,我们 用
代替
,其中
是根据我们选择的核函数而不同的一个矩阵。这样做的原因是为了简化计算。但不了解也没事,因为有封装好的软件包可以使用。等)。在使用这些软件包最小化我们的代价函数之前,我们通常需要编写核函数,并且如果我们使用高斯核函数,那么在使用之前进行特征缩放是非常必要的。另外,支持向量机也可以不使用核函数 ,当我们不采用非常复杂的函数,或者我们的训练集特征非常多而实例非常少的时候,可以采用这种不带核函数的支持向量机。
3.3 参数对模型的影响
- C是惩罚系数,即对样本分错的宽容度,因为C后面跟的是代价函数,当样本分类错误时代价函数的值就会变大。C越高,则代价函数的变大效果就会被放大,说明越不能容忍出现分错,容易过拟合。C越小,容易欠拟合。C过大或过小,泛化能力变差。
- 如果
设的太小,容易导致过拟合。因为
很小的高斯分布长得又高又瘦,会造成只会作用于支持向量样本附近,对于未知样本分类效果很差,但训练准确率可以很高,(如果让无穷小,则理论上,高斯核的SVM可以拟合任何非线性数据,但容易过拟合)。
四、应用SVM
4.1 其他核函数
在高斯核函数之外我们还有其他一些选择,如: 多项式核函数(Polynomial Kernel)
字符串核函数(String kernel)
卡方核函数(chi square kernel)
直方图交集核函数(histogram intersection kernel)
这些核函数的目标也都是根据训练集和标记点之间的距离来构建新特征,这些核函数需要满足 Mercer's 定理,才能被支持向量机的优化软件正确处理。
4.2 多分类问题
4.2.1 一对多OVA
一对多算法 (one-against-rest/one-against-all)是最简单的实现方法,也是支持向量机多类分类的最早实现方法。构造一系列两类分类机,其中的每一个分类机都把其中的一类同余下各类分划开,然后据此判断某个输入x的归属。假设一共有
类样本,将其中第
类样本看作正类
,而将其它
类样本看作负类,进行
次判断,将概率最大的当做结果。
4.2.2 一对一 OVO
成对分类法(one-against-one)是基于两类问题的分类方法。它的思想是利用两类SVM算法分别在每两类不同的样本之间都构造一个最优决策面,如果一共k类样本,则需要构造
个分类平面,这种方法相当于将多类问题转化为多个两类问题来求解,本质上跟两类SVM一样。接下往往采用投票法(Vote),计算所有的分类器所分得的类别,选择得票数最多的类别作为预测结果。
4.3 SVM与逻辑回归
n 为 特征数, m 为 训练 样本数。
- 如果相较于 m 而言, n 要大许多,即训练集数据量不够支持我们训练一个复杂的非线性模型,我们选用逻辑回归模型或者不带核函数的支持向量机。
- 如果 n 较小,而且 m 大小中等,例如 n 在 1-1000 之间,而 m 在 10-10000 之间,使用 高 斯核函数的支持向量机。
- 如果 n 较小,而 m 较大,例如 n 在 1-1000 之间,而 m 大于 50000 ,则使用支持向量机会非常慢,解决方案是创造、增加更多的特征,然后使用逻辑回归或不带核函数的支持向量机。
相关文章
- 【硬核书】机器学习对抗鲁棒性
- 基于机器学习预测地面臭氧浓度
- 快速入门Python机器学习(17)
- 有了这个机器学习画图神器,论文、博客都可以事半功倍了!
- 深度学习以及机器学习面试常见问题以及答案
- Part1:可解释的机器学习-XAI – eXplainable Artificial Intelligence
- 10个机器学习中常用的距离度量方法
- 机器学习模型的集成方法总结:Bagging, Boosting, Stacking, Voting, Blending
- 使用机器学习创建自己的Emojis 表情
- 297个机器学习彩图知识点(4)
- [ 机器学习 ] 关于Jupyter Notebook中pytorch模块import失败的问题
- 吴恩达机器学习II
- 吴恩达机器学习III
- [NC | 论文简读] devCellPy是一个机器学习支持的管道,用于自动注释复杂的多层单细胞转录组数据
- 机器学习一些概念理解
- AI入门| 微软ATP带你看机器学习怎么“训练”?
- 为机器学习模型设置最佳阈值:0.5是二元分类的最佳阈值吗
- 【2023新书】可信机器学习实战: 一致、透明和公平的AI管道
- 机器学习工程化,企业 AI 的下一个起点
- 论机器学习领域的内卷:不读PhD,我配不配找工作?
- 清华大学发布首个自动图机器学习工具包AutoGL,开源易用可扩展,支持自定义模型
- 【机器学习】吴恩达机器学习Deeplearning.ai
- 机器学习中的有标注数据集和无标注数据集
- 器学习Linux上的机器学习之旅(linux机)
- 微软开源分布式机器学习工具包
- 阿里“NASA”首个重磅武器亮相:机器学习平台 PAI 2.0
- 贝叶斯机器学习到底是什么?看完这篇你就懂啦
- 这届机器学习论文评比,搞怪无厘头我只服Reddit
- Redis集群实现多台机器的协作(redis集群 多台机器)
- 妙用Redis实现配置主从机器的精彩复制(redis配置主从机器)