Andrew Ng 机器学习笔记 11 :支持向量机(Support Vector Machine)

原创 2018年04月15日 14:37:25

构建支持向量机

1.替换逻辑回归函数

在逻辑回归中使用的代价函数J(θ):

对于支持向量机而言,实际上,我们要将

  • 上面式子中的这一项:(loghθ(x(i)))替换为:cost1(z),即:cost1(θTx(i))
  • 同样,这一项:((log(1hθ(x(i)))))替换为:cost0(z),即:cost0(θTx(i))

所以对于支持向量机的最小化代价函数问题,代价函数的形式如下:

minθ1m[i=1my(i)cost1(θTx(i))+(1y(i))cost0(θTx(i))]+λ2mj=1nθj2

2.去除多余的常数项 1/m

现在按照支持向量机的惯例,我们去除1m这一项,因为这一项是个常数项,即使去掉我们也可以得出相同的θ最优值:

minθi=1m[y(i)cost1(θTx(i))+(1y(i))cost0(θTx(i))]+λ2j=1nθj2

3.正则化项系数的处理

在逻辑回归的目标函数中,正则化项优化形式:

A+λB

在支持向量机的目标函数中,正则化项优化形式:

CA+B

因此,在逻辑回归中,如果给λ一个很大的值,那么就意味着给与B了一个很大的权重,而在支持向量机中,就相当于对C设定了一个非常小的值,这样一来就相当于对B给了比A更大的权重。

在支持向量机中的我们的整个优化目标函数:

minθCi=1m[y(i)cost1(θTx(i))+(1y(i))cost0(θTx(i))]+12j=1nθj2

最后有别于逻辑回归的一点,对于支持向量机假设函数的形式如下:

hθ(x)=1   if θTx0

hθ(x)=0   if θTx<0

而不是逻辑回归中的S型曲线:

hθ(x)=11+ex

大间距分类器

如果你有一个正样本,即y=1时,那么代价函数cost1(z)的图像如下:

可以看出,只有在z1(即θTx1)时(不仅仅是≥0),代价函数cost1(z)的值才等于0。

反之,如果你有一个负样本,即y=0时,那么代价函数cost0(z)的图像如下:

可以看出,只有在z1(即θTx1)时(不仅仅是<0),代价函数cost0(z)的值才等于0。

这就相当于在支持向量机中嵌入了一个额外的安全因子(或者说是安全距离因子)。

SVM决策边界

下面这个既有正样本又有负样本的数据集,可以看出有很多直线都可以把正负样本区分开,支持向量机会选择黑色的这一条直线,因为它看起来更加稳健。在数学上来讲就是这条直线拥有相对于训练数据更大的最短距离,这个所谓的距离就是指间距(margin):

这就是支持向量机拥有鲁棒性的原因。因为它一直努力用一个最大间距来分离样本。因此支持向量机分类器有时又被称为大间距分类器。

大间距分类器中的异常值

  • 当有一个异常值产生时,我们的算法会受到异常值的影响。
  • 如果我们将支持向量机中的正则化因子C设置的非常大,则会得到一条粉色的决策边界。
  • 如果我们适当的减小C的值,最终还是会得到那条黑色的决策边界的。如果数据是线性不可分的话,支持向量机也可以恰当的将它们分开。

值得提醒的是C的作用其实等同于1λ,λ就是我们之前用到的正则化参数。在支持向量机中,C不是很大的时候,可以对包含异常数据、以及线性不可分的数据有比较好的处理效果。

SVM的数学原理

向量内积

假设我们有两个二维向量:

u=[u1u2] v=[v1v2]

我们把

uTv

的计算结果称作向量u和v之间的内积。

其中我们用||u||来表示u的范数(即u的长度),因此||u||的计算公式如下:

||u||=u12+u22

将向量v投影到向量u上,如下图我们对向量v做一个相对于向量u的直角投影:

投影之后的长度就是图中红线p的长度:

p=vu

同时也有另外一种计算内积的方式:

uTv=p·||u||

通过这种方式计算出来的内积,答案和之前也是一样的。事实上,如果你想要使用将u投影到v上来用这种方式来计算内积,得到的答案也是相同的。

在向量的内积问题中,如果两个向量的夹角小于90°,那么p的符号就是为正;如果两个向量的夹角大于90°,那么p的符号就为负。

决策边界

