Medical Imaging Interaction Toolkit  2023.04.00
Medical Imaging Interaction Toolkit
svm.h
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 
13 /*===================================================================
14 
15 Copyright (c) 2000-2014 Chih-Chung Chang and Chih-Jen Lin
16 All rights reserved.
17 
18 Redistribution and use in source and binary forms, with or without
19 modification, are permitted provided that the following conditions
20 are met:
21 
22 1. Redistributions of source code must retain the above copyright
23 notice, this list of conditions and the following disclaimer.
24 
25 2. Redistributions in binary form must reproduce the above copyright
26 notice, this list of conditions and the following disclaimer in the
27 documentation and/or other materials provided with the distribution.
28 
29 3. Neither name of copyright holders nor the names of its contributors
30 may be used to endorse or promote products derived from this software
31 without specific prior written permission.
32 
33 
34 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
35 ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
36 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
37 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
38 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
39 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
40 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
41 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
42 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
43 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
44 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
45 
46 ===================================================================*/
47 
48 #ifndef _LIBSVM_H
49 #define _LIBSVM_H
50 
51 #define LIBSVM_VERSION 318
52 
53 #ifdef __cplusplus
54 extern "C" {
55 #endif
56 
57 extern int libsvm_version;
58 
59 struct svm_node
60 {
61  int index;
62  double value;
63 };
64 
66 {
67  int l;
68  double *y;
69  struct svm_node **x;
70  double *W; /* instance weight */
71 };
72 
73 enum { C_SVC, NU_SVC, ONE_CLASS, EPSILON_SVR, NU_SVR }; /* svm_type */
74 enum { LINEAR, POLY, RBF, SIGMOID, PRECOMPUTED }; /* kernel_type */
75 
77 {
78  int svm_type;
80  int degree; /* for poly */
81  double gamma; /* for poly/rbf/sigmoid */
82  double coef0; /* for poly/sigmoid */
83 
84  /* these are for training only */
85  double cache_size; /* in MB */
86  double eps; /* stopping criteria */
87  double C; /* for C_SVC, EPSILON_SVR and NU_SVR */
88  int nr_weight; /* for C_SVC */
89  int *weight_label; /* for C_SVC */
90  double* weight; /* for C_SVC */
91  double nu; /* for NU_SVC, ONE_CLASS, and NU_SVR */
92  double p; /* for EPSILON_SVR */
93  int shrinking; /* use the shrinking heuristics */
94  int probability; /* do probability estimates */
95 };
96 
97 //
98 // svm_model
99 //
100 struct svm_model
101 {
102  struct svm_parameter param; /* parameter */
103  int nr_class; /* number of classes, = 2 in regression/one class svm */
104  int l; /* total #SV */
105  struct svm_node **SV; /* SVs (SV[l]) */
106  double **sv_coef; /* coefficients for SVs in decision functions (sv_coef[k-1][l]) */
107  double *rho; /* constants in decision functions (rho[k*(k-1)/2]) */
108  double *probA; /* pariwise probability information */
109  double *probB;
110  int *sv_indices; /* sv_indices[0,...,nSV-1] are values in [1,...,num_traning_data] to indicate SVs in the training set */
111 
112  /* for classification only */
113 
114  int *label; /* label of each class (label[k]) */
115  int *nSV; /* number of SVs for each class (nSV[k]) */
116  /* nSV[0] + nSV[1] + ... + nSV[k-1] = l */
117  /* XXX */
118  int free_sv; /* 1 if svm_model is created by svm_load_model*/
119  /* 0 if svm_model is created by svm_train */
120 };
121 
122 struct svm_model *svm_train(const struct svm_problem *prob, const struct svm_parameter *param);
123 void svm_cross_validation(const struct svm_problem *prob, const struct svm_parameter *param, int nr_fold, double *target);
124 
125 int svm_save_model(const char *model_file_name, const struct svm_model *model);
126 struct svm_model *svm_load_model(const char *model_file_name);
127 
128 int svm_get_svm_type(const struct svm_model *model);
129 int svm_get_nr_class(const struct svm_model *model);
130 void svm_get_labels(const struct svm_model *model, int *label);
131 void svm_get_sv_indices(const struct svm_model *model, int *sv_indices);
132 int svm_get_nr_sv(const struct svm_model *model);
133 double svm_get_svr_probability(const struct svm_model *model);
134 
135 double svm_predict_values(const struct svm_model *model, const struct svm_node *x, double* dec_values);
136 double svm_predict(const struct svm_model *model, const struct svm_node *x);
137 double svm_predict_probability(const struct svm_model *model, const struct svm_node *x, double* prob_estimates);
138 
139 void svm_free_model_content(struct svm_model *model_ptr);
140 void svm_free_and_destroy_model(struct svm_model **model_ptr_ptr);
142 
143 const char *svm_check_parameter(const struct svm_problem *prob, const struct svm_parameter *param);
144 int svm_check_probability_model(const struct svm_model *model);
145 
146 void svm_set_print_string_function(void (*print_func)(const char *));
147 
148 #ifdef __cplusplus
149 }
150 #endif
151 
152 #endif /* _LIBSVM_H */
svm_check_parameter
const char * svm_check_parameter(const struct svm_problem *prob, const struct svm_parameter *param)
svm_problem::y
double * y
Definition: svm.h:68
mitk::Action
represents an action, that is executed after a certain event (in statemachine-mechanism)
Definition: mitkAction.h:27
SIGMOID
@ SIGMOID
Definition: svm.h:74
PRECOMPUTED
@ PRECOMPUTED
Definition: svm.h:74
POLY
@ POLY
Definition: svm.h:74
svm_model::rho
double * rho
Definition: svm.h:107
svm_get_labels
void svm_get_labels(const struct svm_model *model, int *label)
svm_check_probability_model
int svm_check_probability_model(const struct svm_model *model)
svm_model::nSV
int * nSV
Definition: svm.h:115
svm_parameter::weight_label
int * weight_label
Definition: svm.h:89
svm_parameter::kernel_type
int kernel_type
Definition: svm.h:79
libsvm_version
int libsvm_version
svm_parameter::eps
double eps
Definition: svm.h:86
svm_model::sv_indices
int * sv_indices
Definition: svm.h:110
svm_predict_values
double svm_predict_values(const struct svm_model *model, const struct svm_node *x, double *dec_values)
svm_model::l
int l
Definition: svm.h:104
svm_node::index
int index
Definition: svm.h:61
ONE_CLASS
@ ONE_CLASS
Definition: svm.h:73
svm_problem::l
int l
Definition: svm.h:67
svm_parameter::C
double C
Definition: svm.h:87
svm_model::probA
double * probA
Definition: svm.h:108
svm_get_sv_indices
void svm_get_sv_indices(const struct svm_model *model, int *sv_indices)
svm_node
Definition: svm.h:59
svm_parameter::cache_size
double cache_size
Definition: svm.h:85
svm_model::label
int * label
Definition: svm.h:114
svm_model::SV
struct svm_node ** SV
Definition: svm.h:105
svm_parameter::coef0
double coef0
Definition: svm.h:82
svm_problem
Definition: svm.h:65
svm_predict
double svm_predict(const struct svm_model *model, const struct svm_node *x)
test
Follow Up Storage - Class to facilitate loading/accessing structured follow-up data.
Definition: testcase.h:28
svm_model::sv_coef
double ** sv_coef
Definition: svm.h:106
svm_parameter::probability
int probability
Definition: svm.h:94
svm_parameter
Definition: svm.h:76
mitk
DataCollection - Class to facilitate loading/accessing structured data.
Definition: RenderingTests.dox:1
svm_model::nr_class
int nr_class
Definition: svm.h:103
svm_parameter::gamma
double gamma
Definition: svm.h:81
svm_cross_validation
void svm_cross_validation(const struct svm_problem *prob, const struct svm_parameter *param, int nr_fold, double *target)
svm_parameter::nr_weight
int nr_weight
Definition: svm.h:88
svm_model::param
struct svm_parameter param
Definition: svm.h:102
svm_parameter::nu
double nu
Definition: svm.h:91
svm_get_svm_type
int svm_get_svm_type(const struct svm_model *model)
svm_get_nr_sv
int svm_get_nr_sv(const struct svm_model *model)
NU_SVC
@ NU_SVC
Definition: svm.h:73
svm_save_model
int svm_save_model(const char *model_file_name, const struct svm_model *model)
svm_parameter::degree
int degree
Definition: svm.h:80
svm_problem::W
double * W
Definition: svm.h:70
svm_problem::x
struct svm_node ** x
Definition: svm.h:69
svm_set_print_string_function
void svm_set_print_string_function(void(*print_func)(const char *))
svm_parameter::svm_type
int svm_type
Definition: svm.h:78
svm_node::value
double value
Definition: svm.h:62
mitk::AcMOVESELECTED
@ AcMOVESELECTED
Definition: mitkInteractionConst.h:307
svm_parameter::weight
double * weight
Definition: svm.h:90
NU_SVR
@ NU_SVR
Definition: svm.h:73
svm_parameter::p
double p
Definition: svm.h:92
svm_model::free_sv
int free_sv
Definition: svm.h:118
EPSILON_SVR
@ EPSILON_SVR
Definition: svm.h:73
svm_load_model
struct svm_model * svm_load_model(const char *model_file_name)
svm_train
struct svm_model * svm_train(const struct svm_problem *prob, const struct svm_parameter *param)
svm_model
Definition: svm.h:100
svm_parameter::shrinking
int shrinking
Definition: svm.h:93
mitkClassMacro
#define mitkClassMacro(className, SuperClassName)
Definition: mitkCommon.h:36
svm_destroy_param
void svm_destroy_param(struct svm_parameter *param)
svm_predict_probability
double svm_predict_probability(const struct svm_model *model, const struct svm_node *x, double *prob_estimates)
mitk::MitkMultilabelIOMimeTypes::Get
MITKMULTILABELIO_EXPORT std::vector< CustomMimeType * > Get()
svm_free_model_content
void svm_free_model_content(struct svm_model *model_ptr)
svm_free_and_destroy_model
void svm_free_and_destroy_model(struct svm_model **model_ptr_ptr)
possible
use the deprecated old MITK testing style If possible
Definition: TestsGeneral.dox:104
svm_model::probB
double * probB
Definition: svm.h:109
LINEAR
@ LINEAR
Definition: svm.h:74
svm_get_nr_class
int svm_get_nr_class(const struct svm_model *model)
RBF
@ RBF
Definition: svm.h:74
svm_get_svr_probability
double svm_get_svr_probability(const struct svm_model *model)
C_SVC
@ C_SVC
Definition: svm.h:73