1. libSVM简介

训练模型的结构体

struct svm_problem //储存参加计算的所有样本

{

int l; //记录样本总数

double *y; //指向样本类别的组数

struct svm_node **x;//数据样本

};

当样本类别事先已经被告知时,可以通过数字来给样本数据进行标识(如果是两类通常以1与-1来表示)。如果不清楚样本类别可以用样本个数编号来设置,这时候分类的准确率也就无法判定了。

数据样本是一个二维数组,其中每个单元格储存的是一个svm_node,y与样本数据的对应关系为:

数据节点的结构体

struct svm_node //储存单一向量的单个特征

{

int index; //索引

double value; //值

};

如果需要储存向量x=(1,121,12321,121,1),就可以使用6个svm_node来保存,内存映像为:

index

1

2

3

4

5

-1

value

1

121

12321

121

1

NULL

注意:向量是以索引值为-1的元素为结束标志位的。如果没有标志位将导致程序崩溃。

SVM模型类型枚举

enum { C_SVC, NU_SVC, ONE_CLASS, EPSILON_SVR, NU_SVR };

C_SVC:C表示惩罚因子,C越大表示对错误分类的惩罚越大

NU_SVC:和C_SVC相同。

ONE_CLASS:不需要类标号,用于支持向量的密度估计和聚类.

EPSILON_SVR:-不敏感损失函数,对样本点来说,存在着一个不为目标函数提供任何损失值的区域,即-带。

NU_SVR:由于EPSILON_SVR需要事先确定参数,然而在某些情况下选择合适的参数却不是一件容易的事情。而NU_SVR能够自动计算参数。

到正无穷,NU_SVC是[0,1]。

核函数类型枚举

enum { LINEAR, POLY, RBF, SIGMOID, PRECOMPUTED };

LINEAR:线性核函数(linear kernel)

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

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

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

PRECOMPUTED:用户自定义核函数

只有四个常用核函数,但我们必须决定哪一个是首选。然后是惩罚因子C和核参数的选择。

在支持向量机中使用的核函数主要有四类:

线性核函数:
多项式核函数:
RBF核函数:
Sigmoid核函数:
其中, 和 均为核参数。

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

1 RBF核
       
通常而言,RBF核是合理的首选。这个核函数将样本非线性地映射到一个更高维的空间,与线性核不同,它能够处理分类标注和属性的非线性关系。并且,线性核
是RBF的一个特例(Keerthi and Lin
2003),因此,使用一个惩罚因子C的线性核与某些参数(C,γ)的RBF核具有相同的性能。同时,Sigmoid核的表现很像一定参数的RBF核
(Lin and Link 2003)。
        第二个原因,超参数(hyperparameter)的数量会影响到模型选择的复杂度(因为参数只能靠试验呀!)。多项式核比RBF核有更多的超参数。
最后,RBF核有更少的数值复杂度(numerical
difficulties)。一个关键点0<Kij<=1对比多项式核,后者关键值需要
infinity(rxiTxj+r>1)或者zero(rxiTxj+r<1),这是高阶运算。此外,我们必须指出sigmoid核在某些
参数下不是合法的 (例如,不是两个向量的内积)。(Vapnik 1995)
当然,也存在一些情形RBF核是不适用的。特别地,当特征维数非常大的时候,很可能只能适用线性核。

  • svm_type –

    指定SVM的类型,下面是可能的取值:

    • CvSVM::C_SVC C类支持向量分类机。
      n类分组  (n  2),允许用异常值惩罚因子C进行不完全分类。
    • CvSVM::NU_SVC 类支持向量分类机。n类似然不完全分类的分类器。参数为  取代C(其值在区间【0,1】中,nu越大,决策边界越平滑)。
    • CvSVM::ONE_CLASS 单分类器,所有的训练数据提取自同一个类里,然后SVM建立了一个分界线以分割该类在特征空间中所占区域和其它类在特征空间中所占区域。
    • CvSVM::EPS_SVR 类支持向量回归机。训练集中的特征向量和拟合出来的超平面的距离需要小于p。异常值惩罚因子C被采用。
    • CvSVM::NU_SVR 类支持向量回归机。  代替了 p
  • kernel_type –

    SVM的内核类型,下面是可能的取值:

    • CvSVM::LINEAR 线性内核。没有任何向映射至高维空间,线性区分(或回归)在原始特征空间中被完成,这是最快的选择。.
    • CvSVM::POLY 多项式内核: .
    • CvSVM::RBF 基于径向的函数,对于大多数情况都是一个较好的选择: .
    • CvSVM::SIGMOID Sigmoid函数内核:.
  • degree – 内核函数(POLY)的参数degree。
  • gamma – 内核函数(POLY/ RBF/ SIGMOID)的参数
  • coef0 – 内核函数(POLY/ SIGMOID)的参数coef0
  • Cvalue – SVM类型(C_SVC/ EPS_SVR/ NU_SVR)的参数C
  • nu – SVM类型(NU_SVC/ ONE_CLASS/ NU_SVR)的参数 
  • p – SVM类型(EPS_SVR)的参数 
  • class_weights – C_SVC中的可选权重,赋给指定的类,乘以C以后变成 。所以这些权重影响不同类别的错误分类惩罚项。权重越大,某一类别的误分类数据的惩罚项就越大。
  • term_crit – SVM的迭代训练过程的中止条件,解决部分受约束二次最优问题。您可以指定的公差和/或最大迭代次数。

