吴恩达机器学习笔记(十二)

第十三章 支持向量机(SVM)

优化目标

    支持向量机在学习复杂的非线性方程时能够提供一种更为清晰个更加强大的方式。

    先回顾一下逻辑回归的相关概念,看如何进行改动可以得到支持向量机。逻辑回归的假设函数为,对应的图像如下:

    如果有样本y=1,希望能尽可能接近1,意味着远大于0;

    如果有样本y=0,希望能尽可能接近0,意味着远小于0。

    逻辑回归中的代价函数为:

    针对某一项的cost为:

    可以看到下图中SVM中对代价函数的改变:

    这里的log函数部分改变成了红色线所代表的cost函数。

    相应的代价函数变成了:

    于是得到支持向量机的总体优化目标,最小化下面的函数,就得到了SVM学习得到的参数,SVM中,我们常常用C代替λ

    与逻辑回归不同的是,支持向量机并不会输出概率,相对的得到的是通过这个优化这个代价函数得到一个参数θ支持向量机所做的是他直接进行一个预测,预测y是等于1还是等于0

    学习得到参数值θ后,这就是支持向量机的假设函数的形式。

直观上对大间距的理解

    有时候会把支持向量机叫做大间距分类器,本节中将会介绍这是什么意思,并给出直观的图像便于理解SVM假设。

    和逻辑回归相比较,在支持向量机中:

    如果有样本y=1,希望大于等于1,而不仅仅是大于等于0;

    如果有样本y=0,希望小于等于-1,而不仅仅是小于等于0。


    当C非常大时,我们希望跟在后面的累加部门为0,这样即可以得到:。

    归结起来这是一个条件极值问题。

    对于下面的这个例子,有不止一条直线可以把正负样本划分开,但是相比来说,黑色的分界线要好很多,它是更稳健的决策边界。

    从数学来说,这条黑色的决策边界拥有更大的距离,叫做边距,这个边距也叫做支持向量机的间距,这会使支持向量机具有鲁棒性。因此,支持向量机有时被称为大间距分类器。

    从这张图中能够更直观的观察出支持向量机户选择什么样的模型。

    对于下面大间距分类器,它是在常数C被设的非常大的情况下得出的:

    当有图中的异常点出现的时候,在常数C比较大的情况下,决策边界会从黑线变成红线,但如果常数C比较小,最后得到的还是黑线。

    所以,在本节的学习中,通过这些图像可以更直观地理解支持向量机是如何作为大间距分类器工作的。

