机器学习笔记08:支持向量机(一)(SVM)

在网上找了很多支持向量机的资料看都是迷迷糊糊没完全搞懂,可能是我理解能力比较差,最后还是 Coursera 上吴大神的 Machine Learning 课程把我一下子讲懂了。


由于支持向量机是由逻辑回归(Logistic Regression)衍生而来的,所以学习 SVM 之前务必完全理解逻辑回归。另外,文章中有些关于逻辑回归的东西(例如符号标记、函数的具体由来及其的一些性质)还请参考之前的两篇文章,这里就不在赘述了:
《机器学习笔记04:逻辑回归(Logistic regression)、分类(Classification)》
《机器学习笔记05:正则化(Regularization)、过拟合(Overfitting)》

支持向量机的应用很广泛,在工业、计算机行业和学术界都有比较多的应用,而且它应该是最常用的分类器。所以喜欢 Machine Learning 的童鞋们应该好好掌握 SVM 这一大杀器。


一、最大间隔分类(Large Margin Classification)

1.优化目标(Optimization Objective)

在了解 SVM 之前,我们先来看看之前的逻辑回归的误差函数(Cost function):

J(θ)=1mi=1m[y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]=1mi=1m[y(i)log(11+eθTx(i))+(1y(i))log(111+eθTx(i))]

把求和符号之外的负号放到求和部分里面,上式就等价于下面这个式子:
J(θ)=1mi=1m[y(i)log(11+eθTx(i))(1y(i))log(111+eθTx(i))]=1mi=1m[y(i)(log(11+eθTx(i)))+(1y(i))(log(111+eθTx(i)))](11)

回忆一下,在逻辑回归中,假设函数是 hθ(x)=g(z)=11+ez=11+eθTX ,其图像如下图所示:

这里写图片描述

当我们用逻辑回归来进行分类的时候,一般有
y={10if hθ(x)0.5 ;if hθ(x)<0.5 .

即当 θTX0 时,预测为 1,当 θTX<0 时,预测为 0。再回到式子 (1-1),我们可以画出 (log(11+eθTx(i))) (log(111+eθTx(i))) 的图像,分别如下面的左图和右图中的黑色曲线所示(至于图像为什么是这种形状,读者可以不难根据其公式画出):


这里写图片描述


而在支持向量机中,我们不仅要求 θTX0 θTX<0 ,还要求 θTX>>0 θTX<<0 的时候才分别预测 y=1 y=0 ,一般可以取1作为界限。我们令:

Cost1(θTx(i))=max(0,K(1z))Cost0(θTx(i))=max(0,K(1+z))

上面这两个函数分别对应于左图和右图中紫红色的分段线。我们用 Cost1(θTx(i)) Cost0(θTx(i)) 分别替换 (log(11+eθTx(i))) (log(111+eθTx(i))) 之后得到:
J(θ)=1mi=1m[y(i)Cost1(θTx(i))+(1y(i))Cost0(θTx(i))]

加上正则化项后为:
J(θ)=1mi=1m[y(i)Cost1(θTx(i))+(1y(i))Cost0(θTx(i))]+λ2mj=1nθ2j

在 SVM 中,我们不用除以样本数量 m ,并且两个求和项都除以 λ,并记 C=1λ 。所以支持向量机的误差函数为:
J(θ)=Ci=1m[y(i)Cost1(θTx(i))+(1y(i))Cost0(θTx(i))]+12j=1nθ2j

其实,参数 C 和逻辑回归中的 λ 的功能是一样的,同样是为了控制 欠拟合过拟合之间的平衡。从 SVM 的误差函数中我们可以看出,如果要最小化误差,即使第一个求和项为0。即最优化支持向量机,就需要使得参数 θ 对于训练集中的每组样本都要达到: 当 y=1 θTx(i)1 ;当 y=0 θTx(i)1 。另外,后面的求和项,即惩罚项(正则化项),是为了使训练得到的 θ 比较的小,如此一来, 我们对 θTx(i) 的约束条件就造成了最大间隔分类的效果。下面会具体解释最大间隔。


2.什么是大间隔(Large Margin Intuition)

都说 SVM 是一个大间隔分类器,现在就来讲一讲什么是大间隔。

在误差函数 J(θ) 中,如果我们将 C 的值设置为一个非常大的数,那么误差函数将会给 θ 加以约束使得

A=i=1m[y(i)Cost1(θTx(i))+(1y(i))Cost0(θTx(i))]=0
其原因涉及到凸二次规划以及概率论中的先验概率分布,这里不做深究。( 留个位置在这里,以后写了贴链接)。

那么,现在反过来想,既然 C 非常大,就会使得 A=0,要使得 A=0 ,我们就需要在训练过程中对 θ 做如下约束:

1)如果 y=1 ,要求 θTX1 ,(不仅是 θTX0 );
2)如果 y=0 ,要求 θTX1 ,(不仅是 θTX<0 )。

