machine learning - Trying to link my program (libsvm.c and libsvm.h) with libsvm.cpp to do a simple prediction -


i trying use libsvm perform binary-class machine learning (2 class only) using c on eclipse. before started using training data, tried running simple xor problem see if libsvm predict correct output value (which supposed +1).

however, after built project, got errors such "undefined reference '_heap_begin'" , "undefined reference '_heap_limit'" , "undefined reference 'svm_train'" , "undefined reference 'svm_predict'" , "undefined reference 'svm_destroy_param'". seems libsvm.c file not linked libsvm.cpp file, though #include "libsvm.h" in both libsvm.c , libsvm.cpp. can please me solve issue? in advance!

libsvm.h:

#ifndef _libsvm_h #define _libsvm_h  #define libsvm_version 322  #ifdef __cplusplus extern "c" { #endif  extern int libsvm_version;  struct svm_node {     int index;     double value; };  struct svm_problem {     int l;     double *y;     struct svm_node **x; };  enum { c_svc, nu_svc, one_class, epsilon_svr, nu_svr }; /* svm_type */ enum { linear, poly, rbf, sigmoid, precomputed }; /* kernel_type */  struct svm_parameter {     int svm_type;     int kernel_type;     int degree; /* poly */     double gamma;   /* poly/rbf/sigmoid */     double coef0;   /* poly/sigmoid */      /* these training */     double cache_size; /* in mb */     double eps; /* stopping criteria */     double c;   /* c_svc, epsilon_svr , nu_svr */     int nr_weight;      /* c_svc */     int *weight_label;  /* c_svc */     double* weight;     /* c_svc */     double nu;  /* nu_svc, one_class, , nu_svr */     double p;   /* epsilon_svr */     int shrinking;  /* use shrinking heuristics */     int probability; /* probability estimates */ };  // // svm_model // struct svm_model {     struct svm_parameter param; /* parameter */     int nr_class;       /* number of classes, = 2 in regression/one class svm */     int l;          /* total #sv */     struct svm_node **sv;       /* svs (sv[l]) */     double **sv_coef;   /* coefficients svs in decision functions (sv_coef[k-1][l]) */     double *rho;        /* constants in decision functions (rho[k*(k-1)/2]) */     double *proba;      /* pariwise probability information */     double *probb;     int *sv_indices;        /* sv_indices[0,...,nsv-1] values in [1,...,num_traning_data] indicate svs in training set */      /* classification */      int *label;     /* label of each class (label[k]) */     int *nsv;       /* number of svs each class (nsv[k]) */                 /* nsv[0] + nsv[1] + ... + nsv[k-1] = l */     /* xxx */     int free_sv;        /* 1 if svm_model created svm_load_model*/                 /* 0 if svm_model created svm_train */ };  struct svm_model *svm_train(const struct svm_problem *prob, const struct svm_parameter *param); void svm_cross_validation(const struct svm_problem *prob, const struct svm_parameter *param, int nr_fold, double *target);  int svm_save_model(const char *model_file_name, const struct svm_model *model); struct svm_model *svm_load_model(const char *model_file_name);  int svm_get_svm_type(const struct svm_model *model); int svm_get_nr_class(const struct svm_model *model); void svm_get_labels(const struct svm_model *model, int *label); void svm_get_sv_indices(const struct svm_model *model, int *sv_indices); int svm_get_nr_sv(const struct svm_model *model); double svm_get_svr_probability(const struct svm_model *model);  double svm_predict_values(const struct svm_model *model, const struct svm_node *x, double* dec_values); double svm_predict(const struct svm_model *model, const struct svm_node *x); double svm_predict_probability(const struct svm_model *model, const struct svm_node *x, double* prob_estimates);  void svm_free_model_content(struct svm_model *model_ptr); void svm_free_and_destroy_model(struct svm_model **model_ptr_ptr); void svm_destroy_param(struct svm_parameter *param);  const char *svm_check_parameter(const struct svm_problem *prob, const struct svm_parameter *param); int svm_check_probability_model(const struct svm_model *model);  void svm_set_print_string_function(void (*print_func)(const char *));  #ifdef __cplusplus } #endif  #endif /* _libsvm_h */ 

libsvm.c:

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <errno.h> #include "libsvm.h" #include "main.h" #define malloc(type,n) (type *)malloc((n)*sizeof(type))  struct svm_parameter param;     // set parse_command_line struct svm_problem prob;        // set read_problem struct svm_model *model; struct svm_node *x_space; struct svm_node ** x; struct svm_node *testnode;  void makemodel2(void) {     param.svm_type = c_svc;     param.kernel_type = rbf;     param.degree = 3;     param.gamma = 0.5;     param.coef0 = 0;     param.nu = 0.5;     param.cache_size = 100;     param.c = 1;     param.eps = 1e-3;     param.p = 0.1;     param.shrinking = 1;     param.probability = 0;     param.nr_weight = 0;     param.weight_label = null;     param.weight = null;       //problem definition-------------------------------------------------------------     prob.l = 4;      //x values matrix of xor values (training data)     double matrix[prob.l][2];     matrix[0][0] = 1;     matrix[0][1] = 1;      matrix[1][0] = 1;     matrix[1][1] = 0;      matrix[2][0] = 0;     matrix[2][1] = 1;      matrix[3][0] = 0;     matrix[3][1] = 0;      // part not understand     struct svm_node** x = (struct svm_node * *)malloc((prob.l)*sizeof(struct svm_node *));      //trying assign matrix svm_node training examples     (int row = 0;row <prob.l; row++){         struct svm_node* x_space = malloc(struct svm_node,3);         (int col = 0;col < 2;col++){             x_space[col].index = col;             x_space[col].value = matrix[row][col];         }         x_space[2].index = -1;      //each row of properties should terminated -1 according readme         x[row] = x_space;     }      prob.x = x;      //yvalues     prob.y = (double *)malloc((prob.l)*sizeof(double));     prob.y[0] = -1;     prob.y[1] = 1;     prob.y[2] = 1;     prob.y[3] = -1;      //train model---------------------------------------------------------------------     struct svm_model *model = svm_train(&prob,&param);       //test model----------------------------------------------------------------------     struct svm_node *testnode = (struct svm_node *) malloc((3)*sizeof(struct svm_node));     testnode[0].index = 0;     testnode[0].value = 1;     testnode[1].index = 1;     testnode[1].value = 0;     testnode[2].index = -1;      double retval = svm_predict(model,testnode);      svm_destroy_param(&param);     free(prob.y);     free(prob.x);     free(x_space);  } 


Comments

Popular posts from this blog

python - Operations inside variables -

Generic Map Parameter java -

arrays - What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it? -