吴恩达--支持向量机

支持向量机(Support Vector Machines)

优化目标

支持向量机(Support Vector Machine)。逻辑回归神经网络相比,支持向量机,或者简称SVM,在学习复杂的非线性方程提供了一种更为清晰,更加强大的方式。因此,在接下来的视频中,我会探讨这一算法。在稍后的课程中,我也会对监督学习算法进行简要的总结。当然,仅仅是作简要描述。但对于支持向量机,鉴于该算法的强大和受欢迎度,在本课中,我会花许多时间来讲解它。它也是我们所介绍的最后一个监督学习算法。

正如我们之前开发的学习算法,我们从优化目标开始。那么,我们开始学习这个算法。为了描述支持向量机,事实上,我将会从逻辑回归开始展示我们如何一点一点修改来得到本质上的支持向量机。

观察之前的逻辑回归算法

扫描二维码关注公众号,回复: 3093335 查看本文章

大边界的直观理解

   

人们有时将支持向量机看作是大间距分类器。在这一部分,我将介绍其中的含义,这有助于我们直观理解SVM模型的假设是什么样的。

 

    

如果你有一个正样本,我们会希望反之,如果y是等于0的,我们观察一下,函数,它只有在的区间里函数值为0。这是支持向量机的一个有趣性质。

    事实上,如果你有一个正样本y=1,则其实我们仅仅要求()就能将该样本恰当分出,这是因为如果的话,我们的模型代价函数值为0,类似地,如果你有一个负样本,则仅需要就会将负例正确分离。但是,支持向量机的要求更高,不仅仅要能正确分开输入的样本,即不仅仅要求,我们需要的是比0值大很多,比如大于等于1,我也想这个比0小很多,比如我希望它小于等于-1,这就相当于在支持向量机中嵌入了一个额外的安全因子**。或者说安全的间距因子。

    当然,逻辑回归做了类似的事情。但是让我们看一下,在支持向量机中,这个因子会导致什么结果。具体而言,我接下来会考虑一个特例。我们将这个常数CC设置成一个非常大的值。比如我们假设C的值为100000或者其它非常大的数,然后来观察支持向量机会给出什么结果?

具体而言

   所以支持向量机也叫做大间距分类器

事实上,支持向量机现在要比这个大间距分类器所体现得更成熟,尤其是当你使用大间距分类器的时候,

你的学习算法会受异常点(outlier) 的影响。比如我们加入一个额外的正样本。

    当出现了一个异常点:  当C非常大时,它会从黑线变成粉线。

                                   当C不够大时,它仍然会是黑线

因此,C的作用相当于1/λ 。

C不是非常大的时候,它可以忽略掉一些异常点的影响,得到更好的决策界。甚至当你的数据不是线性可分的时候,支持向量机也可以给出好的结果。

___________________________________________________________________________________________

 

大间隔分类器的数学原理

    

    接下来忽略掉截距,令θ0=0,这样更容易画示意图。我将特征数n置为2,因此我们仅有两个特征x1,x2,现在我们来看一下目标函数,支持向量机的优化目标函数。当我们仅有两个特征,即n=2时,这个式子可以写作:我们只有两个参数θ1,θ2。你可能注意到括号里面的这一项是向量θ的范数,或者说是向量θ的长度。我的意思是如果我们将向量θ写出来,那么我刚刚画红线的这一项就是向量θ的长度或范数。这里我们用的是之前学过的向量范数的定义,事实上这就等于向量θ的长度。

当然你可以将其写作θ1,θ2,如果θ0等于0,那就是θ1,θ2的长度。在这里我将忽略θ0,这样来写θ的范数,它仅仅和θ1,θ2有关。但是,数学上不管你是否包含,其实并没有差别,因此在我们接下来的推导中去掉θ0不会有影响这意味着我们的目标函数是等于。因此支持向量机做的全部事情,就是极小化参数向量θ范数的平方,或者说长度的平方

    

   

知道上面两点之后

向量机会试图最大化p(i)。


核函数

    为了获得上图所示的判定边界,我们的模型可能是

