aboutsummaryrefslogtreecommitdiff
path: root/src/msvmmaj_sv.c
diff options
context:
space:
mode:
authorGertjan van den Burg <gertjanvandenburg@gmail.com>2014-05-16 12:22:15 -0700
committerGertjan van den Burg <gertjanvandenburg@gmail.com>2014-05-16 12:22:15 -0700
commit7e450da966dd6af241e47294801ef0d4e25b26e0 (patch)
treecb887bbb026f5593a745425b9278603b29732813 /src/msvmmaj_sv.c
parentfree model in crossval (diff)
parentadd functionality for counting SVs (diff)
downloadgensvm-7e450da966dd6af241e47294801ef0d4e25b26e0.tar.gz
gensvm-7e450da966dd6af241e47294801ef0d4e25b26e0.zip
Merge branch 'master' of /home/gertjan/Dropbox/repositories/msvmmaj
Diffstat (limited to 'src/msvmmaj_sv.c')
-rw-r--r--src/msvmmaj_sv.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/msvmmaj_sv.c b/src/msvmmaj_sv.c
new file mode 100644
index 0000000..1358d4e
--- /dev/null
+++ b/src/msvmmaj_sv.c
@@ -0,0 +1,45 @@
+/**
+ * @file msvmmaj_sv.c
+ * @author Gertjan van den Burg
+ * @date May, 2014
+ * @brief Calculate the number of support vectors
+ *
+ * @details
+ * The function in this file can be used to calculate the number of support
+ * vectors are left in a model.
+ *
+ */
+
+#include "msvmmaj.h"
+#include "msvmmaj_matrix.h"
+
+/**
+ * @brief Calculate the number of support vectors in a model
+ *
+ * @details
+ * If an object is correctly classified, the number of classes for which the
+ * error q is larger than 1, is K-1 (i.e., there is no error w.r.t. any of the
+ * other classes). All objects for which this is not the case are thus support
+ * vectors.
+ *
+ * @param[in] model MajModel with solution
+ * @param[in] data MajData to be used
+ * @return number of support vectors with this solution
+ *
+ */
+long msvmmaj_num_sv(struct MajModel *model, struct MajData *data)
+{
+ long i, j, num_correct, num_sv = 0;
+ double value;
+
+ for (i=0; i<data->n; i++) {
+ num_correct = 0;
+ for (j=0; j<data->K; j++) {
+ value = matrix_get(model->Q, data->K, i, j);
+ num_correct += (value > 1);
+ }
+ num_sv += (num_correct < data->K - 1);
+ }
+
+ return num_sv;
+}