1 /*! \page staticinterfaces 静态接口
3 如前所述,SHOGUN可以为多种语言提供接口,其中包括Matlab(tm), R, Python以及Octave。
4 下面是关于这些静态接口的简介。对所有的静态接口,我们力求在所有语言都保持相同的
5 语法风格。然而在某些情况下这是不可能的,我们会在相关的文档中描述这些不同。在阅读这些
6 文档之前,我们建议读者先看一下\b examples 目录下的大量例子。例如,在examples/R目录和examples/python
10 \li \ref staticoctaveinterf_sec
11 \li \ref staticpythoninterf_sec
12 \li \ref staticrinterf_sec
15 \li \ref staticiffeatures_sec
16 \li \ref staticifkernel_sec
17 \li \ref staticifsvm_sec
18 \li \ref staticifhmm_sec
19 \li \ref staticifpoim_sec
20 \li \ref staticifutil_sec
21 \li \ref staticifexample_sec
24 \li \ref staticifcmdref_sec
26 \section staticifoverview_sec 静态接口概览和安装测试
28 \subsection staticoctaveinterf_sec 静态matlab和octave接口
30 因为目前octave与matlab基本相同,对这两个接口一个文档已经足够,该文档基于octave
33 要在octave中使用SHOGUN,首先启动octave,使用以下命令检测SHOGUN是否被正确安装:
41 \subsection staticpythoninterf_sec 静态Python接口
43 要在python中使用SHOGUN,首先启动python,使用以下命令检测SHOGUN是否被正确安装
52 \subsection staticrinterf_sec 静态R接口
54 要在R中使用SHOGUN,需要检测SHOGUN是否已被正确安装在R中。在R的命令行中输入(>为提示符)
60 将返回R的所有已安装包的列表,如果SHOGUN已安装会有sg这一项:
63 sg The SHOGUN Machine Learning Toolbox
65 当你确定SHOGUN已被正确安装,你可以通过下面命令加载它:
71 你可以看到关于SHOGUN的一些信息,如编译选项等。使用这个命令加载后,你就可以使用
74 一般来说,SHOGUN中的命令通过函数sg(...)来调用。如果你想查看SHOGUN命令的帮助,可以
81 你可以看到一个帮助,该帮助对所有命令都有一个简单描述。
83 \section staticifcmds 静态接口命令
85 \subsection staticiffeatures_sec feature相关函数
86 这些函数在各种接口中将数据传给shogun或者从shogun获得数据。假如你有一个包含数据的matlab矩阵
87 或者R矩阵,你想将这些数据传给shogun,你只需要像下面这样:
89 \arg \b set_features \verbatim sg('set_features', 'TRAIN|TEST', features[, DNABINFILE|<ALPHABET>]) \endverbatim
90 \arg \b add_features \verbatim sg('add_features', 'TRAIN|TEST', features[, DNABINFILE|<ALPHABET>]) \endverbatim
92 feature可以是char/byte/word/int/real值的矩阵,实值稀疏矩阵及字符串。当处理字符串时,需要
93 指定一个字母表(如DNA, RAW, ...)。
94 使用'TRAIN'告诉SHOGUN这是你用于训练分类器的数据,使用'TEST'来说明这是测试数据。
96 与\b set_features 相反,\b add_features 将新建一个feature对象并将输入的feature添加进去。
97 这个命令在需要处理一组不同的feature(如实数和字符串)或者多个核函数时很有用。
99 如果通过set_features传递了一个字符串,它可以通过滑动窗口来变成多个字符串。
100 可以使用\arg \b from_position_list \verbatim sg('from_position_list', 'TRAIN|TEST', winsize, shift[, skip]) \endverbatim
102 \arg \b obtain_from_sliding_window \verbatim sg('obtain_from_sliding_window', winsize, skip) \endverbatim
106 \arg clean_features \verbatim sg('clean_features') \endverbatim
109 \arg \b get_features \verbatim [features]=sg('get_features', 'TRAIN|TEST') \endverbatim
112 向训练数据传递labels及从shogun获取labels,也是采用类似的方法。下面这两个命令
113 \arg \b set_labels \verbatim sg('set_labels', 'TRAIN', trainlab) \endverbatim
114 \arg \b get_labels \verbatim [labels]=sg('get_labels', 'TRAIN|TEST') \endverbatim
117 分别将labels赋给训练数据及从shogun返回labels(注意trainlab的数据已经传给shogun,对trainlab的修改不会影响训练)。
119 \subsection staticifkernel_sec 核函数和距离
124 \arg \b set_kernel \verbatim sg('set_kernel', 'KERNELNAME', 'FEATURETYPE', CACHESIZE, PARAMETERS) \endverbatim
125 \arg \b add_kernel \verbatim sg('add_kernel', WEIGHT, 'KERNELNAME', 'FEATURETYPE', CACHESIZE, PARAMETERS) \endverbatim
127 这里KERNELNAME是核函数名字,FEATURETYPE是feature的类型(例如,REAL代表标准实数feature向量),CACHESIZE是分配给核函数
128 的缓存(以MB为单位),PARAMETERS为其它参数。
129 \subsubsection staticifsuppkernels_sec 已实现的核函数
131 在SHOGUN中已实现的核函数有以下这些:
137 \li User defined CustomKernel
139 \li Kernel from Distance
140 \li Fixed Degree StringKernel
141 \li Gaussian \f$ k(x,x')=e^{-\frac{||x-x'||^2}{\sigma}} \f$
143 想要在实数空间中使用一个高斯核函数,可以这样
144 \verbatim sg('set_kernel', 'GAUSSIAN', 'TYPE', CACHESIZE, SIGMA)\endverbatim
147 \verbatim sg('set_kernel', 'GAUSSIAN', 'REAL', 40, 1)\endverbatim
148 这样便创建了一个实数空间上的高斯核函数,它的缓存为40MB,sigma值为1。在高斯核函数
149 可使用的值类型有:REAL, SPARSEREAL。
151 \li Gaussian Shift Kernel
153 \li Linear \f$k(x,x')=x\cdot x'\f$
156 \verbatim sg('set_kernel', 'LINEAR', 'TYPE', CACHESIZE)\endverbatim
160 \verbatim sg('add_kernel', 1.0, 'LINEAR', 'REAL', 50')\endverbatim
162 这样创建了一个实值的线性核函数,其中缓存为50MB,权重为1.0。
164 线性核函数可使用的值类型:BYTE, WORD CHAR, REAL, SPARSEREAL。
166 \li Local Alignment StringKernel
167 \li Locality Improved StringKernel
168 \li Polynomial Kernel \f$k(x,x')=(x\cdot x')^d\f$
171 \verbatim sg('set_kernel', 'POLY', 'TYPE', CACHESIZE, DEGREE, INHOMOGENE, NORMALIZE) \endverbatim
174 \verbatim sg('add_kernel', 0.1, 'POLY', 'REAL', 50, 3, 0) \endverbatim
175 添加了一个多项式核函数。多项式核函数可使用的值类型:REAL,CHAR, SPARSEREAL。
179 下面这样可以创建一个Sigmoid核函数:
181 \verbatim sg('set_kernel', 'SIGMOID', 'TYPE', CACHESIZE, GAMMA, COEFF)\endverbatim
185 \verbatim sg('set_kernel', 'SIGMOID', 'REAL', 40, 0.1, 0.1) \endverbatim
187 创建了一个实值sigmoid核函数,缓存为40MB,gamma值为0.1,还有一个值为0.1的系数。sigmoid
190 \li Weighted Spectrum Kernel
191 \li Weighted Degree Kernels
195 \arg \b set_custom_kernel \verbatim sg('set_custom_kernel', kernelmatrix, 'DIAG|FULL|FULL2DIAG') \endverbatim
196 此外,用户也可以自定义核函数,定义时可以指定一个上三角矩阵(DIAG),全矩阵(FULL),或者用上三角矩阵保存的全矩阵(FULL2DIAG)。
198 get_kernel_matrix和get_distance_matrix这两个命令分别用于返回核函数矩阵和距离矩阵。
200 \arg \b get_distance_matrix \verbatim [D]=sg('get_distance_matrix', 'TRAIN|TEST') \endverbatim
201 \arg \b get_kernel_matrix \verbatim [K]=sg('get_kernel_matrix', 'TRAIN|TEST') \endverbatim
203 km refers to a matrix object.
206 \subsection staticifsvm_sec SVM
207 \arg new_classifier 新建一个分类器 (例如一个SVM实例).
208 \arg train_classifier 利用设置的features和核函数训练SVM
210 get_svm命令返回一个SVM的相关属性,如Langrange乘数alpha,偏置量b,支持向量的下标(从0开始)。
211 \arg \b get_classifier \verbatim [bias, alphas]=sg('get_svm') \endverbatim
212 \arg \b set_classifier \verbatim sg('set_classifier', bias, alphas) \endverbatim
214 get_classifier命令返回一系列参数。\b set_classifier可用于设置alpha和b。
217 \arg \b classify \verbatim [result]=sg('classify') \endverbatim
218 \arg \b classify_example \verbatim [result]=sg('classify_example', feature_vector_index) \endverbatim
219 结果是一个向量,包含每一个数据点的分类结果,\b classify_example 只返回一个指定数据点的分类结果(注意python中的下标是以0开始,
220 而在octave, matlab, R中是以1开始的)。
222 \subsection staticifhmm_sec HMM
226 \li hmm_classify_example
230 \subsection staticifpoim_sec POIM
232 \li get_SPEC_consensus
237 \subsection staticifutil_sec 实用程序
242 \arg \b help \verbatim sg('get_version') \endverbatim
245 \arg \b help \verbatim sg('help') \endverbatim
246 \arg \b help \verbatim sg('help', 'CMD') \endverbatim
249 \arg loglevel \verbatim sg('loglevel', 'LEVEL') \endverbatim
250 等级可为DEBUG, WARN, ERROR之一
251 \li ALL: 极为详细的日志输出 (只在内存泄漏时比较有用)。
252 \li DEBUG: 详细的日志输出 (调试时有用)。
253 \li WARN: 少量日志输出 (查找错误时有用)。
254 \li ERROR: 只在遇到致命错误时才输出日志。
258 > sg('loglevel', 'ALL')
262 通过学习上面的相关命令,你现在可以编写自己的SHOGUN应用程序。
264 \section staticifexample_sec 例子
267 \li \verbatim sg('set_features', 'TRAIN', traindat) \endverbatim
268 将traindat中的数据注册为训练数据。
270 \li \verbatim sg('set_labels', 'TRAIN', trainlab) \endverbatim
273 \li \verbatim sg('set_kernel', 'GAUSSIAN', 'REAL', 100, 1.0) \endverbatim
276 \li \verbatim sg('new_classifier', 'SVMLIGHT') \endverbatim
279 \li \verbatim sg('c', 20.0) \endverbatim
282 \li \verbatim sg('train_classifier') \endverbatim
283 将数据传给核函数并作使用这些样本训练分类器。
285 \li \verbatim sg('set_features', 'TEST', testdat) \endverbatim
288 \li \verbatim out=sg('classify') \endverbatim
289 attaches the data to the kernel and classifies. Then
290 将数据传给核函数及分类器。然后通过一个向量返回分类结果。
293 \section staticifcmdref_sec 函数参考
294 \li \subpage staticoctave
295 \li \subpage staticpython
296 \li \subpage staticcmdline