libsvm-3.12中的tools中的README

来源:互联网 发布:中国移动网络经纪人 编辑:程序博客网 时间:2024/05/16 17:27
这个目录包括一些有用的代码:
1.子集选择工具
2.参数选择工具
3.LIBSVM格式检查工具

第一部分:子集选择工具

介绍
============
训练大规模数据是很耗时的。有时应该先用一个小一点的子集来操作。subset.py这个python脚本随机选择一定数量的样本。对于分类数据,我们提供一个分类的筛选来确保每类都有一样的分布。
用法:subset.py [options] dataset number [output1] [output2]

这个脚本选择一个给定数据集的子集。

options:
-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/ 获得。

在 Mac 操作系统上,预编译的 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

这个程序用参数 C (和 gamma)= 2^begin, 2^(begin+step), ..., 2^end 执行 v-fold 交叉验证。

你可以用 -svmtrain 和 -gnuplot 参数来指定指定 libsvm 的执行和 gnuplot 的使用。

对于 windows 用户,请使用 pgnuplot.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:\Program Files\libsvm\windows\svm-train.exe" -gnuplot c:\tmp\gnuplot\binary\pgnuplot.exe -v 10 heart_scale

Output: 两个文件
dataset.png: gnuplot 绘出的 CV 精度等高线图。
dataset.out: 每个 (log2(C),log2(gamma)) 下的 CV 精度。 

平行的 grid 研究
===================

你可以用给一系列共享相同的文件系统的电脑调度 jobs 来做一个平行的 grid 研究。
首先,你在 grid.py 添加机器名称:

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

然后建立你的 ssh 以便确认不用命令来完成工作。

同样的机器(例如,这里的 linux5)可以被列出一次以上,如果他有多核 CPUs 或者更多的 RAM。
如果本地的机器最好,你也可以增大 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’只对输入数据进行一个简单的检查。
为了做一个细节检查,我们提供‘checkdata.py’这样一个python脚本。

用法: checkdata.py dataset

结束状态(返回值): 如果有错误返回 1 ,否则返回 0 。

这个工具由 Rong-En Fan at National Taiwan University 编写。

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

> cat bad_data
1 3:1 2:4
> python checkdata.py bad_data
line 1: 特征 indices 必须是一个单调增的顺序,previous/current features 3:1 2:4
Found 1 lines with error.