coursera机器学习课程第七周——课程笔记

来源:互联网 发布:中国预警机 知乎 编辑:程序博客网 时间:2024/05/29 14:28

        本周介绍了支持向量机(support vector machine)的相关知识,下面回顾下学到的知识。

   在机器学习中,支持向量机(英语:support vector machine,常简称为SVM,又名支持向量网络)是在分类与回归分析中分析数据的监督式学习模型与相关的学习算法。给定一组训练实例,每个训练实例被标记为属于两个类别中的一个或另一个,SVM训练算法创建一个将新的实例分配给两个类别之一的模型,使其成为非概率二元线性分类器。SVM模型是将实例表示为空间中的点,这样映射就使得单独类别的实例被尽可能宽的明显的间隔分开。然后,将新的实例映射到同一空间,并基于它们落在间隔的哪一侧来预测所属类别。

    除了进行线性分类之外,SVM还可以使用所谓的核技巧有效地进行非线性分类,将其输入隐式映射到高维特征空间中。

    当数据未被标记时,不能进行监督式学习,需要用非监督式学习,它会尝试找出数据到簇的自然聚类,并将新数据映射到这些已形成的簇。将支持向量机改进的聚类算法被称为支持向量聚类,当数据未被标记或者仅一些数据被标记时,支持向量聚类经常在工业应用中用作分类步骤的预处理。——来自维基百科


    先来回顾一下逻辑回归:


        如果y=1,那么我们想要的假设函数的结果近似于1,此时对应的Z要远大于0;类似的当y=0时假设函数结果近似于0,对应Z远小于0。


        首先画出y=0和y=1时的损失函数,分别画出两条折线,折线与逻辑回归损失函数的图像相近。这里,我们将y=1中近似的那条折线称为cost1(z),下标对应分类y=1情况,同理将y=0中那条折线称为cost0(z)。


   上面是逻辑回归与SVM损失函数的对比,之间的关系是C的性质相当于逻辑回归中的1/λ。

    SVM的假设函数如下:

   

大间距分类

支持向量机的损失函数如下:


   如上图所示,当y=1时,我们希望Z的值>=1(而不是逻辑回归中的>=0);当y=0时,希望Z的值<=-1。

    

   使用SVM分类器可以得到与样本距离最大的决策边界,如上图所示,margin即为与样本间的距离。

    

   如上图所示,存在异常点,当C的值很大时,决策边界变为倾斜的这条线,显然这条边界不是很好的;当我们适当减小C的值时就变为了竖直的这条线,该边界比倾斜的那条边界要合适。注意:这里C作用其实等同于1/λ,在C不是很大时候,可以对包含异常数据、以及线性不可分的数据有比较好的处理效果。

Kernel(核函数)

核函数的本质:

  1. 实际中,我们会经常遇到线性不可分的样例,此时,我们的常用做法是把样例特征映射到高维空间中去;
  2. 如果凡是遇到线性不可分的样例,一律映射到高维空间,那么这个维度大小是会高到可怕的。该怎么办?
  3. 此时,核函数就隆重登场了,核函数的价值在于它虽然也是讲特征进行从低维到高维的转换,但核函数绝就绝在它事先在低维上进行计算,而将实质上的分类效果表现在了高维上,也就如上文所说的避免了直接在高维空间中的复杂计算。

    假设现在你是一个农场主,圈养了一批羊群,但为预防狼群袭击羊群,你需要搭建一个篱笆来把羊群围起来。但是篱笆应该建在哪里呢?你很可能需要依据牛群和狼群的位置建立一个“分类器”。

      

    比较上图这几种不同的分类器,我们可以看到SVM完成了一个很完美的解决方案。


    如上图所示,我们要在训练集中找到一个非线性分界面。按照惯例,我们会构造假设函数,可以看到假设函数中项数很多,如果全部使用计算量会非常大,那么我们就需要选择有用的或是更好的特征。


    如图所示为新特征的计算方法(相似性度量公式),即与原特征L(1)、L(2)、L(3)的相似度。这里的相似度函数就称为核函数,此处我们使用的是高斯核函数。


    从上图可以看出,如果x和L(1)离的很近,此处f1近似为1;如果样本x和L(1)离得很远,f1近似为0。所以我们能从给定的样本中计算得到f1、f2、f3。


    记点x=[3, 5], σ^2 = 1, f1 = 1,在最大位置上,此时如果x移动,离此位置越来越远,则f1的值逐渐接近0。

    当σ不断增大时,曲面图变得越来越平缓,;当σ不断减少时,曲面图会越来越陡。


    此时,当假设函数>=0时我们预测y为“1”。例如圈里的x点处,我们计算得到假设函数值为0.5>0,所以x处样本预测y为“1”。实际上,对于靠近L(1)与L(2)的点,我们预测结果为1;对于原理L(1)与L(2)的点,我们预测结果为0。我们画出决策边界如图,在边界内判定为1,边界外判定为0。从这里我们可以看出得到判定边界至少有俩个因素非常重要,一个是标记点,一个就是核函数。

    那么该怎么选择标记点呢?


    即直接将训练样本作为标记点。如上图所示,将每一个标记点位置与训练样本点位置对应。按照上面的相似性度量所表示,特征函数描述的是每一个样本距离整个样本集中样本的距离(包括本身)。

        我们将样本x映射到相似度量函数从而得到新特征。“特征函数就是在描述每一个样本距离样本集中样本的距离(包括它自己)”,所以必然有一项会计算到与它自己的距离,此时结果为1,见上图,这样,我们得到所有的新特征,并组合成一个新的特征向量,同理,我们可以添加f0=1。

    SVM中参数对模型的影响:


