zoukankan      html  css  js  c++  java
  • 支持向量机SVM

    SVM-核函数(Kernels)

    非线性决策边界

    ​ 对于下图中的数据集分类,我们一般会想到构造多项式特征变量:2.jpg

    ![1.jpg](http://wx3.sinaimg.cn/mw690/7b8d2108gy1fhf0qwvqx6j20c507qgo2.jpg) ![3.jpg](http://wx3.sinaimg.cn/mw690/7b8d2108gy1fhf0qy5pm9j20bp07i0vi.jpg)
    我们也可以写为:$ heta_0+ heta_1f_1+ heta_2f_2+...$,$f_1=x_1,f_2=x_2,...$,通过之前的知识可以看到加入这些多项式提供了更多的特征向量,然而有没有比这些高阶项更好的特征向量(因为这些高阶项的计算量是非常大的)。

    ​ 现在我们在仅有x1和x2组成的特征轴上选取三个点-landmarks(忽略x0):(l^{(1)},l^{(2)},l^{(3)})。接下来按照以下方式定义新的特征变量:

    给定x:f1= similarity((x,l^{(1)}))=exp((-frac{left |x-l^{(1)} ight |^2}{2delta^2}))

    f2= similarity((x,l^{(2)}))=exp((-frac{left |x-l^{(2)} ight |^2}{2delta^2}))

    f3= similarity((x,l^{(3)}))=exp((-frac{left |x-l^{()3} ight |^2}{2delta^2}))

    ​ 这里的相似度函数similarity为核函数(Gaussian kernels)

    ![4.jpg](http://wx2.sinaimg.cn/mw690/7b8d2108gy1fhf0qykhafj20o701z3za.jpg)
    f1表示的意义:假设x很接近于$l^{(1)}$,我们有:
    ![5,jpg](http://wx2.sinaimg.cn/mw690/7b8d2108gy1fhf0qz43z5j20bg01q0t1.jpg)
    相反地,如果x很相距于$l^{(1)}$较远,我们有:
    ![6.jpg](http://wx4.sinaimg.cn/mw690/7b8d2108gy1fhf0qzjzg5j20g102lmxs.jpg)
    ​ 为了更加直观的体现这种新的特征向量选取的特点,我们假设有两个特征x1和x2,假设第一个标记点$l^{(1)}$,其他假设如下:
    ![7.jpg](http://wx1.sinaimg.cn/mw690/7b8d2108gy1fhf0qzuj5tj20dk02bweo.jpg)
    尝试改变$delta$的取值,我们从下图可以看到随与标记点距离的远近不同,取值是有很大差异的(远处时已经几近于零了)。
    ![8.1jpg](http://wx2.sinaimg.cn/mw690/7b8d2108gy1fhf0r0av4yj206c07uaar.jpg) ![8.2jpg](http://wx3.sinaimg.cn/mw690/7b8d2108gy1fhf0r0oxmzj205s08pwew.jpg) ![8.3jpg](http://wx3.sinaimg.cn/mw690/7b8d2108gy1fhf0r100wtj205a094mxu.jpg)

    ​ 现在对于给定初识条件:9.jpg

    对于有一个训练样本x为图中红点处,模型设计算出参数值( heta_0=-0.5, heta_1=1, heta_2=1, heta_3=0),现在样本距离标点1处很近,而与标点2、3的距离较远,所以f1=1,f2=0,f3=0(实为近似,即约为)。

    ![10.jpg](http://wx1.sinaimg.cn/mw690/7b8d2108gy1fhf0r1up1tj20a406gdg9.jpg)
    ​ 此时根据预测函数:=-0.5+1+0+0=0.5>0 即判别为”1“,同样对应于图中的蓝点出,相距标点1、2、3都较远,因此有:=-0.5+0+0+0=-0.5<0即判别为“0”。

    核函数-Kernels

    ​ 上一小节中介绍了在非线性决策边界中,不使用原本的多项式特征量,而使用高斯核函数构成特征向量,但如何选择相应的标记点(landmarks),及是否有其他的核函数并未做说明。

    ​ 对于给定的m个样本((x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),...,(x^{(m)},y^{(m)})),选择标记点的选择为:

    ![1.jpg](http://wx1.sinaimg.cn/mw690/7b8d2108gy1fhf5nebk5ij20b900ya9x.jpg)
    对于任意样本x:

    (f_1=similarity(x,l^{(1)})) (f_2=similarity(x,l^{(2)})) ....

    特征向量为:2.jpg,其中(f_0=1)

    总结一下,对于任意样本(x(i),y(i))有:3.jpg

    ​ 对于参数theta的训练,按照以下公式(建议利用其他数值分析方面的高手提供的包来处理)

    ![4.jpg](http://wx2.sinaimg.cn/mw690/7b8d2108gy1fhf5nffvi3j20nh02tdgj.jpg)

    SVM-支持向量机的参数问题

    1. C(=1/lambda)

      C值较大时:高方差,低偏差 C值较小下:高偏差,低方差

    2. (delta^2)如下图

      (delta^2)较大时:特征很松散,高偏差,低方差

      (delta^2)较小下:特征很紧凑,低偏差,高方差

    ![5.jpg](http://wx3.sinaimg.cn/mw690/7b8d2108gy1fhf5ng90r3j206507oaa1.jpg)

    使用SVM

    ​ 一般使用SVM软件处理包(如:liblinear,libsvm,....)以解决参数theta的优化问题。

    但之前需要明确:参数C的选择,核函数(相似度函数)的选择问题。

    敝如:无核函数(“linear kernel”) -->当( heta^Tx ge 0),预测“y=1”

    高斯核函数:6.jpg,需要注意参数(delta^2)的选择。

    ![7.jpg](http://wx2.sinaimg.cn/mw690/7b8d2108gy1fhf5ngvctrj20cz05ht96.jpg)
    *注意:在使用高斯核函数之前,特征缩放是十分必要的!!*

    ​ 核函数的确定并不困难,满足Mercer定理的函数都可以作为核函数。常用的核函数有:线性核函数,多项式核函数Polynomial'kernel ,径向基核函数,Sigmoid核函数和复合核函数,傅立叶级数核,B 样条核函数和张量积核函数等。

    多类分类问题,如下图所示:

    ![8.jpg](http://wx3.sinaimg.cn/mw690/7b8d2108gy1fhf5nhdgivj206n05j74a.jpg)
    许多SVM包已经有很多内置的分类函数,但对多类问题也可用one-Vs-all方式。

    逻辑回归vs神经网络vsSVMs

    ​ n=特征数目,m=训练样本数目

    • 如果n的数目远远大于m:

      使用逻辑回归或不含核(线性核)的SVM

    • 如果n很小,m取值介于中间(m=10-10000)

      使用带有高斯核的SVM

    • 若n很小,m值很大(m=50000+)

      创建/增加更多的特征,然后使用逻辑回归或不含核函数的SVM

    • 神经网络对于上述较多的情形,但训练量很大,训练很慢

    版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
  • 相关阅读:
    phpStudy The requested URL /web/index.php was not found on this server
    python yield 理解与用法
    python 高阶函数之 map
    python 高阶函数之 reduce
    java extends和implements区别
    SpringMVC中使用Interceptor拦截器顺序
    SpringMVC 拦截器使用说明
    java session创建与获取
    跨域解决方案
    nrm -- 一键切换npm源
  • 原文地址:https://www.cnblogs.com/SrtFrmGNU/p/7148080.html
Copyright © 2011-2022 走看看