Coursera-吴恩达-机器学习-(第7周笔记)支持向量机

此系列为 Coursera 网站Andrew Ng机器学习课程个人学习笔记(仅供参考)
课程网址:https://www.coursera.org/learn/machine-learning

Week 7 —— support vector machines

目录

一 支持向量机的引入

1-1从逻辑回归引入SVM

支持向量机(Support Vector Machine,SVM)是一个广泛应于在工业界和学术界的分类算法。与逻辑回归和神经网络相比,它在学习非线性复杂方程上提供了一种更加清晰、更加有效的思路。这一部分我们就来介绍这一算法。

为了描述支持向量机,我们会先从逻辑回归开始讲起,再一点一点修正得到最后的支持向量机。

在逻辑回归中,我们已经熟悉了如下所示的假设函数 hθ(x) 和逻辑函数曲线:
这里写图片描述
这里写图片描述

(1)如果 y=1,上式中只有第一项起作用,第二项为 0。此时,画出函数图像:


这里写图片描述
这里写图片描述

(2)如果 y=0,上式中只有第二项起作用,第一项为 0,此时代价随 z的变化曲线如下图所示:

这里写图片描述
此时,我们也可以用两条线段代替如上曲线,作为新的代价函数 cost0(z) ,如下图桃红色部分:
这里写图片描述
我们接下来就通过 cost1(z)、 cost0(z) 构建支持向量机。

1-2 SVM的优化目标

这里写图片描述
由于无论是否有 1/m 都不会影响最小化的结果,在使用支持向量机时,我们常常忽略 1/m。

对于逻辑回归正则化代价函数,我们可以用 A+λB 来表示,其中A 表示训练样本的代价,B 表示正则化项,通过设置λ的值来控制 A和B之间的平衡 ,使拟合效果更好。

而支持向量机则采用另一个参数 C来控制 A和B之间的平衡,优化目标为:CA+B。

所以,支持向量机(SVM)的优化目标为:
这里写图片描述

二 最大间距分类器

2-1 SVM的决策边界

有时,人们会将支持向量机称为最大间距分类器,这一部分会给大家解释其中原因,这样我们对SVM的假设得到一个更直观的理解。
这里写图片描述
上面的式子是SVM的优化目标(代价函数),中间左图是 cost1(z) 的图像,右侧是 cost0(z) 的图像。

我们来看怎样使得上面的代价函数最小:
这里写图片描述
现在再来考虑我们的优化问题,我们可以选择一个参数使得 A=0,SVM的优化目标就转化为:
这里写图片描述
SVM的这个要求会对决策边界有什么影响呢?

以一个线性可分数据集为例,有多条直线可以把正样本与负样本分开,如下图:
这里写图片描述

SVM会趋于以黑色决策边界来分离正、负样本,因为黑色线与训练样本之间有更大的最短距离,在分离正负样本上的表现会更好。而粉色线和绿色线离样本比较近,在分离样本时表现就会比较差。SVM总是努力用最大间距(margin)来分离样本,这也是它为什么被称为大间距分类器,同时这也是SVM具有鲁棒性的原因。

事实上,SVM比大间距分类器表现得更成熟,比如异常点的影响,如图:
这里写图片描述

参数C 控制着对误分类的训练样本的惩罚,当我们将参数 C 设置的较大时,优化过程会努力使所有训练数据被正确分类,这会导致仅仅因为一个异常点决策边界就能从黑色线变成粉色线,这是不明智的。SVM可以通过将参数 C 设置得不太大而忽略掉一些异常的影响,这样以来,对于这个例子,我们仍然会得到黑线代表的决策边界。即使训练样本不是如上图那样线性可分,SVM也能将它们恰当地分开。这里,C 的作用类似于 1λ。

2-2 SVM 背后的数学原理

这一部分内容涉及到向量内积部分的知识,可以自行复习一下。

这是我们之前提到的SVM的优化目标:
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

我们来看对于下面的数据集,SVM会选择哪种决策边界(假设 θ0=0)。
这里写图片描述

(1)小间距决策边界

如图,绿色直线为决策边界,这个决策边界离样本的距离很近。根据前面所说,SVM不会选择小间距决策边界,我们来看看为什么。
这里写图片描述
这里写图片描述
由于这种小间距决策边界的选择与SVM的优化目标不符,故SVM不会选择这种决策边界。

