1 #ifndef _LIBSVM_H 2 #define _LIBSVM_H 3 4 #define LIBSVM_VERSION 323 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, C_RNK }; /* svm_type */ 26 enum { LINEAR, POLY, RBF, SIGMOID, STUMP, PERC, LAPLACE, EXPO }; /* 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 int *sv_indices; /* sv_indices[0,...,nSV-1] are values in [1,...,num_traning_data] to indicate SVs in the training set */ 63 64 /* for classification only */ 65 66 int *label; /* label of each class (label[k]) */ 67 int *nSV; /* number of SVs for each class (nSV[k]) */ 68 /* nSV[0] + nSV[1] + ... + nSV[k-1] = l */ 69 /* XXX */ 70 int free_sv; /* 1 if svm_model is created by svm_load_model*/ 71 /* 0 if svm_model is created by svm_train */ 72 }; 73 74 struct svm_model *svm_train(const struct svm_problem *prob, const struct svm_parameter *param); 75 void svm_cross_validation(const struct svm_problem *prob, const struct svm_parameter *param, int nr_fold, double *target); 76 77 int svm_save_model(const char *model_file_name, const struct svm_model *model); 78 struct svm_model *svm_load_model(const char *model_file_name); 79 80 int svm_get_svm_type(const struct svm_model *model); 81 int svm_get_nr_class(const struct svm_model *model); 82 void svm_get_labels(const struct svm_model *model, int *label); 83 void svm_get_sv_indices(const struct svm_model *model, int *sv_indices); 84 int svm_get_nr_sv(const struct svm_model *model); 85 double svm_get_svr_probability(const struct svm_model *model); 86 87 double svm_predict_values(const struct svm_model *model, const struct svm_node *x, double* dec_values); 88 double svm_predict(const struct svm_model *model, const struct svm_node *x); 89 double svm_predict_probability(const struct svm_model *model, const struct svm_node *x, double* prob_estimates); 90 91 void svm_free_model_content(struct svm_model *model_ptr); 92 void svm_free_and_destroy_model(struct svm_model **model_ptr_ptr); 93 void svm_destroy_param(struct svm_parameter *param); 94 95 const char *svm_check_parameter(const struct svm_problem *prob, const struct svm_parameter *param); 96 int svm_check_probability_model(const struct svm_model *model); 97 98 void svm_set_print_string_function(void (*print_func)(const char *)); 99 100 #ifdef __cplusplus 101 } 102 #endif 103 104 #endif /* _LIBSVM_H */ 105