• SVM流行库LIBSvm的使用和调参


    简介:Libsvm is a simple, easy-to-use, and efficient software for SVM classification and regression. It solves C-SVM classification, nu-SVM classification, one-class-SVM, epsilon-SVM regression, and nu-SVM regression. It also provides an automatic model selection tool for C-SVM classification.

      Libsvm是一个简单,易于使用和高效的SVM分类和回归软件。 它解决了C-SVM分类,nu-SVM分类,一类SVM,ε-SVM回归和nu-SVM回归。 它还提供了C-SVM分类的自动模型选择工具。

    github :https://github.com/cjlin1/libsvm

    一、安装

    二、使用说明:

    svm-train traning_set_file model_file

    svm-predict test_file model_fileoutput_file

    python平台使用:python svm_mode.py train_data test_data

    --------LIBSVM常用参数的意义--------------

    -s svm类型:SVM设置类型(默认0)

    -t 核函数类型:核函数设置类型(默认2)

    -d degree:核函数中的degree设置(针对多项式核函数)(默认3)

    -g r(gama):核函数中的gamma函数设置(针对多项式/rbf/sigmoid核函数) (默认类别数目的倒数)

    -r coef0:核函数中的coef0设置(针对多项式/sigmoid核函数)((默认0)

    -s SVM类型:默认(0)0--c-svm 1--nu-svm 2--one class-svm 3--e-svm 4--nu-svm

      监督学习问题:

      分类

      C-svm:C-支持向量分类机;参数C为惩罚系数,C越大表示对错误分类的惩罚越大,适当的参数C对分类Accuracy很关键。

      Nu-svm:v-支持向量分类机;由于C的选取比较困难,用另一个参数v代替C。C是“无意义”的,v是有意义的。(与C_SVC其实采用的模型相同,但是它们的参数C的范围不同,C_SVC采用的是0到正无穷,该类型是[0,1]。)

      回归:  

      E-svm:ε-支持向量回归机,不敏感损失函数,对样本点来说,存在着一个不为目标函数提供任何损失值的区域。

      Nu-svm:n-支持向量回归机,由于EPSILON_SVR需要事先确定参数,然而在某些情况下选择合适的参数却不是一件容易的事情。而NU_SVR能够自动计算参数。

      非监督学习问题:

      One-class-svm:​单类别-支持向量机,不需要类标号,用于支持向量的密度估计和聚类

    -t 核函数类型:核函数设置类型(默认2)

       LINEAR:线性核函数(linear kernel)

       POLY:多项式核函数(ploynomial kernel)

       RBF:径向机核函数(radical basis function)

       SIGMOID: 神经元的非线性作用函数核函数(Sigmoid tanh)

       PRECOMPUTED:用户自定义核函数

    究竟用哪一种核函数取决对数据处理的要求,不过建议一般都是使用RBF核函数。因为RBF核函数具有良好的性态,在实际问题中表现出了良好的性能。另外使用线性核函数

    理由:

      1、个核函数将样本非线性地映射到一个更高维的空间,与线性核不同,它能够处理分类标注和属性的非线性关系。并且,线性核是RBF的一个特例(Keerthi and Lin 2003),因此,使用一个惩罚因子C的线性核与某些参数(C,γ)的RBF核具有相同的性能。同时,Sigmoid核的表现很像一定参数的RBF核(Lin and Link 2003)。

      2、第二个原因,超参数(hyperparameter)的数量会影响到模型选择的复杂度(因为参数只能靠试验呀!)。多项式核比RBF核有更多的超参数。
    最后,RBF核有更少的数值复杂度(numerical difficulties)。一个关键点0<Kij<=1对比多项式核,后者关键值需要 infinity(rxiTxj+r>1)或者zero(rxiTxj+r<1),这是高阶运算。此外,我们必须指出sigmoid核在某些参数下不是合法的 (例如,不是两个向量的内积)。(Vapnik 1995)
    当然,也存在一些情形RBF核是不适用的。特别地,当特征维数非常大的时候,很可能只能适用线性核。 

    ------------------------实际工程中SVM使用心得--------------------------

    一、实际工程中SVM使用的全部流程:

      1.   对数据做归一化(simple scaling)

      2.   应用 RBF kernel 

      3.   用cross-validation和grid-search 得到最优的c和g

      4.   用得到的最优c和g训练训练数据

      5.   测试

    二、一些的经验:

      1、样本数目少于特征维度并不一定会导致过拟合,这可以参考余凯老师的这句评论:
    这不是原因啊,呵呵。用RBF kernel, 系统的dimension实际上不超过样本数,与特征维数没有一个trivial的关系。”
     
      2、:RBF核应该可以得到与线性核相近的效果(按照理论,RBF核可以模拟线性核),可能好于线性核,也可能差于,但是,不应该相差太多。
    当然,很多问题中,比如维度过高,或者样本海量的情况下,大家更倾向于用线性核,因为效果相当,但是在速度和模型大小方面,线性核会有更好的表现。
      老师木还有一句评论,可以加深初学者对SVM的理解:
      “须知rbf实际是记忆了若干样例,在sv中各维权重重要性等同。线性核学出的权重是feature weighting作用或特征选择 。
          上述摘自:http://blog.sina.com.cn/s/blog_6ae183910101cxbv.html

      

     

  • 相关阅读:
    OkHttp的基本使用方法
    C#中Dictionary小记
    SQL Server表的数据量大小查询
    基于.NET平台常用的框架整理
    JQuery中ajax的相关方法总结
    JQuery中的工具函数总结
    Asp.net MVC 中Controller返回值类型ActionResult
    Plupload文件上传组件使用API
    HTTP 方法:GET 对比 POST
    C#使用简单邮件传输协议(SMTP)发送邮件
  • 原文地址:https://www.cnblogs.com/lxw003/p/6791651.html
Copyright © 2020-2023  润新知