SHOGUN
v2.0.0
Main Page
Related Pages
Modules
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
src
shogun
machine
Machine.h
Go to the documentation of this file.
1
/*
2
* This program is free software; you can redistribute it and/or modify
3
* it under the terms of the GNU General Public License as published by
4
* the Free Software Foundation; either version 3 of the License, or
5
* (at your option) any later version.
6
*
7
* Written (W) 1999-2009 Soeren Sonnenburg
8
* Written (W) 2011-2012 Heiko Strathmann
9
* Copyright (C) 1999-2009 Fraunhofer Institute FIRST and Max-Planck-Society
10
*/
11
12
#ifndef _MACHINE_H__
13
#define _MACHINE_H__
14
15
#include <
shogun/lib/common.h
>
16
#include <
shogun/base/SGObject.h
>
17
#include <
shogun/labels/Labels.h
>
18
#include <
shogun/labels/BinaryLabels.h
>
19
#include <
shogun/labels/RegressionLabels.h
>
20
#include <
shogun/labels/MulticlassLabels.h
>
21
#include <
shogun/labels/StructuredLabels.h
>
22
#include <
shogun/labels/LatentLabels.h
>
23
#include <
shogun/features/Features.h
>
24
25
namespace
shogun
26
{
27
28
class
CFeatures;
29
class
CLabels;
30
class
CMath;
31
33
enum
EMachineType
34
{
35
CT_NONE
= 0,
36
CT_LIGHT
= 10,
37
CT_LIGHTONECLASS
= 11,
38
CT_LIBSVM
= 20,
39
CT_LIBSVMONECLASS
=30,
40
CT_LIBSVMMULTICLASS
=40,
41
CT_MPD
= 50,
42
CT_GPBT
= 60,
43
CT_CPLEXSVM
= 70,
44
CT_PERCEPTRON
= 80,
45
CT_KERNELPERCEPTRON
= 90,
46
CT_LDA
= 100,
47
CT_LPM
= 110,
48
CT_LPBOOST
= 120,
49
CT_KNN
= 130,
50
CT_SVMLIN
=140,
51
CT_KERNELRIDGEREGRESSION
= 150,
52
CT_GNPPSVM
= 160,
53
CT_GMNPSVM
= 170,
54
CT_SUBGRADIENTSVM
= 180,
55
CT_SUBGRADIENTLPM
= 190,
56
CT_SVMPERF
= 200,
57
CT_LIBSVR
= 210,
58
CT_SVRLIGHT
= 220,
59
CT_LIBLINEAR
= 230,
60
CT_KMEANS
= 240,
61
CT_HIERARCHICAL
= 250,
62
CT_SVMOCAS
= 260,
63
CT_WDSVMOCAS
= 270,
64
CT_SVMSGD
= 280,
65
CT_MKLMULTICLASS
= 290,
66
CT_MKLCLASSIFICATION
= 300,
67
CT_MKLONECLASS
= 310,
68
CT_MKLREGRESSION
= 320,
69
CT_SCATTERSVM
= 330,
70
CT_DASVM
= 340,
71
CT_LARANK
= 350,
72
CT_DASVMLINEAR
= 360,
73
CT_GAUSSIANNAIVEBAYES
= 370,
74
CT_AVERAGEDPERCEPTRON
= 380,
75
CT_SGDQN
= 390,
76
CT_CONJUGATEINDEX
= 400,
77
CT_LINEARRIDGEREGRESSION
= 410,
78
CT_LEASTSQUARESREGRESSION
= 420,
79
CT_QDA
= 430,
80
CT_NEWTONSVM
= 440,
81
CT_GAUSSIANPROCESSREGRESSION
= 450,
82
CT_LARS
= 460,
83
CT_MULTICLASS
= 470,
84
CT_DIRECTORLINEAR
= 480,
85
CT_DIRECTORKERNEL
= 490
86
};
87
89
enum
ESolverType
90
{
91
ST_AUTO
=0,
92
ST_CPLEX
=1,
93
ST_GLPK
=2,
94
ST_NEWTON
=3,
95
ST_DIRECT
=4,
96
ST_ELASTICNET
=5,
97
ST_BLOCK_NORM
=6
98
};
99
101
enum
EProblemType
102
{
103
PT_BINARY
= 0,
104
PT_REGRESSION
= 1,
105
PT_MULTICLASS
= 2,
106
PT_STRUCTURED
= 3,
107
PT_LATENT
= 4
108
};
109
110
#define MACHINE_PROBLEM_TYPE(PT) \
111
\
114
virtual EProblemType get_machine_problem_type() const { return PT; }
115
133
class
CMachine :
public
CSGObject
134
{
135
public
:
137
CMachine
();
138
140
virtual
~CMachine
();
141
151
virtual
bool
train
(CFeatures* data=NULL);
152
159
virtual
CLabels*
apply
(CFeatures* data=NULL);
160
162
virtual
CBinaryLabels*
apply_binary
(CFeatures* data=NULL);
164
virtual
CRegressionLabels*
apply_regression
(CFeatures* data=NULL);
166
virtual
CMulticlassLabels*
apply_multiclass
(CFeatures* data=NULL);
168
virtual
CStructuredLabels*
apply_structured
(CFeatures* data=NULL);
170
virtual
CLatentLabels*
apply_latent
(CFeatures* data=NULL);
171
176
virtual
void
set_labels
(CLabels* lab);
177
182
virtual
CLabels*
get_labels
();
183
188
void
set_max_train_time
(
float64_t
t);
189
194
float64_t
get_max_train_time
();
195
200
virtual
EMachineType
get_classifier_type
();
201
206
void
set_solver_type
(
ESolverType
st);
207
212
ESolverType
get_solver_type
();
213
219
virtual
void
set_store_model_features
(
bool
store_model);
220
229
virtual
bool
train_locked
(SGVector<index_t> indices)
230
{
231
SG_ERROR
(
"train_locked(SGVector<index_t>) is not yet implemented "
232
"for %s\n"
,
get_name
());
233
return
false
;
234
}
235
237
virtual
float64_t
apply_one
(int32_t i)
238
{
239
SG_NOTIMPLEMENTED
;
240
return
0.0;
241
}
242
248
virtual
CLabels
*
apply_locked
(
SGVector<index_t>
indices);
249
251
virtual
CBinaryLabels
*
apply_locked_binary
(
252
SGVector<index_t>
indices);
254
virtual
CRegressionLabels
*
apply_locked_regression
(
255
SGVector<index_t>
indices);
257
virtual
CMulticlassLabels
*
apply_locked_multiclass
(
258
SGVector<index_t>
indices);
260
virtual
CStructuredLabels
*
apply_locked_structured
(
261
SGVector<index_t>
indices);
263
virtual
CLatentLabels
*
apply_locked_latent
(
264
SGVector<index_t>
indices);
265
274
virtual
void
data_lock
(
CLabels
* labs,
CFeatures
* features);
275
277
virtual
void
post_lock
(
CLabels
* labs,
CFeatures
* features) { };
278
280
virtual
void
data_unlock
();
281
283
virtual
bool
supports_locking
()
const
{
return
false
; }
284
286
bool
is_data_locked
()
const
{
return
m_data_locked
; }
287
289
virtual
EProblemType
get_machine_problem_type
()
const
290
{
291
SG_NOTIMPLEMENTED
;
292
return
PT_BINARY
;
293
}
294
296
virtual
CMachine
*
clone
()
297
{
298
SG_NOTIMPLEMENTED
;
299
return
NULL;
300
}
301
302
virtual
const
char
*
get_name
()
const
{
return
"Machine"
; }
303
304
protected
:
315
virtual
bool
train_machine
(CFeatures* data=NULL)
316
{
317
SG_ERROR
(
"train_machine is not yet implemented for %s!\n"
,
318
get_name
());
319
return
false
;
320
}
321
332
virtual
void
store_model_features
()
333
{
334
SG_ERROR
(
"Model storage and therefore unlocked Cross-Validation and"
335
" Model-Selection is not supported for %s. Locked may"
336
" work though.\n"
,
get_name
());
337
}
338
345
virtual
bool
is_label_valid
(CLabels *lab)
const
346
{
347
return
true
;
348
}
349
351
virtual
bool
train_require_labels
()
const
{
return
true
; }
352
353
protected
:
355
float64_t
m_max_train_time
;
356
358
CLabels
*
m_labels
;
359
361
ESolverType
m_solver_type
;
362
364
bool
m_store_model_features
;
365
367
bool
m_data_locked
;
368
};
369
}
370
#endif // _MACHINE_H__
SHOGUN
Machine Learning Toolbox - Documentation