• svm简单推导


    支持向量机(support vector machine, svm)在小样本、非线性、高维模式识别问题中有很多优势,并且能够方便地扩展到函数拟合等其他机器学习问题中。

    1. svm思想

    1. 将低维空间中线性不可分的数据通过kernel trick映射到高维空间中,使得数据变得线性可分,从而实现分类;
    2. 寻找一个分割平面,使得两类数据距离这个平面最近的点到这个平面的距离相等且最大,这个平面即为所求分离超平面。

    2. svm简单推导(适用于面试时手推公式)

    svm的详细原理介绍及推导可见参考3(写的真的好,深入浅出),此处仅为面试时手推公式用的简洁版推导。


    图片来源于参考3

    如上图所示有两类样本,其中圆形样本的标签为(y=+1),正方形样本的标签为(y=-1)。设所求超平面的方程为:

    [g(x)=w^T x+b=0 ]

    其中(w,x)均为向量,(b)是标量。在上图中所求超平面即为中间的直线(H)。我们定义某个样本点(x_i)到超平面的距离为:

    [ ho_i=y_i(w^Tx_i+b) ]

    其中(y_i)是样本点(x_i)的标签,是个标量。容易知道(y_i(w^Tx_i+b))总是大于0的(应为若(y_i=+1),表明样本点(x_i)属于此类样本,则(w^Tx_i+b>0),同理,若(y_i=-1),则(w^Tx_i+b<0)),因此它的值就等于(|g(x_i)|)。我们对间隔( ho_i)进行归一化,得到几何间隔(delta_i):

    [delta_i=frac{1}{||w||}|g(x_i)| ]

    在上图中,(H)是分类面,(H_1)(H_2)平行于(H),且过离(H)最近的两类样本。(H_1)(H)(H_2)(H)的距离即为几何间隔。我们的目标是最大化几何间隔,通常我们是固定间隔(g(x)),将其固定为1,然后寻找最小的(||w||)。于是我们将目标函数定义为:

    [min ||w|| ]

    为了后续计算方便,我们将目标函数改写为:

    [min frac{1}{2}||w||^2 ]

    另外我们还要加入约束条件。前面说到我们把间隔(|g(x)|)固定为1,则对于其他样本点,他们都应该在间隔外面。因此有:

    [|g(x_i)|=y_i(w^Tx_i+b)geq 1 ]

    综上,我们的优化问题变为求解以下函数:

    [min frac{1}{2}||w||^2 ]

    [subject to y_i(w^Tx_i+b)geq 1(i=1,2,...,n,n是样本数) ]

    回顾一下,我们的目标是要求一个最优的超平面方程(g(x)=w^Tx+b=0),要求这个最优的超平面方程,就是要求出参数向量(w)(参数b在求出了参数(w)后只要带入几个支持向量样本即可求得,支持向量就是落在(H_1),(H_2)上的样本点)。其实向量(w)只与支持向量及其标签有关,因此(w)可以表示如下:

    [w=alpha_1y_1x_1+alpha_2y_2x_2+...alpha_iy_ix_i+...+alpha_ty_tx_t ]

    其中(x_1,...,x_t)(t)个支持向量,(alpha_1,...,alpha_t)是系数,也叫做拉格朗日乘子,(y_1,...,y_t)是支持向量对应的标签。(w)也可以表示如下:

    [w=sum_{i=1}^{t} (alpha_iy_ix_i) ]

    (g(x))的表达式可以改为:

    [g(x)=w^Tx+b=<w,x>+b=sum_{i=1}^{t}alpha_iy_i<x_i,x>+b=sum_{i=1}^{t}alpha_iy_ik(x_i,x)+b ]

    其中(<cdot>)表示内积,(k(cdot))表示核函数。要求超平面方程,我们就是要求(g(x)),要求(g(x)),就是要求(alpha_i(i=1,...,t))
    因为有离群点(对于正样本,即为(H_1)左边的点,对于负样本,即为(H_2)右边的点)的存在,我们引入松弛变量(gamma),则目标函数改为如下:

    [min frac{1}{2}||w||^2+Csum_{i=1}^{t}gamma_i^2 ]

    [subject to y_i(w^Tx_i+b)geq 1-gamma_i(i=1,...,t),gamma_igeq 0 ]

    其中(C)为惩罚因子,(C)越大,表示对离群点越重视,表示你非常不愿意放弃这些离群点。非离群点对应的松弛变量为0。松弛变量越大,表示离群点偏离得越远。

    3. 核方法的思想

    核方法的主要思想是基于这样一个假设:低维空间中线性不可分的点集在高维空间就变得线性可分了,如下图所示:


    图片来源于网络

    那么怎么将低维空间的点映射到高维空间呢?通过核技巧可以巧妙地解决这个问题。
    高维空间中向量的乘积只要通过低维空间中点的核函数就可以计算,这种方法成为核技巧(kernel trick)。即只要在低维空间中计算两个点的核函数,我们就相当于得到这两个点在高维空间的内积。公式表达如下:

    [k(x_1,x_2)=<phi(x_1),phi(x_2)> ]

    其中(k(cdot))是核函数,(x_1,x_2)是低维空间中的两个点,(phi(x_1),phi(x_2))(x_1,x_2)在高维空间中的向量表示,(<phi(x_1),phi(x_2)>)表示的是高维向量(phi(x_1))(phi(x_2)的内积。

    4. 常用的核函数

    线性核:

    多项式核:

    径向基核函数(Radial Basis Function):

    高斯核函数:

    Reference:

    1. https://blog.csdn.net/xianlingmao/article/details/7719122
    2. http://blog.sina.com.cn/s/blog_eb23a2510102x6he.html
    3. http://www.blogjava.net/zhenandaci/archive/2009/02/13/254519.html
    4. https://blog.csdn.net/lisi1129/article/details/70209945?locationNum=8&fps=1
    不当之处,敬请批评指正。
  • 相关阅读:
    Mac os下安装pycurl
    Mac os 10.9下面配置JAVA_HOME
    同步,异步,阻塞,非阻塞
    Python处理XML
    Apriori算法在购物篮分析中的运用
    Python抓取双色球数据
    为什么这么多Python框架
    Caffe + Ubuntu 14.04 64bit + CUDA 6.5 配置说明
    ubuntu 开机自动挂载分区
    VIM 配置随手记
  • 原文地址:https://www.cnblogs.com/wumh7/p/9453582.html
Copyright © 2020-2023  润新知