1 #ifndef _LIBSVM_H 2 #define _LIBSVM_H 3 4 #define LIBSVM_VERSION 311 5 6 #ifdef __cplusplus 7 extern "C" { 8 #endif 9 10 extern int libsvm_version; 11 12 struct svm_node 13 { 14 int index; 15 double value; 16 }; 17 18 struct svm_problem 19 { 20 int l; 21 double *y; 22 struct svm_node **x; 23 }; 24 25 enum { C_SVC, NU_SVC, ONE_CLASS, EPSILON_SVR, NU_SVR }; /* svm_type */ 26 enum { LINEAR, POLY, RBF, SIGMOID, PRECOMPUTED }; /* kernel_type */ 27 28 struct svm_parameter 29 { 30 int svm_type; 31 int kernel_type; 32 int degree; /* for poly */ 33 double gamma; /* for poly/rbf/sigmoid */ 34 double coef0; /* for poly/sigmoid */ 35 36 /* these are for training only */ 37 double cache_size; /* in MB */ 38 double eps; /* stopping criteria */ 39 double C; /* for C_SVC, EPSILON_SVR and NU_SVR */ 40 int nr_weight; /* for C_SVC */ 41 int *weight_label; /* for C_SVC */ 42 double* weight; /* for C_SVC */ 43 double nu; /* for NU_SVC, ONE_CLASS, and NU_SVR */ 44 double p; /* for EPSILON_SVR */ 45 int shrinking; /* use the shrinking heuristics */ 46 int probability; /* do probability estimates */ 47 }; 48 49 // 50 // svm_model 51 // 52 struct svm_model 53 { 54 struct svm_parameter param; /* parameter */ 55 int nr_class; /* number of classes, = 2 in regression/one class svm */ 56 int l; /* total #SV */ 57 struct svm_node **SV; /* SVs (SV[l]) */ 58 double **sv_coef; /* coefficients for SVs in decision functions (sv_coef[k-1][l]) */ 59 double *rho; /* constants in decision functions (rho[k*(k-1)/2]) */ 60 double *probA; /* pariwise probability information */ 61 double *probB; 62 63 /* for classification only */ 64 65 int *label; /* label of each class (label[k]) */ 66 int *nSV; /* number of SVs for each class (nSV[k]) */ 67 /* nSV[0] + nSV[1] + ... + nSV[k-1] = l */ 68 /* XXX */ 69 int free_sv; /* 1 if svm_model is created by svm_load_model*/ 70 /* 0 if svm_model is created by svm_train */ 71 }; 72 73 struct svm_model *svm_train(const struct svm_problem *prob, const struct svm_parameter *param); 74 void svm_cross_validation(const struct svm_problem *prob, const struct svm_parameter *param, int nr_fold, double *target); 75 76 int svm_save_model(const char *model_file_name, const struct svm_model *model); 77 struct svm_model *svm_load_model(const char *model_file_name); 78 79 int svm_get_svm_type(const struct svm_model *model); 80 int svm_get_nr_class(const struct svm_model *model); 81 void svm_get_labels(const struct svm_model *model, int *label); 82 double svm_get_svr_probability(const struct svm_model *model); 83 84 double svm_predict_values(const struct svm_model *model, const struct svm_node *x, double* dec_values); 85 double svm_predict(const struct svm_model *model, const struct svm_node *x); 86 double svm_predict_probability(const struct svm_model *model, const struct svm_node *x, double* prob_estimates); 87 88 void svm_free_model_content(struct svm_model *model_ptr); 89 void svm_free_and_destroy_model(struct svm_model **model_ptr_ptr); 90 void svm_destroy_param(struct svm_parameter *param); 91 92 const char *svm_check_parameter(const struct svm_problem *prob, const struct svm_parameter *param); 93 int svm_check_probability_model(const struct svm_model *model); 94 95 void svm_set_print_string_function(void (*print_func)(const char *)); 96 97 #ifdef __cplusplus 98 } 99 #endif 100 101 #endif /* _LIBSVM_H */ 102