大间距分类器的数学原理

    这一节将从数学的角度来看一下SVM。

    下面是上一节中给出的支持向量机模型中的优化目标函数,

    通过简化问题,我们知道要求的最小值就是||θ||的最小值,即θ的范数最小值 ,通过两个向量相乘的几何含义如下:

    通过上述计算可知,如果要求得||θ||的最小值,则要尽量的大。

    左边的图中:因为这里的很小要使,只能够让||θ||很大同样,这里的也很小要使,只能够让||θ||很大所以这不能够求||θ||的最小值。

    右边的图中:因为这里的很大要使,就可以让||θ||变得小了同样,这里的也很大,要使,也可以让||θ||变得小了。

    因此,通过选择的是右边图中的决策边界而不是左边的那个,支持向量机可以使参数θ的范数变小很多,意味着也变小很多,就可以达到最小化的目标。(

    这就是支持向量机产生大间距的分类现象,这样我们就从直观上感受了SVM作为大间距分类器的效果。

核函数

    这一节中将改造支持向量机来构造复杂的非线性分类器,下面将介绍核函数是什么以及如何使用它。

    之前的课程中有讲解用多项式解决非线性拟合问题:

     在这里我们通过引入核函数来解决这个问题。

     假设函数:

    手动的取3个点,把这些点叫做标记:

    给定x,根据与标记的距离计算新的特征:

    上述公式中的相似度函数(similarity用数学术语来说就是一个核函数 ,这里的核函数实际上是高斯核函数,即exp。

   是高斯核函数的参数,通过下面的图我们可以看出对函数图形的改变。

    以上讲述的内容能够帮助很好的理解核函数以及如何使用它在支持向量机中定义新的特征变量。

    下面将介绍如何在实际应用中应用核函数的思想,例如:如何处理支持向量机中的偏差方差的平衡。

    上面介绍了选择标记点的过程,使我们能够定义相似度函数,也就是核函数,那么关于标记点,在实际问题中,我们应该怎么选取呢? 

    给定m个训练样本,将选取与m个样本完全一样的位置作为标记点。

    这样,对于每一个训练集中的数据,我们都有一个m+1维向量与之对应。

    那么,上图中的向量就用于描述训练样本的特征向量。所以在给定核函数和相似度函数后,这就是我们如何使用简单的支持向量机。

    给定x的值,并对样本x做出预测,先要计算特征向量f,f是m+1维特征向量,这里之所以有m是因为有m个训练样本,于是就有m个标记点。

    大于等0时,预测y=1,,所以参数向量为m+1维,以上就是当已知参数时,怎么做出预测的过程。

    是否可以将核函数这个想法应用到其他算法上,比如逻辑回归。事实证明,如果愿意,的确可以将核函数这个想法用于定义特征向量,将标记点之类的技术用于逻辑回归算法,但是用于支持向量机的计算技巧,却不能较好的推广到其他算法诸如逻辑回归中,所以,将核函数用于逻辑回归时,将变得非常的慢,相比之下,支持向量机和核函数可以相得益彰。

    另一个值得注意的问题是,当使用支持向量机时,怎么选择支持向量机中的参数?

    首先选择的是优化目标中的参数C,C的作用和逻辑回归算法中的λ相似:

    如果使用较大的参数C,则对应着逻辑回归中较小的λ时的情况,意味着不使用正则化,就有可能得到一个低偏差但高方差的模型,更倾向于过拟合;

    如果使用较小的参数C,则对应着逻辑回归中较大的λ时的情况,意味着不使用正则化,就有可能得到一个高偏差但低方差的模型,更倾向于欠拟合。

    另一个要选择的参数是高斯核函数中的

    当偏大时,那么对应的相似度函数倾向于变得相对平滑,就有可能得到一个高偏差但低方差的模型;

    当偏小时,那么对应的相似度函数倾向于变得相对集中,就有可能得到一个低偏差但高方差的模型;

    这就是利用核函数的支持向量机算法。

使用SVM

    使用SVM的步骤:

    一般使用SVM的软件包(例如:liblinear,libsvm…)来解决参数问题。

    需要做的事情:

        ▷ 首先提出参数C的选择

        ▷ 需要选择内核参数或要使用的相似函数:


      如果选择了高斯核函数,接下来要根据使用的支持向量机软件包,实现一个核函数或相似函数。

     一个实现函数的注意事项:如果有大小很不一样的特征向量,很重要的事就是在使用高斯函数之前将这些特征变量的大小按比例归一化。

    不是所有可能提出来的相似函数都是有效的核函数,高斯核函数和线性核函数以及有时可能会用到的核函数,这些函数都需要满足一个技术条件,叫作默塞尔定理。

    需要满足这个条件的原因是因为支持向量机算法或SVM的实现函数有许多熟练的数值优化技巧,为了有效的求解参数θ,在最初的设想里,这些决策都用以将注意力仅仅限制在可以满足默塞尔定理的核函数上,这个定理所做的是确保所有的SVM包、所有的SVM软件包能够使用大类的优化方法并从而迅速得到参数θ。

    多类别分类中的讨论:

输出在多个类别间恰当的判定边界

    许多SVM的包已经内置了多分类的函数,因此,如果使用一个类似这样的模式,只是使用这些内置函数,但是会取得不错的效果。

    除此之外,一个多分类的方法是使用one-vs-all的方法,要做的是训练K个SVM,如果有K个类别,用以将每个类别从其他类中区分开来,这会给你K参数的向量,这会尝试从其他所有类别中识别出y=1的类别。

    逻辑回归VS支持向量机:

    n代表特征的数量时,m是训练样本的数量时,应该如何选择两者中的一个呢?

        ▷ 当特征数量n很大,训练样本个数m不大时。比如,一个文本分类问题,特征矩阵的维度可能非常大,并且训练集的个数不大,这时候通常使用逻辑回归或不带核函数的SVM,使用线性核函数。(n=10000,m=10~1000)

         当特征数量n比较少,并且训练样本m大小适中,这时候使用带高斯核函数的SVM。(n=1~1000,m=10~10000)

         当特征数量n很小,训练样本个数m很大时,这时会尝试手动的创建更多的特征变量,然后使用逻辑回归或不带核函数的SVM。(n=1~1000,m=50000+)

         对所有不同的问题、不同的设计,设计良好的神经网络可能会非常有效,但是神经网络训练起来可能会比较慢。

     SVM仍然被认为是非常强大的机器学习算法之一,这是一个体系,包含了什么时候一个有效的方法去学习复杂的非线性函数,因此,实际上,与逻辑回归、神经网络、SVM一起使用这些方法来提高学习算法,有能力可能构造更加强大的机器学习系统和强大的算法工具。

猜你喜欢

转载自blog.csdn.net/qq_34611579/article/details/80825309