在网上找了很多支持向量机的资料看都是迷迷糊糊没完全搞懂,可能是我理解能力比较差,最后还是 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):
把求和符号之外的负号放到求和部分里面,上式就等价于下面这个式子:
回忆一下,在逻辑回归中,假设函数是 hθ(x)=g(z)=11+e−z=11+e−θTX ,其图像如下图所示:
当我们用逻辑回归来进行分类的时候,一般有
即当 θTX≥0 时,预测为 1,当 θTX<0 时,预测为 0。再回到式子 (1-1),我们可以画出 (−log(11+e−θTx(i))) 和 (−log(1−11+eθTx(i))) 的图像,分别如下面的左图和右图中的黑色曲线所示(至于图像为什么是这种形状,读者可以不难根据其公式画出):
而在支持向量机中,我们不仅要求
θTX≥0
或
θTX<0
,还要求
θTX>>0
或
θTX<<0
的时候才分别预测
y=1
或
y=0
,一般可以取1作为界限。我们令:
上面这两个函数分别对应于左图和右图中紫红色的分段线。我们用 Cost1(θTx(i)) 和 Cost0(θTx(i)) 分别替换 (−log(11+e−θTx(i))) 和 (−log(1−11+eθTx(i))) 之后得到:
加上正则化项后为:
在 SVM 中,我们不用除以样本数量 m ,并且两个求和项都除以
其实,参数 C 和逻辑回归中的
2.什么是大间隔(Large Margin Intuition)
都说 SVM 是一个大间隔分类器,现在就来讲一讲什么是大间隔。
在误差函数
J(θ)
中,如果我们将
C
的值设置为一个非常大的数,那么误差函数将会给
那么,现在反过来想,既然
C
非常大,就会使得
1)如果
y=1
,要求
θTX≥1
,(不仅是
θTX≥0
);
2)如果
y=0
,要求
θTX≤−1
,(不仅是
θTX<0
)。
(回忆一下前面,上面这个约束以 1 作为阈值是因为 Cost1(θTx(i))=max(0,K(1−z)),Cost0(θTx(i))=max(0,K(1+z)) ,所以上面的约束以 1 作为阈值才能使 A=0 )。
好了,通过设置非常大的正则化参数
C
,再加上上面对参数
在 SVM 的训练过程中,会最小化上面这个误差函数( 此文章不包括SVM的训练,SVM 的训练涉及到较多的数学知识和一些数值计算技巧,而且也不推荐大家自己写代码来训练 SVM,有一个非常好的库叫做 libsvm,可以直接调用接口进行训练自己的 SVM)。
和逻辑回归不同的是,如下图所示,SVM 的决策边界会最大限度地离正样本和负样本尽可能地远。决策边界和离决策边界最近的那个样本之间的距离就称为 间隔(margin)。这也正是 SVM 被称为大间隔分类器的原因。
需要注意的是,仅当 C 非常大是,才会有“大间隔分类”的效果。同时,如果有一些样本太偏离大多数样本的总体位置,可以减小
可能对于上面这个不太像解释的解释还是感到很疑惑,其实大间隔就如上图中所示的一样, 支持向量机的决策边界会在正负样本之间离正负样本尽可能的远。下面来看其中的数学原理。
3.最大间隔分类背后的数学原理(Mathematics Behind Large Margin Classification)
先来看看什么是向量的内积。假如我们有两个向量:
我们记向量 v 的长度为
如上图,我们把 v 在
内积就讲这么多,相信大家在高中都学过。现在我们回到上一节,回忆一下,在使得
A=∑mi=1[y(i)Cost1(θTx(i))+(1−y(i))Cost0(θTx(i))]=0
之后,误差函数简化为
J(θ)=C⋅0+12∑nj=1θ2j=12∑nj=1θ2j
,可以改写为:
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群