libSVM简介及核函数模型选择
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核是不适用的。特别地,当特征维数非常大的时候,很可能只能适用线性核。
|
http://blog.csdn.net/liulina603/article/details/8552424
最新文章
- 【转】浅谈html5网页内嵌视频
- 【原创】Django-ORM进阶
- java的myeclipse生成webservice的service和client
- [转]centos7 配置yum源(本地+光盘)
- Linux 下 MySQL 的彻底卸载和安装配置字符集
- Objective-C的内存管理
- 关于DB2 SQL0805N找不到程序包的错误解决办法
- SQL Server数据库存在判断语句及系统表简介 转
- Object Storage(Swift)安装过程——Havana
- 图片延时加载jquery.inview.js用法详解
- python细碎语法点
- 借助扩展事件查看SQL 2016备份和还原操作的内幕
- kafka在windows上的安装、运行
- FreeSWITCH与FreeSWITCH对接
- PHP 中解析 url 并得到 url 参数
- 【shell编程】之基础知识-流程控制
- linux之 awk
- shell脚本之正则表达式
- Android 类加载原理 和热修复——深入浅出原理与实现
- html5新特性localStorage和sessionStorage
热门文章
- Shell 中的反引号(`),单引号(&#39;),双引号(";)
- Esper学习之七:EPL语法(三)
- UI设计中的高保真和低保真
- 怎么使用jstack精确找到异常代码
- 开发常见错误之 : IMP-00058: 遇到 ORACLE 错误 1691
- @components问题
- 使用jetty的continuations实现";服务器推";
- [工具] CintaNotes
- android分辨率适配
- #if 和 #ifdef 条件编译注意