| 17 | #endif |
| 18 | |
| 19 | int main(int argc, char **argv) { |
| 20 | try { |
| 21 | el::Loggers::addFlag(el::LoggingFlag::FixedTimeFormat); |
| 22 | CMDParser parser; |
| 23 | parser.parse_command_line(argc, argv); |
| 24 | DataSet train_dataset; |
| 25 | train_dataset.load_from_file(parser.svmtrain_input_file_name); |
| 26 | std::shared_ptr<SvmModel> model; |
| 27 | switch (parser.param_cmd.svm_type) { |
| 28 | case SvmParam::C_SVC: |
| 29 | model.reset(new SVC()); |
| 30 | LOG(INFO) << "training C-SVC"; |
| 31 | LOG(INFO) << "C = " << parser.param_cmd.C; |
| 32 | break; |
| 33 | case SvmParam::NU_SVC: |
| 34 | model.reset(new NuSVC()); |
| 35 | LOG(INFO) << "training nu-SVC"; |
| 36 | LOG(INFO) << "nu = " << parser.param_cmd.nu; |
| 37 | break; |
| 38 | case SvmParam::ONE_CLASS: |
| 39 | model.reset(new OneClassSVC()); |
| 40 | LOG(INFO) << "training one-class SVM"; |
| 41 | LOG(INFO) << "C = " << parser.param_cmd.C; |
| 42 | break; |
| 43 | case SvmParam::EPSILON_SVR: |
| 44 | model.reset(new SVR()); |
| 45 | LOG(INFO) << "training epsilon-SVR"; |
| 46 | LOG(INFO) << "C = " << parser.param_cmd.C << " p = " << parser.param_cmd.p; |
| 47 | break; |
| 48 | case SvmParam::NU_SVR: |
| 49 | model.reset(new NuSVR()); |
| 50 | LOG(INFO) << "training nu-SVR"; |
| 51 | LOG(INFO) << "nu = " << parser.param_cmd.nu; |
| 52 | break; |
| 53 | } |
| 54 | |
| 55 | //todo add this to check_parameter method |
| 56 | if (parser.param_cmd.svm_type == SvmParam::NU_SVC) { |
| 57 | train_dataset.group_classes(); |
| 58 | for (int i = 0; i < train_dataset.n_classes(); ++i) { |
| 59 | int n1 = train_dataset.count()[i]; |
| 60 | for (int j = i + 1; j < train_dataset.n_classes(); ++j) { |
| 61 | int n2 = train_dataset.count()[j]; |
| 62 | if (parser.param_cmd.nu * (n1 + n2) / 2 > min(n1, n2)) { |
| 63 | printf("specified nu is infeasible\n"); |
| 64 | return 1; |
| 65 | } |
| 66 | } |
| 67 | } |
| 68 | } |
| 69 | if (parser.param_cmd.kernel_type != SvmParam::LINEAR) |
| 70 | if (!parser.gamma_set) { |
| 71 | parser.param_cmd.gamma = 1.f / train_dataset.n_features(); |
| 72 | LOG(WARNING) << "using default gamma=" << parser.param_cmd.gamma; |
| 73 | } else { |
| 74 | LOG(INFO) << "gamma = " << parser.param_cmd.gamma; |
| 75 | } |
| 76 |
nothing calls this directly
no test coverage detected