Using an SVM

        线性核函数:线性核函数也叫无核函数,满足θ'x≥0,则预测结果y=1。当你的特征数量n很大,但数据量m很小时,由于数据量不足,在这种情况下如果使用其他核函数,你可能会过拟合,因此,此时线性核函数是一个合理的选择。

     高斯核函数:也叫Radial Basis Function 简称RBF,它能够把原始特征映射到无穷维。注意:如果你有大小很不一样的特征变量,在使用高斯核函数之前,对它们进行归一化是很重要的。

    多项式核函数:多项式核函数一般用的也很少。

下面有张图说明在低维线性不可分时,映射到高维后就可分了,使用高斯核函数: 

   

注意:

    

    不管是哪种方法,都需要进行特征归一化。


        对于多分类问题,选择合适的SVM包即可,大部分SVM包已经内置了多分类函数。

    另一种方法就是前面逻辑回归中提到的一对多方法(One-vs-all),假设K分类,则需要训练出K个SVM,每一个SVM把一个类同其他类分开。

      

  n是特征变量的个数,m是训练样本数

  • 1、如果n(相对于m)大很多时,使用逻辑回归,或者使用无核函数的SVM(线性核函数)。 
    如文本分类的问题,特征数量n=10000,而且如果你的训练集大小为m=10,在这个问题中,你有10000个特征变量,对应10000个词,但是你只有10个训练样本。这种情况下就比较适合使用逻辑回归或者线性核函数的SVM了。
  • 2、如果n较小,m是中等大小,(例如n为1到1000之间的值,m为10到10000之间的值)那么使用高斯核函数的SVM效果好一些。
  • 3、如果n很小,m很大时(如n=1000,m=100000+),那么高斯核函数的SVM运行起来会很慢,这种情况下,需要尝试手动地创建更多的特征变量,然后使用逻辑回归或者无核函数的SVM(线性核函数)。

注意:逻辑回归和不带核函数的SVM它们是非常相似的算法,如上图中,有时候它们表现是相似的。根据实现的具体情况,其中一个可能会比另一个更加有效。

SVM vs NN?

什么时候采用神经网络呢? 

    对于上面所有的情况,一个好的神经网络也很可能会非常有效,但是神经网络训练起来可能会很慢。但是如果你有一个非常好的SVM实现包,它会运行得比较快,比神经网络快很多。

SVM vs NN

    SVM的优化问题,实际上是一个凸优化问题。因此好的SVM优化软件包总是会找到全局最小值,或者接近它的值。对于SVM,你不需要担心局部最优。在实际应用中,局部最优对神经网络来说不是非常大,但是也不小。所以使用SVM,你不用考虑这部分问题。


积累积累

        By 信念

阅读全文
0 0
原创粉丝点击