GenSVM
gensvm_predict.c
Go to the documentation of this file.
1 
32 #include "gensvm_predict.h"
33 
48 void gensvm_predict_labels(struct GenData *testdata, struct GenModel *model,
49  long *predy)
50 {
51  long i, j, k, n, K, label;
52  double norm, min_dist,
53  *S = NULL,
54  *ZV = NULL;
55 
56  n = testdata->n;
57  K = model->K;
58 
59  // allocate necessary memory
60  S = Calloc(double, K-1);
61  ZV = Calloc(double, n*(K-1));
62 
63  // Generate the simplex matrix
64  gensvm_simplex(model);
65 
66  // Generate the simplex space vectors
67  gensvm_calculate_ZV(model, testdata, ZV);
68 
69  // Calculate the distance to each of the vertices of the simplex.
70  // The closest vertex defines the class label
71  for (i=0; i<n; i++) {
72  label = 0;
73  min_dist = INFINITY;
74  for (j=0; j<K; j++) {
75  for (k=0; k<K-1; k++) {
76  S[k] = matrix_get(ZV, K-1, i, k) -
77  matrix_get(model->U, K-1, j, k);
78  }
79  norm = cblas_dnrm2(K-1, S, 1);
80  if (norm < min_dist) {
81  label = j+1;
82  min_dist = norm;
83  }
84  }
85  predy[i] = label;
86  }
87 
88  free(ZV);
89  free(S);
90 }
91 
105 double gensvm_prediction_perf(struct GenData *data, long *predy)
106 {
107  long i, correct = 0;
108  double performance;
109 
110  for (i=0; i<data->n; i++)
111  if (data->y[i] == predy[i])
112  correct++;
113 
114  performance = ((double) correct)/((double) data->n)* 100.0;
115 
116  return performance;
117 }
#define Calloc(type, size)
Definition: gensvm_memory.h:40
long K
number of classes for the workspace
Definition: gensvm_base.h:156
void gensvm_predict_labels(struct GenData *testdata, struct GenModel *model, long *predy)
Predict class labels of data given and output in predy.
Header file for gensvm_predict.c.
void gensvm_simplex(struct GenModel *model)
Generate matrix of simplex vertex coordinates.
#define matrix_get(M, cols, i, j)
double * ZV
n x (K-1) working matrix for the Z * V calculation
Definition: gensvm_base.h:169
long * y
array of class labels, 1..K
Definition: gensvm_base.h:66
A structure to represent the data.
Definition: gensvm_base.h:57
A structure to represent a single GenSVM model.
Definition: gensvm_base.h:92
void gensvm_calculate_ZV(struct GenModel *model, struct GenData *data, double *ZV)
Wrapper around sparse/dense versions of this function.
Definition: gensvm_zv.c:50
double gensvm_prediction_perf(struct GenData *data, long *predy)
Calculate the predictive performance (percentage correct)
double * U
simplex matrix
Definition: gensvm_base.h:120
long K
number of classes in the dataset
Definition: gensvm_base.h:95
long n
number of instances
Definition: gensvm_base.h:60
long n
number of instances for the workspace
Definition: gensvm_base.h:152