(2)大间距决策边界
如果选用下图绿色线作为决策边界:

这里写图片描述
这里写图片描述
反过来看,通过在优化目标里让 ∥θ∥ 不断变小,SVM就可以选择出上图所示的大间距决策边界。这也是SVM可以产生大间距分类器的原因。

以上我们都是假设 θ0=0,这会让决策边界通过原点,幸运的是即使 θ0≠0,SVM会产生大间距分类仍然是成立的,但这里我们不做证明。

三 核函数(Kernels)

SVM利用核函数可以构造出复杂的非线性分类器。如下图:
这里写图片描述

3-1 SVM的假设函数

这里写图片描述
这里写图片描述

3-2 非线性决策边界特征变量的定义

例如假设函数:
这里写图片描述
之前在多项式回归中也提到,加入这些高阶项,我们可以得到更多的特征变量,但是我们并不知道这些高阶项是否是我们真正想要的,在计算机视觉中,输入是很多像素,如果用这些高阶项作为特征变量,运算量将会变得非常大。那么,对于SVM,有没有比这些高阶项更好的特征项?

3-3 高斯核函数

给定 x,我们可以提前手动选取一些标记点,然后根据与这些标记点的接近程度来计算新的特征项。如下图手动选择了3个标记点 l(1),l(2),l(3),如下图:
这里写图片描述
这里写图片描述
这种相似度,用数学术语来说,就是核函数(Kernels)。核函数有不同的种类,其中常用的就是我们上述这种高斯核函数。

我们可以将上式改写为:
这里写图片描述
这里写图片描述
这里写图片描述

3-4通过核函数和标记点 构造复杂的非线性边界

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

3-5标定点的选择及特征向量的构造

这里写图片描述
这里写图片描述

四 SVM总结

4-1 假设函数及优化目标

这里写图片描述
这里写图片描述

4-2 SVM的参数选择

参考上一讲的方差与偏差部分:
这里写图片描述
这里写图片描述

4-3使用SVM

在具体实现时,我们不需要自己编写代码来最优化参数 θ,而是使用SVM软件包(如:liblinear,libsvm等)来最优化参数 θ。
当然了,在使用这些软件包时,我们需要自己选择参数 C 以及选择使用哪种核函数。

例如:选用线性核函数(即,没有使用核函数),若 θ0+θ1f1+θ2f2+θ3f3⩾0,则 hθ(x)=1。最终这会产生一个线性分类器。liblinear就是使用线性核函数。

如果特征数 n 很大,而训练样本数 m 很小,使用线性核函数产生一个线性分类器就较为适合,不容易过拟合。
如果特征数 n 很小,而训练样本数 m 很大,就适合用一个核函数去实现一个非线性分类器,高斯核函数是个不错的选择。
这里写图片描述
核函数还有一些其他选择,需要注意的是,不是所有的相似度函数都是有效的核函数,要成为有效的核函数,需要满足默塞尔定理(Mercer’s Theorem)这个技术条件。

还有一些其他核函数如:多项式核函数,字符串核函数、卡方核函数等等,但大多数时候我们用的还是高斯核函数。

使用SVM的步骤:
这里写图片描述

4-4 用SVM解决多类别分类问题

这里写图片描述

4-5 SVM和逻辑回归的选择

我们如何选择使用SVM还是逻辑回归来解决分类问题?

①如果特征数 n 相对于训练样本数 m 来说很大:
则应该使用逻辑回归或者线性核函数(无核)的SVM。 m 较小时,使用线性分类器效果就挺不错了,并且也没有足够的数据去拟合出复杂的非线性分类器。

②如果特征数 n 很小,训练样本数 m 中等大小:
则应该使用高斯核函数SVM。

③如果特征数 n 很小,训练样本数 m 很大:则高斯核函数的SVM运行会很慢。这时候应该创建更多的特征变量,然后再使用逻辑回归或者线性核函数(无核)的SVM。

对于以上这些情况,神经网络很可能做得很好,但是训练会比较慢。实际上SVM的优化问题是一种凸优化问题,好的SVM优化软件包总是能找到全局最小值或者是接近全局最小的值。