的形式。

我们可以用一系列的新的特征f来替换模型中的每一项。

这些高阶项是得到更多特征的方式

 

特征的定义:

我们能得到什么样的预测函数:

给定一个训练样本,我们准备计算出三个特征变量f1,f2,f3

这样,图中红色的封闭曲线所表示的范围,便是我们依据一个单一的训练实例和我们选取的地标所得出的判定边界,在预测时,我们采用的特征不是训练实例本身的特征,而是通过核函数计算出的新特征f1,f2,f3

    这就是我们如何定义标记点核函数来训练出非常复杂的非线性决策边界的方法。 我们通过标记点相似性函数来定义新的特征变量


核函数2

 

具体实现过程:

代价函数相应的修改成


使用SVM

1.选择c

2.选择核函数

3.如果选择了高斯核函数:

               接下来就是根据使用的支持向量机软件包

    目前为止,我们已经讨论了SVM比较抽象的层面,在这个视频中我将要讨论到为了运行或者运用SVM。你实际上所需要的一些东西:支持向量机算法,提出了一个特别优化的问题。但是就如在之前的视频中我简单提到的,我真的不建议你自己写软件来求解参数θ,因此由于今天我们中的很少人,或者其实没有人考虑过自己写代码来转换矩阵,或求一个数的平方根等我们只是知道如何去调用库函数来实现这些功能。同样的,用以解决SVM最优化问题的软件很复杂,且已经有研究者做了很多年数值优化了。因此你提出好的软件库和好的软件包来做这样一些事儿。然后强烈建议使用高优化软件库中的一个,而不是尝试自己落实一些数据。有许多好的软件库,我正好用得最多的两个是liblinear和libsvm,但是真的有很多软件库可以用来做这件事儿。你可以连接许多你可能会用来编写学习算法的主要编程语言。

在高斯核函数之外我们还有其他一些选择,如:

多项式核函数(Polynomial Kernel)

字符串核函数(String kernel)

卡方核函数( chi-square kernel)

直方图交集核函数(histogram intersection kernel)

等等...

这些核函数的目标也都是根据训练集和地标之间的距离来构建新特征,这些核函数需要满足Mercer's定理,才能被支持向量机的优化软件正确处理

多类分类问题

假设我们利用之前介绍的一对多方法来解决一个多类分类问题。如果一共有k个类,则我们需要k个模型,以及k个参数向量θ。我们同样也可以训练k个支持向量机来解决多类分类问题。但是大多数支持向量机软件包都有内置的多类分类功能,我们只要直接使用即可。

尽管你不去写你自己的SVM(支持向量机)的优化软件,但是你也需要做几件事:

1、是提出参数C的选择。我们在之前的视频中讨论过误差/方差在这方面的性质。

2、你也需要选择内核参数或你想要使用的相似函数,其中一个选择是:我们选择不需要任何内核参数,没有内核参数的理念,也叫线性核函数。因此,如果有人说他使用了线性核的SVM(支持向量机),这就意味这他使用了不带有核函数的SVM(支持向量机)。

从逻辑回归模型,我们得到了支持向量机模型,在两者之间,我们应该如何选择呢?

 

下面是一些普遍使用的准则:**

nn为特征数,m为训练样本数。

(1)如果相较于m而言,n要大许多,即训练集数据量不够支持我们训练一个复杂的非线性模型,我们选用逻辑回归模型或者不带核函数的支持向量机。

(2)如果n较小,而且m大小中等,例如n在 1-1000 之间,而m在10-10000之间,使用高斯核函数的支持向量机。

(3)如果n较小,而m较大,例如n在1-1000之间,而m大于50000,则使用支持向量机会非常慢,解决方案是创造、增加更多的特征,然后使用逻辑回归或不带核函数的支持向量机。

    值得一提的是,神经网络在以上三种情况下都可能会有较好的表现,但是训练神经网络可能非常慢,选择支持向量机的原因主要在于它的代价函数是凸函数,不存在局部最小值。

猜你喜欢

转载自blog.csdn.net/qq_29373285/article/details/82526660