http://blog.csdn.net/liulina603/article/details/8552424

libSVM简介及核函数模型选择的更多相关文章

  1. libsvm的安装,数据格式,常见错误,grid.py参数选择,c-SVC过程,libsvm参数解释,svm训练数据,libsvm的使用详解,SVM核函数的选择

    直接conda install libsvm安装的不完整,缺几个.py文件. 第一种安装方法: 下载:http://www.csie.ntu.edu.tw/~cjlin/cgi-bin/libsvm. ...

  2. libsvm简介和函数调用参数说明

    1.      libSVM简介 libSVM是台湾林智仁(Chih-Jen Lin) 教授2001年开发的一套支持向量机库,这套库运算速度挺快,可以很方便的对数据做分类或回归.由于libSVM程序小 ...

  3. Spark 模型选择和调参

    Spark - ML Tuning 官方文档:https://spark.apache.org/docs/2.2.0/ml-tuning.html 这一章节主要讲述如何通过使用MLlib的工具来调试模 ...

  4. DL基础补全计划(三)---模型选择、欠拟合、过拟合

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  5. PRML读书会第一章 Introduction(机器学习基本概念、学习理论、模型选择、维灾等)

    主讲人 常象宇 大家好,我是likrain,本来我和网神说的是我可以作为机动,大家不想讲哪里我可以试试,结果大家不想讲第一章.估计都是大神觉得第一章比较简单,所以就由我来吧.我的背景是统计与数学,稍懂 ...

  6. ML 04、模型评估与模型选择

    机器学习算法 原理.实现与实践——模型评估与模型选择 1. 训练误差与测试误差 机器学习的目的是使学习到的模型不仅对已知数据而且对未知数据都能有很好的预测能力. 假设学习到的模型是$Y = \hat{ ...

  7. Workflow:自定义工作流 之 模型选择

    Workflow:自定义工作流 之 模型选择 背景 毕业5年,做了4个版本的工作流框架,工作流几乎是每个企业应用开发人员必须跨过的门槛(我还没有跨过去),下面简要说一下之前的4个版本,然后重点介绍第5 ...

  8. ISLR系列:(4.3)模型选择 PCR & PLS

    Linear Model Selection and Regularization 此博文是 An Introduction to Statistical Learning with Applicat ...

  9. ISLR系列:(4.1)模型选择 Subset Selection

    Linear Model Selection and Regularization 此博文是 An Introduction to Statistical Learning with Applicat ...

随机推荐

  1. Python操作MySQL数据库的三种方法

    https://blog.csdn.net/Oscer2016/article/details/70257024 1. MySQLdb 的使用 (1) 什么是MySQLdb?   MySQLdb 是用 ...

  2. Karma和Jasmine自动化单元测试

    从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎.chrome浏 ...

  3. Python pyQt4/pyQt5 学习笔记1(空白窗口,按钮,控件事件,控件提示,窗体显示到屏幕中间,messagebox)

    PyQt4是用来编写有图形界面程序(GUI applications)的一个工具包.PyQt4作为一个Python模块来使用,它有440个类和超过6000种函数和方法.同时它也是一个可以在几乎所有主流 ...

  4. Android studio 安装已经下载好的gradle.zip文件【ubuntu 14.04 LTS环境】

    一 下载 gradle-3.3-all.zip 包 http://download.csdn.net/detail/t6546545/9732412 http://www.fxxz.com/soft/ ...

  5. hbuilder在android手机里用chrome调试,只显示了设备名称,却没有inspect按钮

    stark 通过“菜单”->“工具”->“检查设备”打开设备检查页面,只显示了设备名称,却没有inspect按钮,要怎么办 1 赞2014-10-09 22:00 ============ ...

  6. LeetCode 32 Longest Valid Parentheses(最长合法的括号组合)

    题目链接: https://leetcode.com/problems/longest-valid-parentheses/?tab=Description   Problem :已知字符串s,求出其 ...

  7. hihoCoder挑战赛28 题目2 : 二进制翻转

    题目2 : 二进制翻转 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 定义函数 Rev(x) 表示把 x 在二进制表示下翻转后的值 例如: Rev(4)=1,因为 4 ...

  8. Visual Studio 2013附加进程调试IE加载的ActiveX Control无效解决方法

    默认Attach to选择了Automatically determine the type of code to debug,显示Native Code.但附加进程到iexplore.exe断点无法 ...

  9. 使用nginx做反代时遇到413 Request Entity Too Large的解决方法

    在使用nginx做反向代理的时候,被反代的系统在上传文件的时候遇到413 错误 :Request Entity Too Large 原因是nginx限制了上传文件的大小,在nginx中可以配置最大允许 ...

  10. swiper监听左滑还是右滑动

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...