Categories: BIO, SVM | Tags: | Views: 1,974

 

前面对libsvm-2.88目录下的README进行了部分翻译, 似乎需要的朋友比较多, 这下对tools目录下的README进行了翻译. 给需要的朋友.

 这个目录中包括一些有用的程序:
1. 子集选择工具
2. 参数选择工具
3. LIBSVM格式检查工具

第一部分: 子集选择工具

介绍
==============

训练大量的数据需要消耗大量的时间. 有时你需要先对一个小的子集进行训练. python脚本subset.py可以随机地选择一个特定数目的样本. 对于分类数据, 我们提供一个分层选择来保证相同的类在一个子集中.

用法: subset.py [options] dataset number [output1] [output2]

这个脚本从给定的数据集中选择一个子集.

选项:
-s method: 选择的方式(默认 0)
 0 — 分层选择(只用于分类)
 1 — 随机选择
 
output1: 子集(可选)
output2: 余下的数据(可选)

如果output1未选, 那么子集将在屏幕上打印出来.

例子
===============

>python subset.py heart_scale 100 file1 file2

从heart_scale中随机选择100个样本保存到file1中,而剩余的实例保存到file2中.

第二部分: 参数选择工具

介绍
===============

grid.py是一个参数选择工具, 这个工具是用于采用RBF(径向基函数)核的C-SVM分类的. 它采用CV(交叉验证)技术来估计特定范围内每一个联合参数的准确性并且帮助你选择一个适合你问题的最佳参数.

grid.py为交叉验证直接执行libsvm二进制文件(不需要python的结合)并且用gnuplot来画CV准确性的轮廓. 在使用之前, 你必须事先安装libsvm和gnuplot. gnuplot可以在这里下载: http://www.gnuplot.info/

在苹果系统中, 预编译的gnuplot文件需要Aquarterm库的支持, 这个库也需要安装. 另外, 这个版本的gnuplot不支持png, 所以你需要修改"set term png transparent small"并使用其他图片格式. 例如你可以设定为"set term pbm small color".

用法: grid.py [-log2c begin,end,step] [-log2g begin,end,step] [-v fold]
       [-svmtrain pathname] [-gnuplot pathname] [-out pathname] [-png pathname]
       [additional parameters for svm-train] dataset

这个程序处理v-fold交叉验证的时候采用的参数C(和gamma) = 2^begin, 2^(begin+step), …, 2^end.

你可以采用-svmtrain和-gnuplot参数来指定libsvm和gnuplot的位置.

对于windows用户, 请使用gnuplot.exe. 如果你正在使用gnuplot 3.7.1版本, 请升级到3.7.3或更高版本. 3.7.1有一个bug. 如果你使用的是windows下的
cygwin, 请使用gunplot-x11.

例子
===============

> python grid.py -log2c -5,5,1 -log2g -4,0,1 -v 5 -m 300 heart_scale

用户(特别是MS Windows用户)可能需要指定可执行文件的路径. 你既可以在grid.py的开头修改路径,也可以在命令行中指定它们. 例如,

> grid.py -log2c -5,5,1 -svmtrain c:\libsvm\windows\svm-train.exe -gnuplot c:\tmp\gnuplot\bin\pgnuplot.exe -v 10 heart_scale

Output: 两个文件
dataset.png: gnuplot生成的CV准确性轮廓图
dataset.out: 每一个(log2(C),log2(gamma))的CV准确性

并行网格搜索
===============

把工作分离到一个共享相同文件系统的计算机集群, 你可以处理一个并行的网格搜索. 首先, 在grid.py中添加机器名字:

ssh_workers = ["linux1", "linux5", "linux5"]

然后设定你的ssh, 使得授权工作不需要询问密码.

如果一台机器有多个CPU或者更多的RAM, 相同的机器(例如这里的linux5)可以列出不只一次. 如果本地机器是最好的, 你也可以扩大nr_local_worker, 例如,

nr_local_worker = 2

例子:

> python grid.py heart_scale
[local] -1 -1 78.8889  (best c=0.5, g=0.5, rate=78.8889)
[linux5] -1 -7 83.3333  (best c=0.5, g=0.0078125, rate=83.3333)
[linux5] 5 -1 77.037  (best c=0.5, g=0.0078125, rate=83.3333)
[linux1] 5 -7 83.3333  (best c=0.5, g=0.0078125, rate=83.3333)
.
.
.

如果 -log2c, -log2g, 或 -v 没有指定, 则使用默认值.

如果你的系统使用telnet代替ssh, 你应该把你的机器名字在telnet_workers列出.

第三部分: LIBSVM格式检查工具

介绍
=================

`svm-train’只是对输入数据进行简单的检查. 要做更详细的检查, 我们提供一个python脚本 `checkdata.py’.

用法: checkdata.py dataset

这个工具的作者是台湾大学的Rong-En Fan.

例子
==================

> cat bad_data
1 3:1 2:4
> python checkdata.py bad_data
line 1: feature indices must be in an ascending order, previous/current features 3:1 2:4
Found 1 lines with error.

 

这篇文章来自 迷途知返(PWWANG.COM), 转载请注明出处。 版权说明

  1. May 5th, 2009 at 23:02
    Reply | Quote | #1

    呃…你研究的领域还真是不少…我甘拜下风了… 8O

  2. May 14th, 2009 at 17:02
    Reply | Quote | #2

    下次写点大众话的东西吧,呵呵 :D

    • May 15th, 2009 at 09:23
      Quote | #3

      你没发现,其实这玩意看的人最多

1 trackbacks

;) :| :x :twisted: :roll: :oops: :o :mrgreen: :lol: :idea: :evil: :cry: :arrow: :P :D :?: :? :) :( :!: 8O 8)

你可以使用@somebody:开头, 来邮件通知somebody你回复了他的留言(用户名区分大小写).