From daeda840810c4c8273e80b7c9709b6f5b61c1c25 Mon Sep 17 00:00:00 2001 From: Hung-Yi Chou Date: Mon, 27 Jul 2020 01:57:38 +0000 Subject: [PATCH] modifications are made for one-class svm: -In liblinear.cpp, fix bug that rho is wrongly calculated -In matlab/linear_model_matlab.c, fix bug that matlab did not read rho from matlab model struct -In matlab/train.c, a default nu was not set, now 0.5 --- linear.cpp | 4 ++-- matlab/linear_model_matlab.c | 7 +++++++ matlab/train.c | 3 ++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/linear.cpp b/linear.cpp index 9ef2b9e..3edcede 100644 --- a/linear.cpp +++ b/linear.cpp @@ -2455,9 +2455,9 @@ static void solve_oneclass_svm(const problem *prob, double *w, double *rho, doub for(i=0; ix[i]); - if (alpha[i] == 0) + if (alpha[i] == 1) lb = max(lb, G); - else if (alpha[i] == 1) + else if (alpha[i] == 0) ub = min(ub, G); else { diff --git a/matlab/linear_model_matlab.c b/matlab/linear_model_matlab.c index a048b6d..a7350b7 100644 --- a/matlab/linear_model_matlab.c +++ b/matlab/linear_model_matlab.c @@ -171,11 +171,18 @@ const char *matlab_matrix_to_model(struct model *model_, const mxArray *matlab_s } id++; + // w ptr = mxGetPr(rhs[id]); model_->w=Malloc(double, w_size*nr_w); for(i = 0; i < w_size*nr_w; i++) model_->w[i]=ptr[i]; id++; + + // rho + ptr = mxGetPr(rhs[id]); + model_->rho = ptr[0]; + id++; + mxFree(rhs); return NULL; diff --git a/matlab/train.c b/matlab/train.c index 498772a..3707656 100644 --- a/matlab/train.c +++ b/matlab/train.c @@ -162,8 +162,9 @@ int parse_command_line(int nrhs, const mxArray *prhs[], char *model_file_name) // default values param.solver_type = L2R_L2LOSS_SVC_DUAL; param.C = 1; - param.eps = INF; // see setting below param.p = 0.1; + param.nu = 0.5; + param.eps = INF; // see setting below param.nr_weight = 0; param.weight_label = NULL; param.weight = NULL; -- 2.40.0