SHOGUN  4.1.0
 全部  命名空间 文件 函数 变量 类型定义 枚举 枚举值 友元 宏定义  
ModularTutorial.mainpage
浏览该文件的文档.
1 /*!
2 \page modular_tutorial 模块化接口使用指南
3 
4 SHOGUN为Python和Octave支持的模块化接口提供了一个直观和容易的使用shogun功能的方法。与
5 静态接口(\subpage staticinterfaces)相比,模块化接口更加灵活并具有良好的扩展性。
6 
7 如果这是第一次使用shogun,这就是你首先要看的地方!
8 
9 在本指南中,我们将演示如使用shogun创建一个基于高斯核函数的SVM分类器。但是,
10 首先需要启动python或者octave并加载shogun。
11 
12 \section start_shogun_modular 启动SHOGUN
13 
14 要加载shogun的模块,在octave下输入
15 \verbatim
16 init_shogun
17 \endverbatim
18 
19 在python下需要指定我们要使用的函数。
20 在这个例子中,我们需要feature和label表示数据,一个分类器,一个用于比较feature相似性的核函数
21 及一些评价方法。
22 
23 \verbatim
24 from shogun.Features import *
25 from shogun.Kernel import *
26 from shogun.Classifier import *
27 from shogun.Evaluation import *
28 \endverbatim
29 
30 (注意这里模块shogun.Features包含类Labels)。
31 \section docu_shogun_modular 使用帮助
32 
33 如果想知道shogun中类的一些基本信息或者某一个类的文档,使用上面的Classes标签查看类
34 列表。所有类都有良好的文档(如果你觉得文档不好,请告诉我们)。注意所有在类列表中类
35 都有C作前缀,在python和octave模块化接口中使用时需要去掉C前缀。
36 
37 另外,在python下通过help命令也可以得到相同的文档,你只需要输入
38 \verbatim
39 help(<classname>)
40 \endverbatim
41 
42 例如
43 \verbatim
44 from shogun.Kernel import GaussianKernel
45 help(GaussianKernel)
46 \endverbatim
47 
48 或者
49 
50 \verbatim
51 import shogun.Kernel
52 help(shogun.Kernel)
53 \endverbatim
54 
55 
56 \section toy_tutorial_modular 产生一个小数据集
57 
58 首先,我们先来产生一个小的数据集。在python中,我们需要加载numpy。我们产生
59 一个基于高斯分布的训练数据集及测试数据集,每个数据集可以分为两块,两块的数据中心之间有一定的距离。
60 数据保存在一个矩阵中,每一列代表一个个体。另外,我们还需要一个向量保存label(每项的值为1或-1)
61 ,分别说明属于哪一类。
62 
63 \verbatim
64 from numpy import *
65 from numpy.random import randn
66 dist=0.5
67 traindata_real = concatenate((randn(2,100)-dist, randn(2,100)+dist), axis=1)
68 testdata_real = concatenate((randn(2,100)-dist, randn(2,100)+dist), axis=1)
69 train_labels = concatenate((-ones(100), ones(100)))
70 test_labels = concatenate((-ones(100), ones(100)))
71 \endverbatim
72 
73 在octave下,可以这样
74 \verbatim
75 dist=0.5
76 traindata_real = [randn(2,100)-dist, randn(2,100)+dist];
77 testdata_real = [randn(2,100)-dist, randn(2,100)+dist];
78 train_labels = [-ones(1,100), ones(1,100)];
79 test_labels = [-ones(1,100), ones(1,100)];
80 \endverbatim
81 
82 本指南的后面部分在python和octave都是一样的(相同的语法,略为不同的是,在octave分号是必需的)。
83 \section svm_tutorial_modular 创建一个SVM分类器
84 
85 
86 要在shogun中处理上面的数据集,我们需要新建一个feature对象,这里使用RealFeatures
87 (用于实数矩阵,请参考shogun::CSimpleFeatures)
88 
89 \verbatim
90 feats_train = RealFeatures(traindata_real);
91 feats_test = RealFeatures(testdata_real);
92 \endverbatim
93 
94 使用上面的feature对象我们可以新建一个kernel对象。基于上面的feature,我们创建了
95 一个高斯kernel,另外还有一个width值(更多信息参考shogun::CGaussianKernel)。
96 
97 \verbatim
98 width = 2;
99 kernel = GaussianKernel(feats_train, feats_train, width);
100 \endverbatim
101 
102 and can now compute the kernel matrix
103 \verbatim
104 km = kernel.get_kernel_matrix();
105 \endverbatim
106 
107 要训练一个SVM,需要为样本提供label,一个值为1或-1的向量,像上面的train_labels变量。基于train_labels
108 可创建一个label对象。
109 
110 \verbatim
111 labels = Labels(train_labels);
112 labels_test = Labels(test_labels);
113 \endverbatim
114 
115 接下来只需要做的是,指定一个代价参数C(用于评价泛化效果),然后创建一个SVM,调用SVM的train方法来训练。
116 很简单,是吧?
117 \verbatim
118 C = 1.0;
119 svm = LibSVM(C, kernel, labels);
120 svm.train();
121 \endverbatim
122 
123 想要将SVM应用到测试数据,我们只需要传递一个feature对象给SVM的classify方法,该方法返回一个Label
124 对象(注意我们还可以在初始化kernel对象时指定训练数据集和测试数据集,然后调用无参数的classify方法,
125 在其它的一些例子中你可以看到这种情况)。
126 如果我们想在python/octave分析这些输出,可以通过get_labels()方法获得输出的向量形式。
127 
128 \verbatim
129 output = svm.classify(feats_test);
130 output_vector = output.get_labels();
131 \endverbatim
132 
133 
134 根据这些输出及测试集的label,我们可评价SVM的预测性能。首先需要创建一个PerformanceMeasures对象,
135 它包含多种衡量性能的方法,如accuracy (acc),ROC曲线,F-score等等:
136 
137 \verbatim
138 pm = PerformanceMeasures(labels_test, output);
139 acc = pm.get_accuracy();
140 roc = pm.get_auROC();
141 fms = pm.get_fmeasure();
142 \endverbatim
143 
144 这就是本指南要介绍的例子。要想知道更多高级使用可以看更多下面目录的例子
145 
146 \li examples/octave-modular also available online \subpage octave_modular_examples "here"
147 \li examples/python-modular also available online \subpage python_modular_examples "here"
148 
149 作为一个完整的例子,下面给出两种接口的代码
150 For octave:
151 
152 \verbinclude classifier_libsvm_minimal_modular.m
153 
154 For python:
155 \verbinclude classifier_libsvm_minimal_modular.py
156 */

SHOGUN 机器学习工具包 - 项目文档