
libsvm代码阅读
本专栏主要是对SVM领域中一个常用的ibsvm工具箱的源代码进行分析。将分别对它的svm.h和svm.cpp文件进行分析,重点介绍svm.cpp中的三个类:Cache类、Kernel类、Solver类。
Lin-JM
这个作者很懒,什么都没留下…
展开
-
支持向量机学习笔记:数学过程及经典Tutorial
支持向量机,听名字,真的很让人充满好奇,到底什么是支持向量机,是一种什么机器???后来上了模式识别课才知道,原来支持向量机就是一个算法,不是什么机器,而且归结起来是一种信号处理方式,底子还是《现代信号处理》中内容。首先,我们可以来了解一下SVM的历史过程:推荐的中文博客Free Mind 的支持向量机系列文章,能够让你快速地掌握SVM的相关概念和原理;July 整理的支持向量机通俗导论,比较全地介绍了SVM的各个过程;如果你想透彻地理解SVM,而且English不错,那么下面几个Tutoria原创 2014-01-15 20:49:19 · 6459 阅读 · 2 评论 -
libsvm代码阅读:关于svm_group_classes函数分析
upadate :2014-2-28 LinJM @HQU 『 libsvm专栏地址:http://blog.youkuaiyun.com/column/details/libsvm.html 』目前最新的version是3.17,主要的改变是在svm_group_classes函数中加了几行代码。官方的说明如下:svm_group_classes函数的功能是:group training data of the same classImportant:如何将一堆数据归类到一起,同类的连续存储!可参考这个函数。原创 2014-02-28 13:39:08 · 3810 阅读 · 0 评论 -
libsvm代码阅读:关于svm_train函数分析
在svm中,训练是一个十分重要的步骤,下面我们来看看svm的train部分。在libsvm中的svm_train中分别有回归和分类两部分,我只对其中分类做介绍。分类的步骤如下:统计类别总数,同时记录类别的标号,统计每个类的样本数目将属于相同类的样本分组,连续存放计算权重C训练n(n-1)/2 个模型初始化nozero数组,便于统计SV//初始化概率数组训练过程中,需要重原创 2014-02-24 22:19:30 · 10004 阅读 · 0 评论 -
libsvm代码阅读:关于Solver类分析(二)
如果你看完了上篇博文的伪代码,那么我们就可以开始谈谈它的源代码了。// An SMO algorithm in Fan et al., JMLR 6(2005), p. 1889--1918// Solves://// min 0.5(\alpha^T Q \alpha) + p^T \alpha//// y^T \alpha = \delta// y_i = +1 or -1原创 2014-02-22 22:15:04 · 4758 阅读 · 1 评论 -
libsvm代码阅读:关于Solver类分析(一)
现在我们涉及到的Solver类是一个SVM优化求解的实现技术:SMO,即序贯最小优化算法。libsvm中最原始的Solver的代码有六百多行,再加上各种变形就上千行了,为了下面好理解,我们先来看看理论问题。代码的开头如下:// An SMO algorithm in Fan et al., JMLR 6(2005), p. 1889--1918// Solves://// min 0原创 2014-02-22 21:07:00 · 5152 阅读 · 0 评论 -
libsvm代码阅读:关于Kernel类分析
这一篇博文来分析下Kernel类,代码上很简单,一般都能看懂。Kernel类主要是为SVM的核函数服务的,里面实现了SVM常用的核函数,通过函数指针来使用这些核函数。其中几个常用核函数如下所示:(一般情况下,使用RBF核函数能取得很好的效果)全部代码如下://// Kernel evaluation//// the static method k_function is for doing single kernel evaluation// the constructor of Kernel原创 2014-02-21 12:16:21 · 3772 阅读 · 2 评论 -
libsvm代码阅读:关于Cache类的分析
下面来分析Cache类的源码,该类位于svm.cpp中。这个类的主要功能是:负责运算所涉及的内存管理,包括申请、释放等。简单来说:这个Cache类,首先通过Cache构造函数申请一块空间,这块空间的大小是:L个head_t大小的空间。然后get_data函数保证结构head_t中至少有len个float的内存,并且将可以使用的内存块的指针放在data指针中;而swap_index函数则是用于交换head[i]和head[j]。Cache类的定义如下:class Cache{public: Cac原创 2014-02-20 21:01:28 · 3290 阅读 · 0 评论 -
libsvm代码阅读:svm.cpp浅谈和函数指针
svm.cpp总共有3159行代码,实现了svm算法的核心功能,里面总共有Cache、Kernel、ONE_CLASS_Q、QMatrix、Solver、Solver_NU、SVC_Q、SVR_Q 8个类(如下图1所示),而它们之间的继承和组合关系如图2、图3所示。在这些类中Cache、Kernel、Solver是核心类,对整个算法起支撑作用。在以后的博文中我们将对这3个核心类做重点注解分析,另外还将对svm.cpp中的svm_train函数做一个注解分析。函数指针是指向函数而非指向对象的指针。像其他指针原创 2014-02-20 10:43:32 · 4858 阅读 · 1 评论 -
libsvm代码阅读:基础准备与svm.h头文件
Update:2014-2-25 LinJM @HQU libsvm是国立台湾大学Chih-Jen Lin开发的一个SVM的函数库,是当前应用最广泛的svm函数库,从2000年到2010年,该函数库的下载量达到250000之多。它的最新版本是version 3.17,主要是对是svm_group_classes做了修改。libsvm函数包的组织结构如下:1、主文件路径:包含了核心的C/C++程序和例子数据。其中svm.cpp是svm的核心程序,它实现了svm的训练和测试算法。2、tool子文件路径原创 2014-02-19 19:07:23 · 6360 阅读 · 0 评论