void DataSet_load_from_python(DataSet *dataset, float *y, char **x, int len) {dataset->load_from_python(y, x, len);}
| 17 | DataSet* DataSet_new() {return new DataSet();} |
| 18 | //void DataSet_load_from_python(DataSet *dataset, float *y, char **x, int len) {dataset->load_from_python(y, x, len);} |
| 19 | void thundersvm_train_sub(DataSet& train_dataset, CMDParser& parser, char* model_file_path){ |
| 20 | SvmModel *model = nullptr; |
| 21 | switch (parser.param_cmd.svm_type) { |
| 22 | case SvmParam::C_SVC: |
| 23 | model = new SVC(); |
| 24 | break; |
| 25 | case SvmParam::NU_SVC: |
| 26 | model = new NuSVC(); |
| 27 | break; |
| 28 | case SvmParam::ONE_CLASS: |
| 29 | model = new OneClassSVC(); |
| 30 | break; |
| 31 | case SvmParam::EPSILON_SVR: |
| 32 | model = new SVR(); |
| 33 | break; |
| 34 | case SvmParam::NU_SVR: |
| 35 | model = new NuSVR(); |
| 36 | break; |
| 37 | } |
| 38 | |
| 39 | //todo add this to check_parameter method |
| 40 | if (parser.param_cmd.svm_type == SvmParam::NU_SVC) { |
| 41 | train_dataset.group_classes(); |
| 42 | for (int i = 0; i < train_dataset.n_classes(); ++i) { |
| 43 | int n1 = train_dataset.count()[i]; |
| 44 | for (int j = i + 1; j < train_dataset.n_classes(); ++j) { |
| 45 | int n2 = train_dataset.count()[j]; |
| 46 | if (parser.param_cmd.nu * (n1 + n2) / 2 > min(n1, n2)) { |
| 47 | printf("specified nu is infeasible\n"); |
| 48 | return; |
| 49 | } |
| 50 | } |
| 51 | } |
| 52 | } |
| 53 | if (parser.param_cmd.kernel_type != SvmParam::LINEAR) |
| 54 | if (!parser.gamma_set) { |
| 55 | parser.param_cmd.gamma = 1.f / train_dataset.n_features(); |
| 56 | } |
| 57 | #ifdef USE_CUDA |
| 58 | CUDA_CHECK(cudaSetDevice(parser.gpu_id)); |
| 59 | #endif |
| 60 | |
| 61 | vector<float_type> predict_y, test_y; |
| 62 | if (parser.do_cross_validation) { |
| 63 | predict_y = model->cross_validation(train_dataset, parser.param_cmd, parser.nr_fold); |
| 64 | } else { |
| 65 | model->train(train_dataset, parser.param_cmd); |
| 66 | model->save_to_file(model_file_path); |
| 67 | LOG(INFO) << "evaluating training score"; |
| 68 | predict_y = model->predict(train_dataset.instances(), -1); |
| 69 | //predict_y = model->predict(train_dataset.instances(), 10000); |
| 70 | //test_y = train_dataset.y(); |
| 71 | } |
| 72 | Metric *metric = nullptr; |
| 73 | switch (parser.param_cmd.svm_type) { |
| 74 | case SvmParam::C_SVC: |
| 75 | case SvmParam::NU_SVC: { |
| 76 | metric = new Accuracy(); |
no test coverage detected