void Init_libsvm_ext() { mLibsvm = rb_define_module("Libsvm"); /* Libsvm::Problem */ cProblem = rb_define_class_under(mLibsvm, "Problem", rb_cObject); rb_define_alloc_func(cProblem, problem_alloc); rx_reg_accessor(cProblem, l); rb_define_method(cProblem, "set_examples", cProblem_examples_set, 2); rb_define_method(cProblem, "examples", cProblem_examples, 0); /* Libsvm::SvmParameter */ cSvmParameter = rb_define_class_under(mLibsvm, "SvmParameter", rb_cObject); rb_define_alloc_func(cSvmParameter, parameter_alloc); rx_reg_accessor(cSvmParameter,svm_type); rx_reg_accessor(cSvmParameter,kernel_type); rx_reg_accessor(cSvmParameter,degree); rx_reg_accessor(cSvmParameter,gamma); rx_reg_accessor(cSvmParameter,coef0); rx_reg_accessor(cSvmParameter,cache_size); rx_reg_accessor(cSvmParameter,eps); rx_reg_accessor_as(cSvmParameter,C,c); rb_define_method(cSvmParameter,"label_weights=",cSvmParameter_label_weights_set,1); rb_define_method(cSvmParameter,"label_weights",cSvmParameter_label_weights,0); rx_reg_accessor(cSvmParameter,nu); rx_reg_accessor(cSvmParameter,p); rx_reg_accessor(cSvmParameter,shrinking); rx_reg_accessor(cSvmParameter,probability); /* Libsvm::Node */ cNode = rb_define_class_under(mLibsvm, "Node", rb_cObject); rb_define_alloc_func(cNode, node_alloc); rx_reg_accessor(cNode,index); rx_reg_accessor(cNode,value); /* Libsvm::Model */ cModel = rb_define_class_under(mLibsvm, "Model", rb_cObject); // model_alloc not necessary, since we don't ever create, only wrap it. rb_define_singleton_method(cModel, "train", cModel_class_train, 2); rb_define_singleton_method(cModel, "cross_validation", cModel_class_cross_validation, 3); rb_define_singleton_method(cModel, "load", cModel_class_load, 1); rb_define_method(cModel, "save", cModel_save, 1); rb_define_method(cModel, "svm_type", cModel_svm_type, 0); rb_define_method(cModel, "classes", cModel_classes, 0); rb_define_method(cModel, "predict", cModel_predict, 1); /* Not covered, for various reasons: TODO - void svm_get_labels(const struct svm_model *model, int *label); SVR? - double svm_get_svr_probability(const struct svm_model *model); SVR? - double svm_predict_probability(const struct svm_model *model, const struct svm_node *x, double* prob_estimates); Model holds reference to this, so when to use it? void svm_destroy_param(struct svm_parameter *param); SVR? - int svm_check_probability_model(const struct svm_model *model); */ mKernelType = rb_define_module_under(mLibsvm, "KernelType"); rb_define_const(mKernelType, "LINEAR", INT2NUM(LINEAR)); rb_define_const(mKernelType, "POLY", INT2NUM(POLY)); rb_define_const(mKernelType, "RBF", INT2NUM(RBF)); rb_define_const(mKernelType, "SIGMOID", INT2NUM(SIGMOID)); rb_define_const(mKernelType, "PRECOMPUTED", INT2NUM(PRECOMPUTED)); mSvmType = rb_define_module_under(mLibsvm,"SvmType"); rb_define_const(mSvmType, "C_SVC", INT2NUM(C_SVC)); rb_define_const(mSvmType, "NU_SVC", INT2NUM(NU_SVC)); rb_define_const(mSvmType, "ONE_CLASS", INT2NUM(ONE_CLASS)); rb_define_const(mSvmType, "EPSILON_SVR", INT2NUM(EPSILON_SVR)); rb_define_const(mSvmType, "NU_SVR", INT2NUM(NU_SVR)); }
void Init_libsvm_ext() { mLibsvm = rb_define_module("Libsvm"); /* Libsvm::Problem */ cProblem = rb_define_class_under(mLibsvm, "Problem", rb_cObject); rb_define_alloc_func(cProblem, problem_alloc); rx_reg_accessor(cProblem, l); rb_define_method(cProblem, "set_examples", cProblem_examples_set, 2); rb_define_method(cProblem, "examples", cProblem_examples, 0); /* Libsvm::SvmParameter */ cSvmParameter = rb_define_class_under(mLibsvm, "SvmParameter", rb_cObject); rb_define_alloc_func(cSvmParameter, parameter_alloc); rx_reg_accessor(cSvmParameter,svm_type); rx_reg_accessor(cSvmParameter,kernel_type); rx_reg_accessor(cSvmParameter,degree); rx_reg_accessor(cSvmParameter,gamma); rx_reg_accessor(cSvmParameter,coef0); rx_reg_accessor(cSvmParameter,cache_size); rx_reg_accessor(cSvmParameter,eps); rx_reg_accessor_as(cSvmParameter,C,c); rb_define_method(cSvmParameter,"label_weights=",cSvmParameter_label_weights_set,1); rb_define_method(cSvmParameter,"label_weights",cSvmParameter_label_weights,0); rx_reg_accessor(cSvmParameter,nu); rx_reg_accessor(cSvmParameter,p); rx_reg_accessor(cSvmParameter,shrinking); rx_reg_accessor(cSvmParameter,probability); /* Libsvm::Node */ cNode = rb_define_class_under(mLibsvm, "Node", rb_cObject); rb_define_alloc_func(cNode, node_alloc); rx_reg_accessor(cNode,index); rx_reg_accessor(cNode,value); /* Libsvm::Model */ cModel = rb_define_class_under(mLibsvm, "Model", rb_cObject); // model_alloc not necessary, since we don't ever create, only wrap it. rb_define_singleton_method(cModel, "train", cModel_class_train, 2); rb_define_singleton_method(cModel, "cross_validation", cModel_class_cross_validation, 3); rb_define_singleton_method(cModel, "load", cModel_class_load, 1); rb_define_method(cModel, "save", cModel_save, 1); rb_define_method(cModel, "svm_type", cModel_svm_type, 0); rb_define_method(cModel, "classes_count", cModel_classes_count, 0); rb_define_method(cModel, "support_vectors_count", cModel_support_vectors_count, 0); rb_define_method(cModel, "predict", cModel_predict, 1); rb_define_method(cModel, "predict_probability", cModel_predict_probability, 1); /** * Module with constants for values that are allowed for * {Libsvm::SvmParameter#kernel_type}. The value controls what kind * of kernel is used when training the model. */ mKernelType = rb_define_module_under(mLibsvm, "KernelType"); /** * A linear kernel; or not using a kernel. */ rb_define_const(mKernelType, "LINEAR", INT2NUM(LINEAR)); /** * A polynomial kernel. */ rb_define_const(mKernelType, "POLY", INT2NUM(POLY)); /** * A radial basis function kernel. */ rb_define_const(mKernelType, "RBF", INT2NUM(RBF)); /** * A sigmoid kernel. */ rb_define_const(mKernelType, "SIGMOID", INT2NUM(SIGMOID)); /** * A precomputed kernel. */ rb_define_const(mKernelType, "PRECOMPUTED", INT2NUM(PRECOMPUTED)); mSvmType = rb_define_module_under(mLibsvm,"SvmType"); rb_define_const(mSvmType, "C_SVC", INT2NUM(C_SVC)); rb_define_const(mSvmType, "NU_SVC", INT2NUM(NU_SVC)); rb_define_const(mSvmType, "ONE_CLASS", INT2NUM(ONE_CLASS)); rb_define_const(mSvmType, "EPSILON_SVR", INT2NUM(EPSILON_SVR)); rb_define_const(mSvmType, "NU_SVR", INT2NUM(NU_SVR)); }