zoukankan      html  css  js  c++  java
  • 支持向量机 数学推导 Part1

    支持向量机的目的是什么?

    支持向量机的目标是找到使训练数据的边缘最大化的最优分离超平面。
    支持向量机需要训练数据,是一种监督学习算法。
    支持向量机也是一种分类方法。
    举个简单的例子:
    我们根据身高和体重在图1中画出点,可以通过这些点区分男女。给出一个点,能不能判断男女。
    比如size=180,weight = 75,那么这个点代表的人是男还是女?


    fig1

    什么是分离超平面?

    回答上面的问题,我们可通过划一条线分开代表男的点和代表女的点,如下图


    fig2

    那么为什么叫超平面?明明就是一条直线。
    这是因为这里的数据只有两维的,三维的时候是平面,更高维我们就称之为超平面,支持向量机能够处理任意数量的维度。

    最优分离超平面

    还是上面的例子,你可以找到分离超平面(如下图),但是它不一定是最优的。


    fig3

    假如我们选择绿线作为分离超平面,这是会出现错误。有三个女性被归类为男性。

    fig4

    如果我们选择黑线,结果会更好。这就就我们为什么要找最优的分离超平面。

    fig5

    什么是余量和如何使用余量找到最优分离超平面?


    fig6

    如上图,当给定一个超平面,数据点到平面的距离就能够求得。超平面到距离最近的数据点的距离就是余量。
    余量是无人区,在余量里面不包含任何的数据点。如图margin A. 那么下图的margin B不也可以吗?可以是可以的,但是你会发现它余量小。 超平面到数据点的距离也大,余量越大。因此,我们找的最优分离超平面就是一个距离数据点余量最大的那个。

    fig7


    怎么计算余量?

    支持向量机,这里先拿出跟数学相关的两个字“向量”。
    所以这里会介绍一些向量的东西并介绍怎么使用向量作为工具去计算余量。不是很理解的朋友建议回去翻翻高数,不过都是基本的知识。

    向量是什么

    向量就是给定一个点A,连接原点到点A,并具有由O到A方向的连线,表示为OA. 书本的定义:向量就是具有大小和方向东西。


    fig1

    大小(magnitude)

    向量的大小(magnitude)写作x,称为模(norm).
    通过(Pythagoras’ theorem)毕达哥拉斯定理求模如下图,
    OA2=OB2+AB2
    OA2=32+42
    x=5


    fig2

    方向(direction)

    定义向量u(u1,u2)的方向为向量w(u1u,u2u)。如下图:


    fig3

    可以看到:

    cos(θ)=u1u

    cos(α)=u2u

    所以向量u(3,4)方向向量是w(0.6,0.8)。方向向量的模为1.如下图


    fig4

    两个向量的加法

    任意给给两个向量u(u1,u2)v(v1,v2)两个向量相加:u+v=(u1+v1,u2+v2)


    fig5

    两个向量的减法

    任意给给两个向量u(u1,u2)v(v1,v2)两个向量相减:uv=(u1v1,u2v2)。 方向指向被减数的方向。


    fig6

    向量的点积(dot product)

    xy=xycos(θ), θ 为两个向量的夹角。
    推导过程如下:


    fig7

    根据前面的分析我们知道,
    cos(β)=adjacenthypotenuse=x1x

    sin(β)=oppositehypotenuse=x2x

    cos(α)=adjacenthypotenuse=y1y

    sin(α)=oppositehypotenuse=y2y

    从图片中得到 θ=βα, 那么
    cos(θ)=cos(βα)

    cos(βα)=cos(β)cos(α)+sin(β)sin(α)

    于是,
    cos(θ)=cos(βα)=cos(β)cos(α)+sin(β)sin(α)

    cos(θ)=x1xy1y+x2xy2y

    cos(θ)=x1y1+x2y2xy

    xycos(θ)=x1y1+x2y2

    点积的算术定义就出来,

    xy=x1y1+x2y2=i=12(xiyi)

    从上面的集合定义也能知道,两个向量的点积是一个数。

    向量的正交投影

    如图给定两个向量xy,那么向量xy上的投影为z


    fig8

    通过上面的学习我们知道,
    cos(θ)=zx

    z=xcos(θ)

    点积
    cos(θ)=xyxy

    于是可以推导得
    z=xyy

    另外我们知道方向向量的,如果u表示向量y的方向向量,u=yy, 那么向量x在向量y上面的投影可以由下式计算:
    z=ux

    我们还注意到,向量x在向量y上的投影得到的向量z,它的方向向量和向量y的方向向量是一致的,所以向量z可表示为z=zu

    知道了向量x在向量y上面的投影z后,我们就能够计算向量x-z的距离:

    xz=(34)2+(51)2=17


    fig9

    SVM 超平面

    超平面方程

    超平面方程的定义:

    wTx=0

    wTx计算两个向量的点积。

    直线的方程y=ax+b的另外一个表达形式 bax+y=0。给两个向量w(ba1),x(1xy), 写上面超平面定义的形式:

    bax+y=wTx=b×(1)+(a)×x+1×y

    既然两种表达式是一样的,那么为什么还要使用向量来定义超平面?
    (1)对于高维的情况,向量的表示方式更好处理
    (2)向量w对于超平面总是标准的(the vector w will always be normal to the hyperplane)。

    计算点到超平面的距离

    下图一个超平面把数据分成了两组。


    fig10

    超平面方程为x2=2x1,使用向量形式wTx=0表示,w(21),x(x1x2)
    向量w如下图所示,计算点A(3,4)到超平面的距离,也就是计算A到它在超平面投影的距离。

    fig11

    我们把向量OA投影到向量w方向上,得到向量p,我们计算的距离是点A 到超平面的距离,但是从图中我们可以看到,向量OA在向量w方向上的投影就等于点A到超平面的距离,也就是向量p的模p
    可以求得向量w的方向向量,p的方向与w是一样,这个方向向量也是p的方向向量:
    w=22+12=5

    u=(25,15)

    向量OAa表示,根据上面的公式,可得向量p和它的模:
    p=(ua)u

    p=(205,105)

    p=(4,2)

    p=42+22=25

    计算超平面的margin

    余量定义为:

    margin=2p=45

    所以通过计算得到了超平面的余量。


    接下来介绍如何选择最优超平面的推理。你会看到:

    • 怎么寻找最优超平面?
    • 怎么计算两个超平面的距离?
    • 什么是超平面优化问题?

    怎么寻找最优超平面?

    通过上面的分析,我们已经能够计算超平面余量了。但是可惜的是她并不是最优的超平面。最优超平面是数据到超平面余量最大的那个。
    如下图,两根蓝线的间距M1并不是最大的余量,最大的余量应该是M2.


    fig1
    fig2

    那么我们怎么通过M1找到M2呢?这里我们也会发现寻找最大的余量跟寻找最优超平面是同一回事。

    怎么寻找最大余量?

    根据已有的数据,选择两个中间不包含任何数据的超平面,然后最大化他们的距离,那么超平面就能确定了。 这个说起来简单,求起来并不容易。

    Step1:有数据集,并能将他们分类

    数据集通常由n个向量xi组成,每一个xi对应一个yi, yi的取值只能是两种情况1或者-1。
    xi可能是p维的。
    所以数据集有n对(xiyi)元素组成,数学上用下面的公式表示:

    D={(xi,yi)xiRp,yi{1,1}}i=1n

    Step2: 选择两个中间不包含任何数据的超平面

    对于p维(p>2)的数据,找到两个这样的平面是困难的。即使是二维的,有时也根本无法找到,如下图。所以,只有在数据线性可分的情况下,这样的两个平面才能找到。


    fig3

    前面讲到超平面可以使用wTx=0表示。下面看看三维跟二维的区别。
    三维的时候w(b,a,1),x(1,x,y),
    wx=yax+b

    二维的时候w(a,1),x(x,y),
    wx=yax

    二维的超平面两面加b就得到了前面的通用表达式,
    wx+b=yax+b

    wx+b=wx

    所以下面将使用二维的向量,给定一个超平面H0,满足wx+b=δ
    选择与H0等距的两个超平面H1, H2,
    wx+b=δ

    wx+b=δ

    这里为了简化问题,变量δ取1。那么两个超平面为:

    wx+b=1

    wx+b=1

    我们选择满足下面约束条件的所有超平面,对于xi
    wxi+b1for xihaving the class1

    wxi+b1for xihaving the class1


    fig4

    根据图解释一下上面的约束条件,如果xi=A,因为A在超平面上,所以wx+b=1;同理对于点H,满足wx+b=1;那么在超平面wx+b=1右上方的点C,D,E,F,G满足约束条件wx+b>1;在超平面wx+b=1左下方的点I,J,K,L,M,N满足约束条件wx+b<1
    我们想把上面两个约束条件用一个表达式表示,对于xi对应取值yi 为-1的情况,wxi+b1, 两边同时乘以 yi,
    yi(wxi+b)yi(1)

    得到,
    yi(wxi+b)1

    对于xi对应取值yi 为1的情况,两边同时乘以 yi, 等式没有改变,所以可以用下面的统一表达式表示上面约束条件:
    yi(wxi+b)1for all1in

    Step3最大化两个超平面的距离

    a)寻找两个超平面的距离

    现在我们有两个超平面H0H1的方程以及H0上面的一个点x0, 我们如何求两个超平面的距离m。


    fig5

    我们找到与x0距离m的一个集合,只要找到一个垂直于超平面H1,长度为m的向量就可以。而垂直于超平面H1的向量就是w

    fig6

    求出w的方向向量uu=ww

    fig7

    m乘以u,得到向量kk就是我们想要找的向量,如下图

    fig8

    通过上面的推导,我们把线段m转变成一个向量k,下面可以通过向量x0计算m。

    fig9

    向量z0既是 x0k 相加的结果,z0也是超平面上的一个点,所以用x0+k代替z0
    w(x0+k)+b=1

    w(x0+mww)+b=1

    wx0+mwww+b=1

    wx0+mw2w+b=1

    wx0+b=1mw

    x0在超平面H0上面,满足wx0+b=1,所以

    1=1mw

    m=2w

    通过上式,我们就能够计算m。

    b)最大化超平面的距离

    由上面的推导得到余量的计算公式:

    m=2w

    通过上面的式子,可以得出,w 的模越大,余量越小。
    我们发现,最大化余量也就是最小化w的模
    这就变成了一个优化问题,在yi(wxi+b)1 中最小化(w,b), w.
    解决这个优化问题,我们就能够得到最大的超平面余量。



    才疏学浅,还未能创造知识,先做知识的搬运工!

    详见原文地址:https://www.svm-tutorial.com/2014/11/svm-understanding-math-part-1/
    详见原文地址:https://www.svm-tutorial.com/2014/11/svm-understanding-math-part-2/
    详见原文地址:https://www.svm-tutorial.com/2015/06/svm-understanding-math-part-3/

  • 相关阅读:
    Windows进程/线程创建过程
    固件安全研究
    区块链安全研究的总结
    CoTreatAsClass一些注意事项
    Ring3 读取SSDT
    User Mode Scheduling
    首次异常和二次异常
    offer终于有着落了
    AtomBombing
    Retn
  • 原文地址:https://www.cnblogs.com/siucaan/p/9623220.html
Copyright © 2011-2022 走看看