【MindSpore(跟着小Mi一起机器学习】支持向量机(上))

今天我们学习支持向量机!小Mi在办公室的时候经常会听到同事提及什么支持向量机啊,凸优化啊这样的名词,那么支持向量机到底是什么呢?今天让我们过来一探究竟!~~
1 优化目标
与逻辑回归和神经网络相比,支持向量机,简称SVM,在学习复杂的非线性方程时提供了一种更为清晰,更加强大的方式,该算法的强大和受欢迎程度,EMMMM,小Mi不多说,大家可以稍微脑补那么一下下,同时它也是小Mi带大家学习的最后一个监督学习算法(下面就开始转向无监督学习算法啦~)。
由于算法之间都有很多相似性,和别的算法一样,支持向量机的描述也将会从逻辑回归开始展示如何一点一点修改从而得出的。
大家肯定不会陌生,上图涉及的便是逻辑回归中的假设函数以及S型激励函数。这里用z来简化表示。
而我们想要逻辑回归做什么呢?如果有一个y=1的样本(不管是在训练集中或是在测试集中,又或者在交叉验证集中),我们希望趋近1。如果我们想要正确地将此样本分类,这也就意味着当趋近于1时,应当远大于0。而从图像中我们可以知道,当z远大于0时,也就是纵轴的右侧,不难发现此时逻辑回归的输出将趋近于1。同理,如果有另一个样本,即y=0,也就意味着我们希望假设函数的输出值将趋近于0,对应的或z会远小于0,因为假设函数的输出值趋近0。
同时我们再来看下逻辑回归的代价函数,每个样本(x,y)都会为总的代价函数,增加这样的一项:
因此,总的代价函数通常会对所有的训练样本求和,从第一项到第m项,而在逻辑回归中,这一项就表示一个训练样本所对应的表达式。
现在,先忽略这一项,一起来考虑两种情况:一种是y等于1的情况;另一种是y等于0的情况。
在第一种情况中,假设y=1 ,此时目标函数中只有第一项起作用,因为(1-y)项将等于0。因此,当在y=1的样本中时,即在(x,y)中 ,。
如果画出关于z的函数,你会看到这样一条曲线:
当z增大时,也就是相当于增大时,z对应的值会变的非常小。对整个代价函数而言,影响也非常小。这也就解释了,为什么逻辑回归在观察到正样本y=1时会试图将设置得非常大。因为,在代价函数中的这一项会变的非常小。
好了,构建支持向量机就要开始咯:
将代价函数稍作修改,取z=1点,新的代价函数便由下图中粉线表示。
这和逻辑回归中使用的代价函数很相似。由两条线段组成,即位于右边的水平部分和位于左边的直线部分。当然,如果我们将使用新的代价函数(假定其为),前提条件是y=1。
另外一种情况是当y=0时,此时代价函数只剩下第二项。
而此时新的代价函数(假定其为)则是从0点开始的水平直线,然后是一条斜线,如上图。
下图是我们在逻辑回归中使用代价函数:
对于支持向量机而言,实质上我们要将前部分替换为,同样地,第二项替换为:
因此,对于支持向量机,最小化问题为:
首先,我们要除去这一项,因为仅是个常量,无论前面是否有这一项,最终得到的最优值都是一样的。
举个简单的例子:假定有个最小化问题:即要求当取得最小值时的值,这时最小值为:当时取得最小值。
而如果将这个目标函数乘上常数10,这里最小化问题就变成了:求使得最小的值,结果并不会发生任何变化。因此,删去常量m并不会改变取得最小值时的值。
【【MindSpore(跟着小Mi一起机器学习】支持向量机(上))】第二点修改看这里。对于逻辑回归中的目标函数,第一项是训练样本的代价,第二项是正则化项,可以简单看作是这样一个式子,而需要做的是通过设置不同正则参数达到优化目的。这样,我们就能够权衡对应的项,使得训练样本拟合的更好,即最小化A;还是保证正则参数足够小,更多地注重B项。但在支持向量机中,我们通常会使用一个不同的参数C来替换这里的。优化目标为最小化。 因此,在逻辑回归中,如果把设为一个非常大的值,意味着给予B更大的权重。而这里,就对应于将C设定为非常小的值。因此,这只是一种不同的方式来控制A与B之间的平衡,即用参数来决定是偏向于第一项的优化还是第二项。(当然,小Mi认为我们也可以把这里的参数C看作,大家觉得有道理不?)
最终支持向量机的总体优化目标就可以表示为:
最后有一点不同的是,支持向量机并不会像逻辑回归一样输出概率。支持向量机则是进行了一个直接的预测,预测y的值等于1还是0:
以上便是支持向量机假设函数的形式。
2 大边界的直观理解
上图是支持向量机模型的代价函数,在左边画出了代价函数,此函数用于正样本,而在右边画出了代价函数。而最小化这些代价函数的必要条件又是什么呢?如果有一个正样本y=1,则只有在时,代价函数才等于0。换句话说,如果有一个正样本,我们会希望,反之,如果y=0,函数只有在的区间里函数值为0。事实上,如果有一个正样本y=1,则其实我们仅仅要求大于等于0,就能将该样本正确分类,这是因为如果的话,我们的模型代价函数值为0,类似地,如果你有一个负样本,则仅需要就会将样本正确分类。但是,支持向量机的要求更高,不是恰好可以正确分类这么简单,即不是略大于0就可以了,我们需要的是比0值大很多以及比0小很多,比如大于等于1和小于等于-1,这就相当于在支持向量机中嵌入了一个安全间距。
而在支持向量机中,这个间距又会导致什么结果呢?举个特例。我们将这个常数C设置成一个非常大的值。比如我们假设C的值为100000或者其它非常大的数,然后来观察支持向量机会给出什么结果?
如果C非常大,则最小化代价函数的时候,我们将会很希望找到一个使第一项为0的最优解。
输入一个训练样本,标签为y=1,如要令第一项为0,需要找到一个,使得;类似地,对于训练样本y=0,为了使函数的值为0,需要。因此,优化问题就是选择什么样的参数才能使得第一项等于0,同时需要遵循约束条件:如果是等于1的,那么;如果样本是一个负样本,:
当解决这个优化问题的时候,也就是最小化这个关于变量的函数时,我们会得到一个非常有趣的决策边界。
具体而言,(其中有正样本,也有负样本)可以看到这个数据集(其中有正样本,也有负样本)是线性可分的。
比如上图的绿线就是一个决策边界可以把正样本和负样本分开,但是多多少少看起来并不是非常自然,粉线是另一条决策边界,可以勉强将正样本和负样本分开。而黑线看起来好得多,在分离正样本和负样本上它显得的更好。从数学上来讲,这条黑线拥有更大的距离,这个距离叫做间距(margin)。
具体来说,黑色的决策界和训练样本之间有更大的最短距离。然而粉线和蓝线离训练样本就非常近,在分离样本的时候就会比黑线表现差。因此,这个距离就叫做支持向量机的间距,而这是使得支持向量机具有鲁棒性的原因,因为它在分离数据时会尽量用一个最大间距来分离样本。所以支持向量机有时也被称为大间距分类器。
那么为什么这个优化问题会产生大间距分类器呢?
一开始我们就将这个大间距分类器中的正则化因子常数设置的非常大,将其设为了100000,因此对上图中的数据集,也许我们将选择黑线这样的决策界,从而最大间距地分离开正样本和负样本。
那么在让代价函数最小化的过程中,我们希望找出在y=1和y=0两种情况下都使得代价函数中左边的这一项尽量为零的参数。如果我们找到了这样的参数,则我们的最小化问题便转变成:
实际上,支持向量机要比这个大间距的视图更加复杂,尤其是当我们只使用大间距分类器的时候,学习算法会对异常点非常敏感,比如我们加入一个额外的正样本。
在这里,仅仅基于一个异常值,仅仅基于一个样本,决策界就从这条黑线变到这条粉线,这是很不合理的。而如果正则化参数C设置的非常大,它将决策界从黑线变到了粉线;但是如果C设置的小一点,那么我们最终会得到这条黑线。因此,大间距分类器的描述,仅仅是从直观上给出了正则化参数C非常大的情形,C的作用类似于,是我们之前使用过的正则化参数。但实际上应用支持向量机的时候,当C不是非常非常大的时候,它可以忽略掉一些异常点的影响,得到更好的决策界。甚至当数据不是线性可分的时候,支持向量机也可以给出很好的结果。
因此:
C较大时,相当于较小,可能会导致过拟合,高方差。
C较小时,相当于较大,可能会导致低拟合,高偏差。
今天关于支持向量机的介绍小Mi就先说到这啦,后面还会涉及支持向量机的偏差和方差,巴拉巴拉等等,我们下周再见~(挥手十分钟!)

    推荐阅读