支持向量机的目的是什么?
支持向量机的目标是找到使训练数据的边缘最大化的最优分离超平面。
支持向量机需要训练数据,是一种监督学习算法。
支持向量机也是一种分类方法。
举个简单的例子:
我们根据身高和体重在图1中画出点,可以通过这些点区分男女。给出一个点,能不能判断男女。
比如size=180,weight = 75,那么这个点代表的人是男还是女?
什么是分离超平面?
回答上面的问题,我们可通过划一条线分开代表男的点和代表女的点,如下图
那么为什么叫超平面?明明就是一条直线。
这是因为这里的数据只有两维的,三维的时候是平面,更高维我们就称之为超平面,支持向量机能够处理任意数量的维度。
最优分离超平面
还是上面的例子,你可以找到分离超平面(如下图),但是它不一定是最优的。
假如我们选择绿线作为分离超平面,这是会出现错误。有三个女性被归类为男性。
如果我们选择黑线,结果会更好。这就就我们为什么要找最优的分离超平面。
什么是余量和如何使用余量找到最优分离超平面?
如上图,当给定一个超平面,数据点到平面的距离就能够求得。超平面到距离最近的数据点的距离就是余量。
余量是无人区,在余量里面不包含任何的数据点。如图margin A. 那么下图的margin B不也可以吗?可以是可以的,但是你会发现它余量小。 超平面到数据点的距离也大,余量越大。因此,我们找的最优分离超平面就是一个距离数据点余量最大的那个。
怎么计算余量?
支持向量机,这里先拿出跟数学相关的两个字“向量”。
所以这里会介绍一些向量的东西并介绍怎么使用向量作为工具去计算余量。不是很理解的朋友建议回去翻翻高数,不过都是基本的知识。
向量是什么
向量就是给定一个点A,连接原点到点A,并具有由O到A方向的连线,表示为OA→OA→. 书本的定义:向量就是具有大小和方向东西。
大小(magnitude)
向量的大小(magnitude)写作∥x∥‖x‖,称为模(norm).
通过(Pythagoras’ theorem)毕达哥拉斯定理求模如下图,
OA2=OB2+AB2OA2=OB2+AB2
OA2=32+42OA2=32+42
∥x∥=5‖x‖=5
方向(direction)
定义向量u(u1,u2)u(u1,u2)的方向为向量w(u1∥u∥,u2∥u∥)w(u1‖u‖,u2‖u‖)。如下图:
可以看到:
cos(θ)=u1∥u∥cos(θ)=u1‖u‖
cos(α)=u2∥u∥cos(α)=u2‖u‖
所以向量u(3,4)u(3,4)方向向量是w(0.6,0.8)w(0.6,0.8)。方向向量的模为1.如下图
两个向量的加法
任意给给两个向量u(u1,u2)u(u1,u2) ,v(v1,v2)v(v1,v2)两个向量相加:u+v=(u1+v1,u2+v2)u+v=(u1+v1,u2+v2)
两个向量的减法
任意给给两个向量u(u1,u2)u(u1,u2) ,v(v1,v2)v(v1,v2)两个向量相减:u−v=(u1−v1,u2−v2)u−v=(u1−v1,u2−v2)。 方向指向被减数的方向。
向量的点积(dot product)
x⋅y=∥x∥∥y∥cos(θ)x⋅y=‖x‖‖y‖cos(θ), θθ 为两个向量的夹角。
推导过程如下:
根据前面的分析我们知道,
cos(β)=adjacenthypotenuse=x1∥x∥cos(β)=adjacenthypotenuse=x1‖x‖
sin(β)=oppositehypotenuse=x2∥x∥sin(β)=oppositehypotenuse=x2‖x‖
cos(α)=adjacenthypotenuse=y1∥y∥cos(α)=adjacenthypotenuse=y1‖y‖
sin(α)=oppositehypotenuse=y2∥y∥sin(α)=oppositehypotenuse=y2‖y‖
从图片中得到 θ=β−αθ=β−α, 那么
cos(θ)=cos(β−α)cos(θ)=cos(β−α)
cos(β−α)=cos(β)cos(α)+sin(β)sin(α)cos(β−α)=cos(β)cos(α)+sin(β)sin(α)
于是,
cos(θ)=cos(β−α)=cos(β)cos(α)+sin(β)sin(α)cos(θ)=cos(β−α)=cos(β)cos(α)+sin(β)sin(α)
cos(θ)=x1∥x∥y1∥y∥+x2∥x∥y2∥y∥cos(θ)=x1‖x‖y1‖y‖+x2‖x‖y2‖y‖
cos(θ)=x1y1+x2y2∥x∥∥y∥cos(θ)=x1y1+x2y2‖x‖‖y‖
∥x∥∥y∥cos(θ)=x1y1+x2y2‖x‖‖y‖cos(θ)=x1y1+x2y2
点积的算术定义就出来,
x⋅y=x1y1+x2y2=∑i=12(xiyi)x⋅y=x1y1+x2y2=∑i=12(xiyi)
从上面的集合定义也能知道,两个向量的点积是一个数。
向量的正交投影
如图给定两个向量x,y,那么向量x在y上的投影为z。
通过上面的学习我们知道,
cos(θ)=∥z∥∥x∥cos(θ)=‖z‖‖x‖
∥z∥=∥x∥cos(θ)‖z‖=‖x‖cos(θ)
点积
cos(θ)=x⋅y∥x∥∥y∥cos(θ)=x⋅y‖x‖‖y‖
于是可以推导得
∥z∥=x⋅y∥y∥‖z‖=x⋅y‖y‖
另外我们知道方向向量的,如果u表示向量y的方向向量,u=y∥y∥u=y‖y‖, 那么向量x在向量y上面的投影可以由下式计算:
∥z∥=u⋅x‖z‖=u⋅x
我们还注意到,向量x在向量y上的投影得到的向量z,它的方向向量和向量y的方向向量是一致的,所以向量z可表示为z=∥z∥uz=‖z‖u。
知道了向量x在向量y上面的投影z后,我们就能够计算向量x-z的距离:
∥x−z∥=(3−4)2+(5−1)2−−−−−−−−−−−−−−−√=17−−√‖x−z‖=(3−4)2+(5−1)2=17
SVM 超平面
超平面方程
超平面方程的定义:
wTx=0wTx=0
wTxwTx计算两个向量的点积。
直线的方程y=ax+by=ax+b的另外一个表达形式 −b−ax+y=0−b−ax+y=0。给两个向量w⎛⎝⎜−b−a1⎞⎠⎟w(−b−a1),x⎛⎝⎜1xy⎞⎠⎟x(1xy), 写上面超平面定义的形式:
−b−ax+y=wTx=−b×(1)+(−a)×x+1×y−b−ax+y=wTx=−b×(1)+(−a)×x+1×y
既然两种表达式是一样的,那么为什么还要使用向量来定义超平面?
(1)对于高维的情况,向量的表示方式更好处理
(2)向量w对于超平面总是标准的(the vector w will always be normal to the hyperplane)。
计算点到超平面的距离
下图一个超平面把数据分成了两组。
超平面方程为x2=−2x1x2=−2x1,使用向量形式wTx=0wTx=0表示,w(21)w(21),x(x1x2)x(x1x2)
向量w如下图所示,计算点A(3,4)到超平面的距离,也就是计算A到它在超平面投影的距离。
我们把向量OA投影到向量w方向上,得到向量p,我们计算的距离是点A 到超平面的距离,但是从图中我们可以看到,向量OA在向量w方向上的投影就等于点A到超平面的距离,也就是向量p的模∥p∥‖p‖。
可以求得向量w的方向向量,p的方向与w是一样,这个方向向量也是p的方向向量:
∥w∥=22+12−−−−−−√=5–√‖w‖=22+12=5
u=(25–√,15–√)u=(25,15)
向量OA用a表示,根据上面的公式,可得向量p和它的模:
p=(u⋅a)up=(u⋅a)u
p=(205,105)p=(205,105)
p=(4,2)p=(4,2)
∥p∥=42+22−−−−−−√=25–√‖p‖=42+22=25
计算超平面的margin
余量定义为:
margin=2∥p∥=45–√margin=2‖p‖=45
所以通过计算得到了超平面的余量。
接下来介绍如何选择最优超平面的推理。你会看到:
- 怎么寻找最优超平面?
- 怎么计算两个超平面的距离?
- 什么是超平面优化问题?
怎么寻找最优超平面?
通过上面的分析,我们已经能够计算超平面余量了。但是可惜的是她并不是最优的超平面。最优超平面是数据到超平面余量最大的那个。
如下图,两根蓝线的间距M1并不是最大的余量,最大的余量应该是M2.
那么我们怎么通过M1找到M2呢?这里我们也会发现寻找最大的余量跟寻找最优超平面是同一回事。
怎么寻找最大余量?
根据已有的数据,选择两个中间不包含任何数据的超平面,然后最大化他们的距离,那么超平面就能确定了。 这个说起来简单,求起来并不容易。
Step1:有数据集,并能将他们分类
数据集通常由n个向量xixi组成,每一个xixi对应一个yiyi, yiyi的取值只能是两种情况1或者-1。
xixi可能是p维的。
所以数据集有n对(xi,yi)(xi,yi)元素组成,数学上用下面的公式表示:
D={(xi,yi)∣xi∈Rp,yi∈{−1,1}}ni=1D={(xi,yi)∣xi∈Rp,yi∈{−1,1}}i=1n
Step2: 选择两个中间不包含任何数据的超平面
对于p维(p>2)的数据,找到两个这样的平面是困难的。即使是二维的,有时也根本无法找到,如下图。所以,只有在数据线性可分的情况下,这样的两个平面才能找到。
前面讲到超平面可以使用wTx=0wTx=0表示。下面看看三维跟二维的区别。
三维的时候w(b,−a,1)w(b,−a,1),x(1,x,y)x(1,x,y),
w⋅x=y−ax+bw⋅x=y−ax+b
二维的时候w′(−a,1)w′(−a,1),x′(x,y)x′(x,y),
w′⋅x′=y−axw′⋅x′=y−ax
二维的超平面两面加b就得到了前面的通用表达式,
w′⋅x′+b=y−ax+bw′⋅x′+b=y−ax+b
w′⋅x′+b=w⋅xw′⋅x′+b=w⋅x
所以下面将使用二维的向量,给定一个超平面H0H0,满足w⋅x+b=δw⋅x+b=δ
选择与H0H0等距的两个超平面H1H1, H2H2,
w⋅x+b=δw⋅x+b=δ
w⋅x+b=−δw⋅x+b=−δ
这里为了简化问题,变量δδ取1。那么两个超平面为:
w⋅x+b=1w⋅x+b=1
w⋅x+b=−1w⋅x+b=−1
我们选择满足下面约束条件的所有超平面,对于xixi:
w⋅xi+b≥1for xihaving the class1w⋅xi+b≥1for xihaving the class1
w⋅xi+b≤−1for xihaving the class−1w⋅xi+b≤−1for xihaving the class−1
根据图解释一下上面的约束条件,如果xixi=A,因为A在超平面上,所以w⋅x+b=1w⋅x+b=1;同理对于点H,满足w⋅x+b=−1w⋅x+b=−1;那么在超平面w⋅x+b=1w⋅x+b=1右上方的点C,D,E,F,G满足约束条件w⋅x+b>1w⋅x+b>1;在超平面w⋅x+b=−1w⋅x+b=−1左下方的点I,J,K,L,M,N满足约束条件w⋅x+b<−1w⋅x+b<−1
我们想把上面两个约束条件用一个表达式表示,对于xixi对应取值yiyi 为-1的情况,w⋅xi+b≤−1w⋅xi+b≤−1, 两边同时乘以 yiyi,
yi(w⋅xi+b)≤yi(−1)yi(w⋅xi+b)≤yi(−1)
得到,
yi(w⋅xi+b)≥1yi(w⋅xi+b)≥1
对于xixi对应取值yiyi 为1的情况,两边同时乘以 yiyi, 等式没有改变,所以可以用下面的统一表达式表示上面约束条件:
yi(w⋅xi+b)≥1for all1≤i≤nyi(w⋅xi+b)≥1for all1≤i≤n
Step3最大化两个超平面的距离
a)寻找两个超平面的距离
现在我们有两个超平面H0H0和H1H1的方程以及H0H0上面的一个点x0x0, 我们如何求两个超平面的距离m。
我们找到与x0x0距离m的一个集合,只要找到一个垂直于超平面H1H1,长度为m的向量就可以。而垂直于超平面H1H1的向量就是w。
求出w的方向向量u,u=w∥w∥u=w‖w‖
m乘以u,得到向量k,k就是我们想要找的向量,如下图
通过上面的推导,我们把线段m转变成一个向量k,下面可以通过向量x0x0计算m。
向量z0z0既是 x0x0 和 kk 相加的结果,z0z0也是超平面上的一个点,所以用x0+kx0+k代替z0z0
w⋅(x0+k)+b=1w⋅(x0+k)+b=1
w⋅(x0+mw∥w∥)+b=1w⋅(x0+mw‖w‖)+b=1
w⋅x0+mw⋅w∥w∥+b=1w⋅x0+mw⋅w‖w‖+b=1
w⋅x0+m∥w∥2∥w∥+b=1w⋅x0+m‖w‖2‖w‖+b=1
w⋅x0+b=1−m∥w∥w⋅x0+b=1−m‖w‖
x0x0在超平面H0H0上面,满足w⋅x0+b=−1w⋅x0+b=−1,所以
−1=1−m∥w∥−1=1−m‖w‖
m=2∥w∥m=2‖w‖
通过上式,我们就能够计算m。
b)最大化超平面的距离
由上面的推导得到余量的计算公式:
m=2∥w∥m=2‖w‖
通过上面的式子,可以得出,w 的模越大,余量越小。
我们发现,最大化余量也就是最小化w的模。
这就变成了一个优化问题,在yi(w⋅xi+b)≥1yi(w⋅xi+b)≥1 中最小化(w,b), ∥w∥‖w‖.
解决这个优化问题,我们就能够得到最大的超平面余量。