考虑下面这里的训练样本:

  • 其中假设截距为0,即θ0=0,也就意味着决策边界是过原点的。假设有这样一条绿色的决策边界
  • 由于决策边界和参数向量是正交的(斜率相乘结果为-1),我们可以绘制出对应的参数向量θ
  • 对于训练样本x(1),可以画出这个样本向量到θ的投影p(1)
  • 类似的,我们也可以画出第二个样本x(2)向量到θ的投影p(2)
  • 我们会发现,这些p(i)将会是一些非常小的数。

因此当我们考察优化目标函数的时候:

  • 对于正样本(y(i)=1 ,即图中的”x”样本)而言,我们需要p(i)·||θ||1,由于p(i)非常小,也就意味着||θ||需要非常大。
  • 对于负样本(y(i)=1,即图中的”o”样本)而言,我们需要p(i)·||θ||1,由于p(i)非常小,也就意味着||θ||需要非常大。
  • 但我们的实际目标是希望找到一个参数θ,使得它的范数||θ||是尽可能小的,因此这并不是一个好的决策边界,因为我们的||θ||比较大。

对于下面这个决策边界来说,情况就会有很大的不同:

因为投影p的长度变大了,随之θ的范数||θ||也相应的变小了。这就意味着通过选择第二种远离样本的决策边界,支持向量机可以使参数θ的范数||θ||变小很多。

这就是为什么支持向量机可以产生大间距分类的原因。

怎么寻找最大间隔

点到超平面的距离

  • 点到超平面的函数间距:

    y(x)=wTx+b

  • 分类的结果:

    f(x)=sign(wTx+b)
    (其中:sign表示>0为1,<0为-1,=0为0)

  • 点到超平面的几何间距:

    d(x)=(wTx+b)||w||

    (||w||表示w矩阵的二范数=> wTw, 点到超平面的距离也是类似的)

  • 现在我们可以通过几何间隔来描述最优直线的条件,设g是数据集中离直线最近的点到直线的几何间隔,gi表示某个数据点到直线的几何间隔,则问题描述为:

    maxg,s.t.,gig

    即最大化数据集中最小的几何间隔。

拉格朗日乘子法

  • 类别标签用-1、1是为了后期方便 label(wTx+b) 的标识和距离计算;如果
    label(wTx+b)>0
    表示预测正确,否则预测错误。
  • 现在目标很明确,就是要找到w和b,因此我们必须要找到最小间隔的数据点,也就是前面所说的支持向量

    • 目标函数:

      arg:maxw,b(min[label(wTx+b)]1||w||)

    • label(wTx+b)>=1
      因为0~1之间,得到的点是存在误判的可能性,所以要保障 min[label(wTx+b)]=1,才能更好降低噪音数据影响。

    • 所以本质上是求
      arg:maxw,b1||w||
      也就说,我们约束(前提)条件是: label(wTx+b)=1
  • 新的目标函数求解: arg:maxw,b1||w||

    • 进一步分析,该式又等价于:
      arg:minw,b(12||w||2)
      本质上就是求线性不等式的二次优化问题(求分隔超平面,等价于求解相应的凸二次规划问题)
  • 通过拉格朗日乘子法,求二次优化问题

    • 假设需要求极值的目标函数 (objective function) 为 f(x,y),限制条件为

      φ(x,y)=M
      其中 M=1

    • g(x,y)=Mφ(x,y)
      临时φ(x,y)表示下文中 label(wTx+b)

    • 定义一个新函数:

      F(x,y,λ)=f(x,y)+λg(x,y)

    • αλα>=0,代表要引入的拉格朗日乘子(Lagrange multiplier)

    • 那么:

      L(w,b,α)=12||w||2+i=1nαi[1label(wTx+b)]

    • 因为:

      label(wTx+b)>=1,α>=0

      所以
      α[1label(wTx+b)]<=0

    i=1nαi[1label(wTx+b)]<=0

    • label(wTx+b)>1
      α=0 ,表示该点为非支持向量

    • 相当于求解:

      maxαL(w,b,α)=12||w||2

    • 如果求:

      minw,b12||w||2
      也就是要求:

    minw,b(maxαL(w,b,α))

  • 现在转化到对偶问题的求解

  • 现在分2步

  • 先求:

    minw,bL(w,b,α)=12||w||2+i=1nαi[1label(wTx+b)]

    就是求L(w,b,a)关于[w, b]的偏导数, 得到w和b的值,并化简为:L和a的方程。

  • 终于得到公式:

    maxα(i=1mαi12i,j=1mlabeli·labelj·αi·αj·<xi,xj>)

    约束条件: α>=0 并且 i=1mαi·labeli=0

