int SVM::train() { if (problem.y == NULL || problem.x == NULL) return -1; const char* error_msg = svm_check_parameter(&problem, ¶m); if (error_msg) { std::cout << "ERROR: " << error_msg << std::endl; exit(-1); } model = svm_train(&problem, ¶m); /*for (int i = 0; i < 100000; i++) if (sin(i) + cos(i) > 1.414) std::cout << "."; */ main_equation = new Equation(); svm_model_visualization(model, main_equation); svm_free_and_destroy_model(&model); return 0; }
int main(int argc, char** argv) { if (argc < 1) { std::cout << "Arguments less than 2.\n"; exit(-1); } if (argc >= 3) { minv = atoi(argv[1]); maxv = atoi(argv[2]); } struct svm_parameter param; param.svm_type = C_SVC; param.kernel_type = LINEAR; param.degree = 3; param.gamma = 0; // 1/num_features param.coef0 = 0; param.nu = 0.5; param.cache_size = 100; // param.C = 1; param.C = DBL_MAX; 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; svm_set_print_string_function(print_null); int rnd = 1; srand(time(NULL)); #ifdef _TEST0_ std::cout << "[1]******************************************************" << std::endl; std::cout << "\t(1) running programs... [" << inputs_init <<"]" << std::endl; #endif for (int i = 0; i < inputs_init; i++) { for (int j = 0; j < vars; j++) { inputs[j] = rand() % (maxv - minv + 1) + minv; } before_loop(); m(inputs); after_loop(); } start_processing: if (positive_set_changed) { qsort(positive_set, positive_idx, sizeof(node), node::compare); positive_set_changed = false; } if (negative_set_changed) { qsort(negative_set, negative_idx, sizeof(node), node::compare); negative_set_changed = false; } // nice_set_print(); #ifdef _TEST0_ std::cout << "\t(2) converting data into svm format..." << std::endl; #endif svm_linker sl; sl.add_node_set(positive_set, positive_idx, 1); sl.add_node_set(negative_set, negative_idx, -1); #ifdef _TEST0_ std::cout << "\t(3) svm training...[" << sl.l << "]" << std::endl; #endif struct svm_model* model = svm_train((const struct svm_problem *)&sl, ¶m); // svm_save_model("model_file", model); struct coef co; svm_model_visualization(model, &co); printf(" %.16g [0]", co.theta[0]); for (int j = 1; j < vars; j++) printf (" + %.16g [%d]", co.theta[j], j); printf (" >= %.16g\n", -co.theta0); print_svm_samples((const struct svm_problem*)&sl); svm_free_and_destroy_model(&model); rnd++; if (rnd <= max_iter) { #ifdef _TEST0_ std::cout << "[" << rnd << "]*********************************************************" << std::endl; std::cout << "\t(1) running programs...[" << inputs_aft << "]" << std::endl; #endif for (int i = 0; i < inputs_aft; i++) { linear_solver(co, inputs); before_loop(); m(inputs); after_loop(); } goto start_processing; } return 0; }