SHOGUN
v1.1.0
|
如前所述,SHOGUN可以为多种语言提供接口,其中包括Matlab(tm), R, Python以及Octave。 下面是关于这些静态接口的简介。对所有的静态接口,我们力求在所有语言都保持相同的 语法风格。然而在某些情况下这是不可能的,我们会在相关的文档中描述这些不同。在阅读这些 文档之前,我们建议读者先看一下examples 目录下的大量例子。例如,在examples/R目录和examples/python 目录。
静态接口概览和安装测试
接口命令
命令参考手册
因为目前octave与matlab基本相同,对这两个接口一个文档已经足够,该文档基于octave (matlab可以相同地使用)
要在octave中使用SHOGUN,首先启动octave,使用以下命令检测SHOGUN是否被正确安装:
sg('help')
这将显示shogun的帮助文本。
要在python中使用SHOGUN,首先启动python,使用以下命令检测SHOGUN是否被正确安装
from sg import sg sg('help')
这将显示shogun的帮助文本。
要在R中使用SHOGUN,需要检测SHOGUN是否已被正确安装在R中。在R的命令行中输入(>为提示符)
> library()
将返回R的所有已安装包的列表,如果SHOGUN已安装会有sg这一项:
sg The SHOGUN Machine Learning Toolbox
当你确定SHOGUN已被正确安装,你可以通过下面命令加载它:
> library(sg)
你可以看到关于SHOGUN的一些信息,如编译选项等。使用这个命令加载后,你就可以使用 SHOGUN提供的命令。
一般来说,SHOGUN中的命令通过函数sg(...)来调用。如果你想查看SHOGUN命令的帮助,可以 输入
> sg('help')
你可以看到一个帮助,该帮助对所有命令都有一个简单描述。
这些函数在各种接口中将数据传给shogun或者从shogun获得数据。假如你有一个包含数据的matlab矩阵 或者R矩阵,你想将这些数据传给shogun,你只需要像下面这样:
sg('set_features', 'TRAIN|TEST', features[, DNABINFILE|<ALPHABET>])
sg('add_features', 'TRAIN|TEST', features[, DNABINFILE|<ALPHABET>])
feature可以是char/byte/word/int/real值的矩阵,实值稀疏矩阵及字符串。当处理字符串时,需要 指定一个字母表(如DNA, RAW, ...)。 使用'TRAIN'告诉SHOGUN这是你用于训练分类器的数据,使用'TEST'来说明这是测试数据。
与set_features 相反,add_features 将新建一个feature对象并将输入的feature添加进去。 这个命令在需要处理一组不同的feature(如实数和字符串)或者多个核函数时很有用。
如果通过set_features传递了一个字符串,它可以通过滑动窗口来变成多个字符串。 可以使用
sg('from_position_list', 'TRAIN|TEST', winsize, shift[, skip])或者
sg('obtain_from_sliding_window', winsize, skip)
通过下面的命令来删除features
sg('clean_features')
从shogun获取Features
[features]=sg('get_features', 'TRAIN|TEST')
向训练数据传递labels及从shogun获取labels,也是采用类似的方法。下面这两个命令
sg('set_labels', 'TRAIN', trainlab)
[labels]=sg('get_labels', 'TRAIN|TEST')
分别将labels赋给训练数据及从shogun返回labels(注意trainlab的数据已经传给shogun,对trainlab的修改不会影响训练)。
这些命令用于创建、获取和设置核函数矩阵。
在shogun中创建一个核函数
sg('set_kernel', 'KERNELNAME', 'FEATURETYPE', CACHESIZE, PARAMETERS)
sg('add_kernel', WEIGHT, 'KERNELNAME', 'FEATURETYPE', CACHESIZE, PARAMETERS)
这里KERNELNAME是核函数名字,FEATURETYPE是feature的类型(例如,REAL代表标准实数feature向量),CACHESIZE是分配给核函数 的缓存(以MB为单位),PARAMETERS为其它参数。
在SHOGUN中已实现的核函数有以下这些:
想要在实数空间中使用一个高斯核函数,可以这样
sg('set_kernel', 'GAUSSIAN', 'TYPE', CACHESIZE, SIGMA)
例如:
sg('set_kernel', 'GAUSSIAN', 'REAL', 40, 1)
这样便创建了一个实数空间上的高斯核函数,它的缓存为40MB,sigma值为1。在高斯核函数 可使用的值类型有:REAL, SPARSEREAL。
通过下面这样可以创建一个线性核函数:
sg('set_kernel', 'LINEAR', 'TYPE', CACHESIZE)
例如:
sg('add_kernel', 1.0, 'LINEAR', 'REAL', 50')
这样创建了一个实值的线性核函数,其中缓存为50MB,权重为1.0。
线性核函数可使用的值类型:BYTE, WORD CHAR, REAL, SPARSEREAL。
通过下面这样可以创建一个多项式核函数:
sg('set_kernel', 'POLY', 'TYPE', CACHESIZE, DEGREE, INHOMOGENE, NORMALIZE)
例如:
sg('add_kernel', 0.1, 'POLY', 'REAL', 50, 3, 0)
添加了一个多项式核函数。多项式核函数可使用的值类型:REAL,CHAR, SPARSEREAL。
sg('set_kernel', 'SIGMOID', 'TYPE', CACHESIZE, GAMMA, COEFF)
例如:
sg('set_kernel', 'SIGMOID', 'REAL', 40, 0.1, 0.1)
创建了一个实值sigmoid核函数,缓存为40MB,gamma值为0.1,还有一个值为0.1的系数。sigmoid 核函数可使用的值类型:REAL。
sg('set_custom_kernel', kernelmatrix, 'DIAG|FULL|FULL2DIAG')此外,用户也可以自定义核函数,定义时可以指定一个上三角矩阵(DIAG),全矩阵(FULL),或者用上三角矩阵保存的全矩阵(FULL2DIAG)。
get_kernel_matrix和get_distance_matrix这两个命令分别用于返回核函数矩阵和距离矩阵。
[D]=sg('get_distance_matrix', 'TRAIN|TEST')
[K]=sg('get_kernel_matrix', 'TRAIN|TEST')
km refers to a matrix object.
get_svm命令返回一个SVM的相关属性,如Langrange乘数alpha,偏置量b,支持向量的下标(从0开始)。
[bias, alphas]=sg('get_svm')
sg('set_classifier', bias, alphas)
get_classifier命令返回一系列参数。set_classifier可用于设置alpha和b。
测试样本的分类结果通过下面方式得到:
[result]=sg('classify')
[result]=sg('classify_example', feature_vector_index)结果是一个向量,包含每一个数据点的分类结果,classify_example 只返回一个指定数据点的分类结果(注意python中的下标是以0开始, 而在octave, matlab, R中是以1开始的)。
其它函数
返回shogun版本号
sg('get_version')
获取帮助文本
sg('help')
sg('help', 'CMD')
设置调试日志等级,这在跟踪错误时有用。
sg('loglevel', 'LEVEL')等级可为DEBUG, WARN, ERROR之一
例如
> sg('loglevel', 'ALL')
会显示所有操作。
通过学习上面的相关命令,你现在可以编写自己的SHOGUN应用程序。
让我们来合并这个例子:
sg('set_features', 'TRAIN', traindat)将traindat中的数据注册为训练数据。
sg('set_labels', 'TRAIN', trainlab)注册训练label。
sg('set_kernel', 'GAUSSIAN', 'REAL', 100, 1.0)创建一个高斯核函数。
sg('new_classifier', 'SVMLIGHT')创建一个SVM对象。
sg('c', 20.0)将SVM的C值高为20.0。
sg('train_classifier')将数据传给核函数并作使用这些样本训练分类器。
sg('set_features', 'TEST', testdat)注册测试样本
out=sg('classify')attaches the data to the kernel and classifies. Then 将数据传给核函数及分类器。然后通过一个向量返回分类结果。