kernels(核函数)

如果你有一个像这个样的训练集:

首先我们定义三个新的特征变量(但是对于实际问题而言,我们可以定义非常多的特征变量):

将这三个点标记为l(1)l(2)l(3)

f1=similarity(x,l(1))=exp(||xl(1)||22σ2)

这里similarite(x,l(1))是一种相似度的度量,度量样本x与第一个标记l(1)的相似度。

因此,我们可以依次写出特征 f1f2f3:

f1=similarity(x,l(1))=exp(||xl(1)||22σ2)

f2=similarity(x,l(2))=exp(||xl(2)||22σ2)

f3=similarity(x,l(3))=exp(||xl(3)||22σ2)

  • 这里的similarite(x,l)函数,就被称为核函数(Kernels)。在这里,我们的例子中所说的核函数,实际上是高斯核函数,在后面我们还会见到不同的核函数。

  • 核函数我们通常不写作similarity(x,l(i)),而是写作:

    k(x,l(i))

首先让我们来看看第一个标记:

f1=similarity(x,l(1))=exp(||xl(1)||22σ2)=exp(j=1n(xjlj(1))22σ2)

  • 假设,xl(1),即x与其中一个标记点非常接近,那么这个欧氏距离||xl(1)||就会接近0,则:

    f1exp(022σ2)1

  • 相反的,如果x离l(1)很远,那么会有:

    f1exp((large number)22σ2)0

  • 也就是说,给出一个训练样本x,我们就能基于我们之前给出的标记点l(1)l(2)l(3) 来计算出三个新的特征变量 f1f2f3

核函数的图形

假设我们有两个特征x1和x2,假设我们第一个标记点是l(1)

l(1)=[35]

假设:

σ2=1

则:

f1=k(x,l(1))=exp(||xl(1)||22σ2)

的图像为:

σ2f 的值的影响:

σ2=1 σ2=0.5 σ2=3

获取预测函数

  • 给定一个训练样本x,我们要计算出三个特征变量f1f2f3
  • 如果θ0+θ1f1+θ2f2+θ3f30,则预测函数的预测值为1,即y=1
  • 这就是一个我们如何通过标记点,以及核函数,来训练出非常复杂的非线性判别边界的方法。

选取标记点(landmark)

对于数据集的正样本和负样本,我们直接将训练样本作为标记点,最终能得到m个标记点:

l(1)l(2)l(m)

这说明,特征函数基本上是在描述每一个样本距离样本集中其他样本的距离。

最终我们能得到一个特征向量,我们将特征向量记为f,按照惯例,如果我们需要的话,可以添加额外的特征f0f0的值始终为1:

f=[f0f1f2fm]

当给定核函数和相似度函数后,我们按照这个方法来使用支持向量机。

使用SVM

支持向量机是一个特定的优化问题,我们只需要调用库函数来实现这些功能即可,常用的库有:liblinear和libsvm。
尽管你不需要自己去实现SVM,但你也需要做以下几件事:

  • 选择参数C
  • 选择核函数(相似度函数)

核函数的选择

线性核函数(无核函数):

  • 不用任何核函数(不用任何核函数也叫作线性核函数):
  • 即对于预测结果y=1,满足θTx0
  • 它只是一个标准的线性分类器。
  • 当特征数量n很大,但数据量m很小时,由于数据量不足,在这种情况下如果使用其他核函数,你可能会过拟合,因此,此时线性核函数是一个合理的选择。

高斯核函数:

fi=exp(||xl(i)||22σ2),

  • 如果σ2很大,可能得到一个较高偏差、较低方差的分类器。
  • 如果σ2很小,可能得到一个较低偏差、较高方差的分类器。
  • 如果原来的特征变量x是n维的,而且n很小,样本数量m很大时,高斯核函数会是一个不错的选择。

