LIBSVM学习(六)代码结构及c-SVC过程
来源:互联网 发布:数据分析平台需求文档 编辑:程序博客网 时间:2024/06/08 16:04
最近看LIBSVM,代码结构不是很明白,上网查到了很多关于代码结构注解的资料,在这里将 我认为比较好的一些资料进行汇总一下,当然,在文章最后有这些资料的链接地址。
libsvm中主要使用到的类(svm.cpp)
在做分类过程中,我们先看文件svm.cpp,该文件中包含了类的继承和组合(实线表示继承关系,虚线表示组合关系)
class Cache:本类主要负责运算所涉及的内存的管理,包括申请、释放等。
class Kernel:本类主要包括核函数的定义、克隆,矩阵Q()的计算等。这里关于矩阵Q的解释请看参考资料1。常见的核函数有:
class Solver:An SMO algorithm in Fan et al., JMLR 6(2005), p. 1889–1918,是二次规划问题,使用算法SMO。
class Solver_NU:该类继承Solver类,Solver for nu-svm classification and regression。
class SVC_Q:继承Kernel类,Q matrices for various formulations。
class ONE_CLASS_Q:继承Kernel类,只处理 1 类分类问题(?),故不保留 y[i]。编号只有 1 类。
class SVR_Q:继承Kernel类,本类主要是用于做回归。
svm-train过程(这里只解释分类过程)
svm-train函数原型为:
svm_model *svm_train(const svm_problem *prob, const svm_parameter *param)
根据选择的算法,来组织参加训练的分样本,以及进行训练结果的保存。其中会对样本进行初步的统计。如下为训练过程:
→统计类别总数,同时记录类别的标号,统计每个类的样本数目 →将属于相同类的样本分组,连续存放, svm_group_classes→计算权重C→训练n(n-1)/2个模型 →初始化nozero数组,便于统计SV →//初始化概率数组 →训练过程中,需要重建子数据集,样本的特征不变,但样本的类别要改为 +1/-1 →//如果有必要,先调用svm_binary_svc_probability →训练子数据集svm_train_one →统计一下nozero,如果nozero已经是真,就不变,如果为假,则改为真→输出模型→主要是填充svm_model,→清除内存
svm-predict预测过程
svm-predict函数使用说明:
"Usage: svm-predict [-b 0/1] test_file model_file output_file\n" "-b probability_estimates: whether to predict probability estimates, 0 or 1 (default 0); for one-class SVM only 0 is supported\n");
预测过程如下:
→参数获取,读取预测数据→模型加载svm_load_model →预测并输出predict-label →if (predict_probability && (svm_type==C_SVC || svm_type==NU_SVC)) 调用svm_predict_probability函数 →else 调用svm_predict函数 →清除内存svm_free_and_destroy_model
c-svc计算过程
参考资料及简介
- http://download.csdn.net/detail/xiahouzuoxin/5778927
林智仁SVM讲义(英文),SVM理论基础看这个就够了 - http://www.csie.ntu.edu.tw/~cjlin/papers/libsvm.pdf
该文档是台湾林智仁提供的LIBSVM使用说明文档。 - http://download.csdn.net/detail/lpcarl/8235115
这是上海交大模式分析与机器智能实验室对LIBSVM的注解,非常全面。上面的一部分资料也是摘自该文章。 - http://blog.csdn.net/zy_zhengyang/article/details/45009431
给出了C-SVC的计算过程,以图解的方式快速直观的看懂c-svc训练过程。 - http://www.cppblog.com/guijie/archive/2012/03/26/169034.html
这是一个中文版的理解型的FAQ,有很多你疑惑的问题可以从这里找到。
0 0
- LIBSVM学习(六)代码结构及c-SVC过程
- java学习--Libsvm java版代码注释及详解(一)
- java学习--Libsvm java版代码注释及详解(一)
- libsvm 学习笔记(四)--- grid.py 关键代码详解
- Linux汇编代码学习,反汇编简单的c及分析汇编代码工作过程
- C程序设计语言整理笔记(六)结构
- mybatis学习笔记(六)使用generator生成mybatis基础配置代码和目录结构
- LibSVM学习(六)——easy.py和grid.py的使用
- LibSVM学习(六)——easy.py和grid.py的使用(转)
- LibSVM学习(六)——easy.py和grid.py的使用(转)
- LibSVM学习(六)——easy.py和grid.py的使用
- LibSVM学习(六)——easy.py和grid.py的使用
- LibSVM学习(六)——easy.py和grid.py的使用
- Andrew Ng机器学习笔记+Weka相关算法实现(六)SMO/LibSVM/SVM参数
- suricata学习--结构及代码解读
- Objective-C学习笔记六:选择结构二
- 林智仁libsvm java代码学习笔记
- GeoServer学习手记(六):Servlet及HTTP派发过程之三
- ubuntu 16.04 vim文本编辑器的使用方法
- (6) Google2012笔试卷
- 进程间通信:消息队列(代码实现)
- python并行(1)
- setTimeout延时0毫秒的作用
- LIBSVM学习(六)代码结构及c-SVC过程
- 深入讲解SpringMVC配置文件
- 数据预处理之独热编码
- Android截屏机制浅析
- jquery radio设置checked但按钮radio仍然没选中的js处理方式-javascript bootstrap
- BootstrapTest_1(认识Bootstrap)
- 使用qt creator配置交叉编译+一键传输
- POJ 1330 Nearest Common Ancestors
- LeetCode - 344. Reverse String