SVM_libsvm.h

Go to the documentation of this file.
00001 /*
00002  * Copyright (c) 2000-2008 Chih-Chung Chang and Chih-Jen Lin
00003  * All rights reserved.
00004  * 
00005  * Redistribution and use in source and binary forms, with or without
00006  * modification, are permitted provided that the following conditions
00007  * are met:
00008  * 
00009  * 1. Redistributions of source code must retain the above copyright
00010  * notice, this list of conditions and the following disclaimer.
00011  * 
00012  * 2. Redistributions in binary form must reproduce the above copyright
00013  * notice, this list of conditions and the following disclaimer in the
00014  * documentation and/or other materials provided with the distribution.
00015  * 
00016  * 3. Neither name of copyright holders nor the names of its contributors
00017  * may be used to endorse or promote products derived from this software
00018  * without specific prior written permission.
00019  * 
00020  * 
00021  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00022  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00023  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
00024  * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR
00025  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00026  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00027  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00028  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00029  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00030  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00031  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00032  *
00033  * Shogun specific adjustments (w) 2006-2008 Soeren Sonnenburg
00034  */
00035 
00036 #ifndef _LIBSVM_H
00037 #define _LIBSVM_H
00038 
00039 #ifdef __cplusplus
00040 extern "C" {
00041 #endif
00042 
00043 #include "kernel/Kernel.h"
00044 
00046 struct svm_node
00047 {
00049     int32_t index;
00050 };
00051 
00053 struct svm_problem
00054 {
00056     int32_t l;
00058     float64_t *y;
00060     struct svm_node **x;
00061 };
00062 
00063 enum { C_SVC, NU_SVC, ONE_CLASS, EPSILON_SVR, NU_SVR }; /* svm_type */
00064 enum { LINEAR, POLY, RBF, SIGMOID, PRECOMPUTED }; /* kernel_type */
00065 
00067 struct svm_parameter
00068 {
00070     int32_t svm_type;
00072     int32_t kernel_type;
00074     CKernel* kernel;
00076     int32_t degree;
00078     float64_t gamma;
00080     float64_t coef0;
00081 
00082     /* these are for training only */
00084     float64_t cache_size;
00086     float64_t eps;
00088     float64_t C;
00090     int32_t nr_weight;
00092     int32_t *weight_label;
00094     float64_t* weight;
00096     float64_t nu;
00098     float64_t p;
00100     int32_t shrinking;
00101 };
00102 
00104 struct svm_model
00105 {
00107     svm_parameter param;
00109     int32_t nr_class;
00111     int32_t l;
00113     svm_node **SV;
00115     float64_t **sv_coef;
00117     float64_t *rho;
00118 
00119     // for classification only
00120 
00122     int32_t *label;
00126     int32_t *nSV;
00127     // XXX
00131     int32_t free_sv;
00133     float64_t objective;
00134 };
00135 
00136 
00137 
00138 struct svm_model *svm_train(
00139     const struct svm_problem *prob, const struct svm_parameter *param);
00140 
00141 float64_t svm_predict(const struct svm_model *model, const struct svm_node *x);
00142 
00143 void svm_destroy_model(struct svm_model *model);
00144 
00145 const char *svm_check_parameter(const struct svm_problem *prob, const struct svm_parameter *param);
00146 
00147 #ifdef __cplusplus
00148 }
00149 #endif
00150 
00151 #endif /* _LIBSVM_H */

SHOGUN Machine Learning Toolbox - Documentation