SHOGUN toolbox的一些使用心得

来源:互联网 发布:node schedule 文档 编辑:程序博客网 时间:2024/06/16 01:58

SHOGUN toolbox的一些使用心得

        由于最近在弄毕业设计,要同时使用MKL和SVM,所以找了很多关于这个方面的toolbox。一开始我是使用的是台湾大学林智仁教授的Libsvm和Liblinear的SVM toolbox,感觉到这个东西很好用,不管你是否懂得SVM方面的知识,只要看清楚函数接口和数据的组织形式,就可以方便的使用。当时后来要进行多特征多核融合,但是SVM只支持单核的,并且不能自己学习权重,所以要使用到MKL。在网上找了很久,也找到了许多相关的代码,看了一下,发现代码不是写得晦涩难懂就是太简单了,让人感觉到不踏实。幸好在这个时候我找到了SHOGUN toolbox,目测了一下,发现里面不但有MKL,还有包含了林智仁教授的Libsvm和Liblinear svm等其他的SVM算法,so exciting!!!

SHOGUN toolbox下载地址:http://www.shogun-toolbox.org/page/home/

总结的最好的莫过于官网的总结,请看下图:

        

       SHOGUN是一个机器学习工具箱,其重点是在大尺度上的内核的方法,特别是支持向量机(SVM)的学习工具箱。它提供了一个通用的SVM对象接口 连接到几个不同的SVM的实现中,所有相同的底层,高效的内核实现利用。除了支持向量机和回归,SHOGUN还包含有大量的线性方法,如线性判别分析 (LDA),线性规划机(LPM),(内核)的感知,和算法训练隐马尔可夫模型。

        在shogun的官网上浏览了里面函数的使用,给我的感觉就是它就像一个硕大无比的黑匣子,对于使用matlab静态接口的我来说,我所使用的函数名字基本都是sg,是shogun的缩写,只是里面的参数个数和名字不一样。首先我们使用sg函数往黑匣子里面装数据,并且要指定这些数据是用来干嘛的,是training还是testing什么的。然后就是训练SVM或是其他的分类器,这个toolbox里面包含了许多的分类器,感觉到这个toolbox很强大。库里面有很多通俗易懂的例子,我现在就是要多看例子,找到我要使用的函数。

    在这个shogun黑匣子或说是大仓库里面,所有的数据都是预先堆积好的,等到有需要的时候再做处理。就好比,你先把所有的原材料给厨师,把所有你想要的材料准备好,然后再告诉厨师你今天想要吃什么菜肴。例如,为training和testing计算一个kernel矩阵并且显示:

sg('set_features','TRAIN',train_ features_matrix);

sg('set_features', 'TEST', test_ features_matrix);

sg('set_kernel',  'GAUSSIAN',  'REAL',  40 , 1 );

 

[K_train]=sg('get_kernel_matrix','TRAIN');

[K_test ]=sg('get_kernel_matrix', 'TEST');

[features_train]=sg('get_features','TRAIN');

[features_test ]=sg('get_features','TEST');

 

        前面的那一块就是先把数据设计好,我的训练和测试的特征矩阵是什么,使用什么样的核函数,在这一块中,数据只是堆积起来而已,并没有因为你设置了核函数就对数据进行处理,就好像当你把原材料给厨师时,他不会马上开始做菜,而是要等到你告诉他你要吃什么样的菜肴。后面一块就是告诉系统应该怎么样处理这些数据的,然后再产生返回值,就相当于你告诉了厨师你想吃什么样的菜肴,你说你想吃酸菜鱼,厨师就从原材料中拿出酸菜和鱼及其他配料给你弄好这一道菜肴。

我真心觉得他们官网上的使用说明文档更新之后于软件包的更新,我发现软件包里的很多例子语句在文档中找不到相应的说明。

       在里面的sg函数使用中,我发现有“set_features”和“add_features”这种类似的参数设置,现在对set和add还是没什么太深的认识。根据官网的解释和自己看例子的心得,说说自己的看法,这涉及到一个对象或是作用域的问题,在程序一开始的时候,使用“set_features”是给默认的feature对象赋值,当使用“add_features”时是新建了一个feature对象,并且对这个对象赋值。也就是说,使用set的时候是在默认的作用域里面,使用add的时候是在新建域里面,默认域只有一个,新建域则有多个,所以要分清add的对应关系。还有一个问题,就是使用“get_features”去读取特征的时候,一旦之前出现“add_features”的函数就会出错。

一些注意事项:

1)  shogun里的特征是按列存储的,label vector必须是行向量

2)  开始训练分离器是sg(‘train_classifier’),产生分类结果是result =  sg(‘classify’),result返回来的是label值。

3)  输进“set_label”中的label值必须顺序的从零开始。


4) GAUSSIAN kernel function:        

RBF kernelfunction:                                             

这两个核函数在本质上是一样的,只是形式上不一样,开始我还奇怪为什么这个toolbox中连RBF这个那么常用的核函数都没有,原来是可以这样转换的。我可以直接利用之前用Libsvm寻优出来的sigmma做个倒数就行了。

5)“combined kernel”必须放在“add_kernel”和“add_feature”之前。

 

一些关于SHOGUN的有用链接:

elpmis的博客:http://blog.csdn.net/elpmis/article/details/4784603

 



原创粉丝点击