From 6d064658f8ae7ca0f42fef6dcc7f896144e9637b Mon Sep 17 00:00:00 2001 From: Gertjan van den Burg Date: Fri, 18 Oct 2013 15:48:59 +0200 Subject: restart using git --- src/msvmmaj_pred.c | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 src/msvmmaj_pred.c (limited to 'src/msvmmaj_pred.c') diff --git a/src/msvmmaj_pred.c b/src/msvmmaj_pred.c new file mode 100644 index 0000000..5f1b1ae --- /dev/null +++ b/src/msvmmaj_pred.c @@ -0,0 +1,111 @@ +/** + * @file msvmmaj_pred.c + * @author Gertjan van den Burg (burg@ese.eur.nl) + * @date August 9, 2013 + * @brief Main functions for predicting class labels.. + * + */ + +#include + +#include "libMSVMMaj.h" +#include "MSVMMaj.h" +#include "matrix.h" +#include "msvmmaj_pred.h" + +/** + * @name predict_labels + * @brief Predict class labels of data given and output in predy + * + * The labels are predicted by mapping each instance in data to the + * simplex space using the matrix V in the given model. Next, for each + * instance the nearest simplex vertex is determined using an Euclidean + * norm. The nearest simplex vertex determines the predicted class label, + * which is recorded in predy + * + * @param [in] data data to predict labels for + * @param [in] model model with optimized V + * @param [out] predy pre-allocated vector to record predictions in + */ +void msvmmaj_predict_labels(struct MajData *data, struct MajModel *model, long *predy) +{ + long i, j, k, label; + double norm, min_dist; + + long n = data->n; // note that model->n is the size of the training sample. + long m = data->m; + long K = model->K; //data->K does not necessarily equal the original K. + + double *S = Calloc(double, K-1); + double *ZV = Calloc(double, n*(K-1)); + double *U = Calloc(double, K*(K-1)); + + // Get the simplex matrix + msvmmaj_simplex_gen(K, U); + + // Generate the simplex-space vectors + cblas_dgemm( + CblasRowMajor, + CblasNoTrans, + CblasNoTrans, + n, + K-1, + m+1, + 1.0, + data->Z, + m+1, + model->V, + K-1, + 0.0, + ZV, + K-1); + + // Calculate the distance to each of the vertices of the simplex. + // The closest vertex defines the class label. + for (i=0; in; i++) + if (data->y[i] == predy[i]) + correct++; + + performance = ((double) correct)/((double) data->n)* 100.0; + + return performance; +} -- cgit v1.2.3