逻辑回归 vs SVM vs 神经网络

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

  • n>>m:使用逻辑回归,或者使用无核函数的SVM(线性核函数)。

    比如你有一个文本分类的问题,特征数量n=10000,而且如果你的训练集大小为m=10,在这个问题中,你有10000个特征变量,对应10000个词,但是你只有10个训练样本。这种情况下就比较适合使用逻辑回归或者线性核函数的SVM了。

  • n较小,m中等大小:(例如n为1到1k之间的值,m为10到10k之间的值)那么使用高斯核函数的SVM效果好一些。

  • n很小,m很大:(例如n=1k,m=100k+),那么高斯核函数的SVM运行起来会很慢,这种情况下,需要尝试手动地创建更多的特征变量,然后使用逻辑回归或者无核函数的SVM(线性核函数)。

    逻辑回归和不带核函数的SVM它们都是非常相似的算法,他们会做相似的事情,并且表现也相似,但是根据你实现的具体情况,其中一个可能会比另一个更加有效。

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

SVM的优化问题,实际上是一个凸优化问题。因此好的SVM优化软件包总是会找到全局最小值,或者接近它的值。

对于SVM,你不需要担心局部最优。在实际应用中,局部最优对神经网络来说不是非常大的问题,但是也不小。所以使用SVM,你不用考虑这部分问题。

[机器学习] Coursera笔记 - Support Vector Machines

本文主要整理自“Support Vector Machines (SVMs)”课程的笔记资料和一些经典教材,同时也参考了网上经典的关于SVM的博客,包含了SVM的一些基本概念和推导,供读者参考。...
  • walilk
  • walilk
  • 2016-12-09 18:03:59
  • 3602

Andrew Ng《Machine Learning》第七讲——支持向量机SVM(Support Vector Machine)

  • zhonglj0314
  • zhonglj0314
  • 2017-02-15 18:28:46
  • 388

Andrew NG机器学习课程笔记系列之——Introduction to Machine Learning

引言 本系列文章是本人对Andrew NG的机器学习课程的一些笔记,如有错误,请读者以课程为准。 在现实生活中,我们每天都可能在不知不觉中使用了各种各样的机器学习算法。 例如,当你每一次使用 Goog...
  • mydear_11000
  • mydear_11000
  • 2016-03-12 13:27:44
  • 1250

Andrew Ng机器学习入门学习笔记(六)之支持向量机(SVM)

一.支持向量机的引入支持向量机(SVM)是一种极受欢迎的监督学习算法,为了引入支持向量机,我们首先从另一个角度看逻辑回归。1.从单个样本代价考虑假设函数hθ(x)=11+e−θTxh_\theta(x...
  • SCUT_Arucee
  • SCUT_Arucee
  • 2015-12-28 15:20:53
  • 10569

Andrew Ng机器学习课程笔记--week3

Logistic Regression一、内容概要 Classification and Representation Classification Hypothesis Representatio...
  • marsggbo
  • marsggbo
  • 2017-08-03 11:55:45
  • 544

Andrew NG 机器学习 笔记-week5-神经网络的学习(Neural Networks:Learning)

一、代价函数(Cost Function)首先引入一些便于稍后讨论的新标记方法:假设神经网络的训练样本有 m 个,每个包含一组输入 x 和一组输出信号 y L =神经网络总层数 sls_l = ll...
  • zxm1306192988
  • zxm1306192988
  • 2017-09-30 09:18:15
  • 433

Andrew Ng机器学习week7(Support Vector Machines)编程习题

Andrew Ng机器学习week7(Support Vector Machines)编程习题gaussianKernel.mfunction sim = gaussianKernel(x1, x2,...
  • u010043538
  • u010043538
  • 2017-06-02 00:34:30
  • 600

《机器学习》(Machine Learning)——Andrew Ng 斯坦福大学公开课学习笔记(二)

第3集  欠拟合和过拟合的概念 一、线性回归的解释 ,最后一项表示误差项(独立同分布),对前面未被建模的因素进行考虑,一般误差项的加和,根据中心极限定理,符合高斯分布 推出:...
  • u013896242
  • u013896242
  • 2015-08-06 21:02:46
  • 1488

Andrew Ng机器学习笔记1

吴恩达机器学习课程的学习笔记~
  • panglinzhuo
  • panglinzhuo
  • 2016-04-26 16:15:47
  • 1546
收藏助手
不良信息举报
您举报文章:Andrew Ng 机器学习笔记 11 :支持向量机(Support Vector Machine)
举报原因:
原因补充:

(最多只允许输入30个字)