第七周PPT 下载密码:tmss
上周主要讲解了如何设计机器学习系统和如何改进机器学习系统,包括一些模型选择的方法,模型性能的评价指标,模型改进的方法等。本周主要讲解支持向量机SVM的原理包括优化目标、大间隔以及核函数等SVM核心内容,以及SVM的使用。
目录
1.优化目标
- 逻辑回归算法回顾
逻辑回归假设函数:
令,得到假设函数的图像如下:
假设我们现在有一个训练样本,接下来看一下逻辑回归到底在做什么:
如果该样本的标签,我们希望,即 ;
如果该样本的标签,我们希望,即 ;
对于某一个训练样本,给出它的代价函数:
如果标签(希望),此时上述代价函数将只有左边第一项,绘制出此时的图像,如下所示:
其中的曲线代表逻辑回归的代价函数,SVM的代价函数对逻辑回归代价函数做了一些简化,由两条直线段构成,记为.
同理,如果标签(希望),此时上述代价函数将只有右边第二项,绘制出此时的图像,如下所示:
其中的曲线代表逻辑回归的代价函数,SVM的代价函数对逻辑回归代价函数做了一些简化,由两条直线段构成,记为.
逻辑回归代价函数:
由两部分组成,代价和正则化惩罚项。基本形式为,参数控制两部分的权重。
SVM代价函数(优化目标):
与逻辑回归稍有不同,去除了常数项,这对最优值的求解没有影响;形式为,可以把C想象成, C参数控制两部分的权重。
与逻辑回归不同的是SVM的假设函数不会输出一个概率,而是直接进行分类。
首先通过最小化代价函数得到一组最优的参数,SVM的假设函数如下:
2.直观上对大间隔的理解
SVM分类器也被叫做大间隔分类器,本小节将用直观的图像,帮你理解这句话的含义。
- SVM代价函数
左图为图像,右图为图像。为了使代价函数的值最小:
当时,我们希望(而不仅仅是),此时。实际上预测时当就能正确分类,此时假设函数,但训练时SVM有更高的要求,比如,不是恰好正确分类,而是在正确分类基础上还要构建一个安全间距。
当时,我们希望(而不仅仅是),此时。实际上预测时当就能正确分类,此时假设函数,但训练时SVM有更高的要求,比如,不是恰好正确分类,而且在正确分类基础上还要构建一个安全间距。
- SVM决策边界
假设我们把参数C设置的非常大,比如C=100000,此时为了使代价函数最小,那么篮框中的第一项应该为0,才能把大参数C的增加效果抵消掉。也就是说此时:
当训练样本标签时,满足,才能使第一项为0;
同理,当训练样本标签时,满足,才能使第一项为0。
在这种情况下,我们通过选择一个很大的参数C,使得上述优化问题以及约束条件变成如下形式:
当最小化这个关于参数的代价函数时,可以得到一个非常有趣的决策边界:
上图是一个线性可分的数据集,其中洋红色、绿色和黑色的决策边界都能把正负样本分开;实际上利用SVM,会得到黑色的决策边界,从直观上来看,黑色决策边界比其他2者更稳健,鲁棒性更好。它不仅能正确分类,而且还可以以一个最大的安全间距进行分类,即它距离正负样本的最小距离最大。
我们把决策边界距离正负样本的最小距离称为间距,SVM可以得到间距最大的决策边界,因此SVM也被称作大间距分类器。
当参数C非常大时,我们可以对大间距分类器有一个直观的理解,如上图的黑色决策边界所示,但是此时很容易受到异常点的影响:
当C非常大时,由于上图左下角异常点的存在,决策边界会从黑色直线变成洋红色直线,这是我们不希望看到的。一般我们会把C设置的没那么大,此时他可以忽略异常点的影响,即使是线性不可分的情况,也可以得到上图中黑色的大间距决策边界。
可以把参数C想象成,当C非常大时,相当于非常小,此时容易出现高方差或过拟合的情况。
本小节,只是对大间距分类器有一个直观的理解,下一小节将具体探讨大间距分类器的数学原理。
3.大间隔分类器的数学原理
- 向量内积回顾
现有两个列向量:
表示向量的内积,从代数角度来看,。
接下来我们从几何角度看:
将向量可视化,横纵轴数值代表他们在各自坐标轴上的分量。
代表向量u的范数,即u的长度,;
上图中的p代表向量v在向量u上的投影长度,这个长度可正可负,取决于向量的夹角。当夹角小于90时,p为正;当夹角大于90时,p为负。下图为夹角大于90的情况:
此时,并且与之前代数角度获得的内积值是一样的。
- SVM决策边界
当参数C非常大时,我们可以对大间隔分类器有一个直观的理解。此时的优化问题,变成如下形式:
对上述优化问题做一些简化,假设,并且,即只有两个特征,那么该优化问题可以写成如下形式:
对于,根据之前向量内积的性质,可以表示成如下形式:
我们最终可以得到如下的优化问题:
其中是样本在参数上的投影,依旧使用之前的简化,.
首先我们来解释一下SVM为什么不会产生小间距(决策边界到正负样本间的最小距离)的决策边界(下图绿色直线):
上图中,❌代表正样本,蓝圈代表负样本;,分别代表其中的某个正负样本;绿色的直线是某一个决策边界(由于,它会过原点),利用线性代数的知识,我们知道参数向量的方向与决策边界是正交的;分别是正负样本,在上的投影。
当时,由约束条件可知,,由上图可知投影(>0)非常小,这就要求非常大,而这与优化目标最小化
相悖;
同理,当时,由约束条件可知,,由上图可知投影(<0)非常小,这就要求非常大,而这与优化目标最小化也相悖;
因此,综上,SVM不会产生如上图绿线所示的小间距决策边界。
至于SVM为什么会产生大间距的决策边界(下图绿色直线),也是一个道理:
当时,由约束条件可知,,由上图可知投影(>0)比较大,与之前相比,此时要求可以小一些,这与优化目标最小化相同;
同理,当时,由约束条件可知,,由上图可知投影(<0)比较大,此时要求可以小一些,这与优化目标最小化也相同;
因此,综上,SVM会产生如上图绿线所示的大间距决策边界。
之前的讨论一直做了简化,即,当时,决策边界将是一条不通过原点的直线,产生大间距决策边界的分类效果是一样的。
4.核函数1
通过核函数改造SVM算法,得到新的特征变量,来构造复杂的非线性分类器:
考虑下图的数据集:
很显然该数据集是线性不可分的,如果想得到如上图所示的决策边界,仅用原始的两个输入特征是不够的。在这种情况下,可以增加新的多项式特征,比如:
我们用符号为新的特征编号:
现在问题在于,多项式的组合有很多,是否存在一种最好的特征选择。之前学习逻辑回归时,对于这种情况,一般选择若干个不同的组合方式,得到不同的假设函数,通过在验证集上进行模型选择,从而选择最好的那一个。而在SVM中我们可以通过核函数对原始输入特征进行映射,得到一组更好的新特征。
- Kernel
给定一个训练样本的输入变量(有两个原始输入特征,我们接下来会通过一些标记基于原始输入特征计算出一些新的特征。其中标记数=新的特征数,假设有三个标记(至于标记具体如何选,下节课再讲解),此时会产生三个新特征.
其中每一个新特征,都是原始输入特征向量与标记向量的相似度计算值,每一个标记向量都会产生一个新特征。我们把这个相似度函数称为核函数,而上图中采用的是高斯核函数。
- 核函数和相似度
接下来我们看一下核函数到底做了什么:
核函数实际上在衡量样本的原始输入特征向量和表标记向量的距离。当2者非常接近时,返回的相似度值接近于1,产生的新特征也接近于1;当2者差距非常大时,返回的相似度值接近于0,产生的新特征也接近于0;
绘制核函数图像:
图像z轴代表相似度值,即f1.最高点在地面的投影坐标即为标记的位置(3,5)。当特征向量在(3,5)时,此时2者相似度最大为1,当向周围移动时,相似度会减小。
接下来,观察一下值对核函数的影响:
当比较小时,图像中突起的部分会比较窄,当向外移动时,相似度下降的会比较快;
当比较大时,图像中突起的部分会比较宽,当向外移动时,相似度下降的会比较慢。
- 假设函数
通过核函数我们对原始特征向量进行映射,得到新的特征向量,的维度等于标记向量的数量。上例中我们使用了3个标记向量,所以会得到三个新特征,此时的假设函数如下:
假设对于新的假设函数已经通过训练得到了一组最优的参数取值:.接下来对新的样本进行预测:
对于第一个新样本,上图洋红色的标记,它距离标记比较近,离,比较远,此时:
它会被预测为正类。
对于第二个新样本,上图蓝色的标记,它距离标记,,都比较远,此时:
它会被预测为负类。
最后你会发现,对于一个新样本只要接近标记,就会被预测为正类,否则为负类。那么,此时训练得到的决策边界可能如下图所示:
5.核函数2
- 如何选择标记
实际上,对于一个机器学习问题,每个样本的输入特征变量都对应一个标记向量,二者是一样的;如果有m个训练样本,将会有m个标记向量。
对于每一个样本来说,得到的新的特征变量的不同维度,实际上在描述该样本与样本集中其他样本的距离。
- SVM with Kernels
对于一个训练集,首先选择标记点:
对于一个样本的输入特征,对其做如下映射,得到新的输入特征f:
对于一个训练样本,对其输入特征做上述映射,得到新的输入特征:
这样原始输入特征就从n+1维,映射成了m+1维(其中的+1指偏置项,恒等于1)。
- SVM with Kernels的假设函数和代价函数
首先对原始输入特征通过核函数映射为新特征,然后用新的代价函数进行训练,得到最优的参数后,再带入新的假设函数进行预测。
使用内核后的假设函数还稍有些不同,对于后一项可以表示为:
(此时忽略),但是的维度是m,即等于训练样本的数量,当训练样本非常多时,计算成本是很高的,所以此时的代价函数的后一项实际上为:,来提高运行效率,矩阵M的选择和使用的核函数有关。
当使用SVM时,不必担心代价函数如何编写代码,也不建议自己编写代码,直接调用别人已经写好的程序包,里面已经包含了许多优化技巧。
- SVM参数
6.使用SVM
调用成熟的优化算法来求解SVM的参数,不要自己写代码:
当使用上述软件包时,需要考虑两个问题:
一种做法是不使用核函数,n比较大,m比较小的情况:
也可以使用核函数(高斯核函数),适用于n比较小,m比较大时:
如何选择由具体情况决定,后面会详细讨论。
高斯核函数也可以直接调用软件包,下图中输入是两个向量,输出为一个实数:
在使用高斯核函数之前,一定要对原始输入特征进行缩放:
否则,如上图所示,特征不同分量的取值范围差异很大的话,不同特征分量对计算新特征的影响程度是不同的。
- 核函数的选择
并不是所有的核函数都可以用在SVM上,只有满足莫塞尔定理的核函数才可以。除了之前提到的高斯核函数和线性核函数之外,还有如下的核函数也满足莫塞尔定理:
不过这些核函数都不太常用,其中多项式核函数的形式可以有多种,它有constant和degree两个参数,效果不是很好。
- 使用SVM进行多分类
许多SVM的软件包都实现了多分类的函数,可以直接调用。
除此之外,也可以采取之前讲解的利用逻辑回归实现多分类的方案:对于一个多分类,等价于做多次2分类,每次把其中的一个类别作为正类,其余类别为负类,最终预测时,看新样本属于哪个正类的假设函数值最大,就属于哪个类别。
-
逻辑回归 vs. SVMs
逻辑回归和不带核函数的SVM很相似:
SVM虽然效果可能不如神经网络,但是训练速度很快,有很多成熟的软件包,神经网络训练很慢;而且SVM是一个凸优化问题,一定可以得到全局最优解,神经网络可能得到局部最优解(对于NN来说,是一个不大不小的问题)