(回忆一下前面,上面这个约束以 1 作为阈值是因为 Cost1(θTx(i))=max(0,K(1z)),Cost0(θTx(i))=max(0,K(1+z)) ,所以上面的约束以 1 作为阈值才能使 A=0 )。


好了,通过设置非常大的正则化参数 C ,再加上上面对参数 θ 的约束,我们使得 A=0 ,那么,误差函数 J(θ) 可以简化为如下形式:

J(θ)=C0+12j=1nθ2j=12j=1nθ2j

在 SVM 的训练过程中,会最小化上面这个误差函数( 此文章不包括SVM的训练,SVM 的训练涉及到较多的数学知识和一些数值计算技巧,而且也不推荐大家自己写代码来训练 SVM,有一个非常好的库叫做 libsvm,可以直接调用接口进行训练自己的 SVM)。


和逻辑回归不同的是,如下图所示,SVM 的决策边界会最大限度地离正样本和负样本尽可能地远。决策边界和离决策边界最近的那个样本之间的距离就称为 间隔(margin)。这也正是 SVM 被称为大间隔分类器的原因。

这里写图片描述

需要注意的是,仅当 C 非常大是,才会有“大间隔分类”的效果。同时,如果有一些样本太偏离大多数样本的总体位置,可以减小 C 的值来防止过拟合。

可能对于上面这个不太像解释的解释还是感到很疑惑,其实大间隔就如上图中所示的一样, 支持向量机的决策边界会在正负样本之间离正负样本尽可能的远。下面来看其中的数学原理。


3.最大间隔分类背后的数学原理(Mathematics Behind Large Margin Classification)

先来看看什么是向量的内积。假如我们有两个向量:

u=[u1u2],v=[v1v2]

我们记向量 v 的长度为 v,它表示从原点到点 (v1,v2) 的直线距离。由毕达哥拉斯定理可知,向量 v 的长度为 v=v21+v22。我们知道 vTu=vcosαu ,其中 α 为向量 v u 的夹角:

这里写图片描述

如上图,我们把 v u 上的投影 vcosα 记为 p 。所以:vTu=vcosαu=pu=u1v1+u2v2,需要注意的是,如果它们的夹角大于 90°,那么向量的内积将为负值,因为 cosα<0


内积就讲这么多,相信大家在高中都学过。现在我们回到上一节,回忆一下,在使得 A=mi=1[y(i)Cost1(θTx(i))+(1y(i))Cost0(θTx(i))]=0 之后,误差函数简化为 J(θ)=C0+12nj=1θ2j=12nj=1θ2j ,可以改写为:

J(θ)=12j=1nθ2j=12(θ21+θ22+...+θ2n)=12(θ21+θ22+...+θ2n)2=12θ2
即,我们要最小化参数向量 θ 的长度。同样地,我们有:
x(i)θT=p(i)θ=θ1x(i)1+θ2x(i)2+...+θnx(i)n
注意,我们一般把样本特征向量 x(i) 投影到参数向量 θ 上。所以,我们在上一节中提到的约束条件就变为:

1)如果 y=1 ,要求 p(i)θ1
2)如果 y=0 ,要求 p(i)θ1

由于在训练过程中, θ 会变得很小,而又必须满足上述的约束条件,所以 p(i)=x(i)cosα 将会变得尽可能的大,因为 x(i) 为常量,所以在训练过程中,参数向量 θ 与 各个训练样本特征值向量 x(i) 的夹角会越来越小。我们知道,训练完成时,决策边界是一条满足 θ1x1+θ2x2+...+θnxn=0 的曲线或者直线,所以向量 θ 和各个训练样本 x(i) 是尽可能保持垂直的(任意维数),从而导致决策边界会离正负样本尽可能地远。(读者可以自行画图体验一下。)


二、核函数(Kernels)

用markdown编辑器写数学公式,只要篇幅一长,编写就会很卡,所以核函数另起一篇。先留个位置在这里。


以上就是支持向量机的大概内容(不包括核函数),核函数请参考上面链接的文章
如有错误,期望您能纠正,留言或者加入QQ群

——–转载请注明出处,谢谢——–

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值