aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGertjan van den Burg <burg@ese.eur.nl>2016-09-30 16:20:40 +0200
committerGertjan van den Burg <burg@ese.eur.nl>2016-09-30 16:20:40 +0200
commit05f523e3a03ab012d772c2657f722704ab5126c3 (patch)
tree9409546dd3f39ade54ca2d264e997971996380c3
parentuse atlas for optimized blas/lapack (diff)
downloadgensvm-05f523e3a03ab012d772c2657f722704ab5126c3.tar.gz
gensvm-05f523e3a03ab012d772c2657f722704ab5126c3.zip
minor changes and start on test of gensvm_optimize
-rw-r--r--src/gensvm_optimize.c3
-rw-r--r--tests/aux/dposvtest.m6
-rw-r--r--tests/aux/dsysvtest.m1
-rw-r--r--tests/src/test_gensvm_optimize.c118
4 files changed, 120 insertions, 8 deletions
diff --git a/src/gensvm_optimize.c b/src/gensvm_optimize.c
index 3c3e97a..aa9dcbf 100644
--- a/src/gensvm_optimize.c
+++ b/src/gensvm_optimize.c
@@ -721,6 +721,9 @@ void gensvm_calculate_huber(struct GenModel *model)
* allocated. In addition, the matrix ZV is calculated here. It is assigned
* to a pre-allocated block of memory, which is passed to this function.
*
+ * @todo
+ * Transform UU to small UU then fix that here
+ *
* @param[in,out] model the corresponding GenModel
* @param[in] data the corresponding GenData
* @param[in,out] ZV a pointer to a memory block for ZV. On exit
diff --git a/tests/aux/dposvtest.m b/tests/aux/dposvtest.m
index 7937d6a..8292c77 100644
--- a/tests/aux/dposvtest.m
+++ b/tests/aux/dposvtest.m
@@ -9,12 +9,6 @@ m = 5;
tmp = rand(n);
A = tmp + tmp' + n*eye(n);
-% Since we're testing the lower part of A, delete the upper triangel
-
-%idx = triu(ones(n)) - eye(n);
-%idx = logical(idx);
-%A(idx) = NaN;
-
for i=1:size(A, 1)
for j=1:size(A, 2)
if j >= i % only print the upper part
diff --git a/tests/aux/dsysvtest.m b/tests/aux/dsysvtest.m
index fb22f5c..2554eea 100644
--- a/tests/aux/dsysvtest.m
+++ b/tests/aux/dsysvtest.m
@@ -35,3 +35,4 @@ for i=1:numel(x)
end
fprintf('\n\n');
+
diff --git a/tests/src/test_gensvm_optimize.c b/tests/src/test_gensvm_optimize.c
index 86b620d..a91ece7 100644
--- a/tests/src/test_gensvm_optimize.c
+++ b/tests/src/test_gensvm_optimize.c
@@ -9,9 +9,121 @@
#include "gensvm_optimize.h"
#include "gensvm_init.h"
+#include "gensvm_debug.h"
+
+extern FILE *GENSVM_OUTPUT_FILE;
+extern FILE *GENSVM_ERROR_FILE;
+
char *test_gensvm_optimize()
{
- mu_test_missing();
+ struct GenModel *model = gensvm_init_model();
+ struct GenModel *seed_model = gensvm_init_model();
+ struct GenData *data = gensvm_init_data();
+
+ int n = 8,
+ m = 3,
+ K = 4;
+ data->n = n;
+ data->m = m;
+ data->r = m;
+ data->K = K;
+
+ model->n = n;
+ model->m = m;
+ model->K = K;
+
+ seed_model->n = n;
+ seed_model->m = m;
+ seed_model->K = K;
+
+ data->Z = Malloc(double, n*(m+1));
+ data->y = Malloc(long, n);
+
+ matrix_set(data->Z, data->m+1, 0, 0, 1.0);
+ matrix_set(data->Z, data->m+1, 0, 1, 0.8740239771176158);
+ matrix_set(data->Z, data->m+1, 0, 2, 0.3231542341162253);
+ matrix_set(data->Z, data->m+1, 0, 3, 0.2533980609669184);
+ matrix_set(data->Z, data->m+1, 1, 0, 1.0);
+ matrix_set(data->Z, data->m+1, 1, 1, 0.3433368959379667);
+ matrix_set(data->Z, data->m+1, 1, 2, 0.2945713387329698);
+ matrix_set(data->Z, data->m+1, 1, 3, 0.3042498181639990);
+ matrix_set(data->Z, data->m+1, 2, 0, 1.0);
+ matrix_set(data->Z, data->m+1, 2, 1, 0.6513609117457242);
+ matrix_set(data->Z, data->m+1, 2, 2, 0.7738077314847138);
+ matrix_set(data->Z, data->m+1, 2, 3, 0.4426344045213226);
+ matrix_set(data->Z, data->m+1, 3, 0, 1.0);
+ matrix_set(data->Z, data->m+1, 3, 1, 0.7223733317092962);
+ matrix_set(data->Z, data->m+1, 3, 2, 0.9718611208972370);
+ matrix_set(data->Z, data->m+1, 3, 3, 0.0796059591969125);
+ matrix_set(data->Z, data->m+1, 4, 0, 1.0);
+ matrix_set(data->Z, data->m+1, 4, 1, 0.3014806706103061);
+ matrix_set(data->Z, data->m+1, 4, 2, 0.1728058294642182);
+ matrix_set(data->Z, data->m+1, 4, 3, 0.0851401652628196);
+ matrix_set(data->Z, data->m+1, 5, 0, 1.0);
+ matrix_set(data->Z, data->m+1, 5, 1, 0.5114600128301799);
+ matrix_set(data->Z, data->m+1, 5, 2, 0.3319865781913825);
+ matrix_set(data->Z, data->m+1, 5, 3, 0.3330906711041684);
+ matrix_set(data->Z, data->m+1, 6, 0, 1.0);
+ matrix_set(data->Z, data->m+1, 6, 1, 0.5824718351045201);
+ matrix_set(data->Z, data->m+1, 6, 2, 0.7224023004247955);
+ matrix_set(data->Z, data->m+1, 6, 3, 0.0937250920308128);
+ matrix_set(data->Z, data->m+1, 7, 0, 1.0);
+ matrix_set(data->Z, data->m+1, 7, 1, 0.8228264179835741);
+ matrix_set(data->Z, data->m+1, 7, 2, 0.4580785175957617);
+ matrix_set(data->Z, data->m+1, 7, 3, 0.7585636149680212);
+
+ data->y[0] = 2;
+ data->y[1] = 1;
+ data->y[2] = 3;
+ data->y[3] = 2;
+ data->y[4] = 3;
+ data->y[5] = 2;
+ data->y[6] = 4;
+ data->y[7] = 1;
+
+ model->p = 1.2143;
+ model->kappa = 0.90298;
+ model->lambda = 0.00219038;
+ model->epsilon = 1e-15;
+
+ gensvm_allocate_model(model);
+ gensvm_allocate_model(seed_model);
+ matrix_set(seed_model->V, K-1, 0, 0, 0.3294151808829250);
+ matrix_set(seed_model->V, K-1, 0, 1, 0.8400578887926284);
+ matrix_set(seed_model->V, K-1, 0, 2, 0.9336268164013294);
+ matrix_set(seed_model->V, K-1, 1, 0, 0.6047157463292797);
+ matrix_set(seed_model->V, K-1, 1, 1, 0.1390735925868357);
+ matrix_set(seed_model->V, K-1, 1, 2, 0.6579825380479839);
+ matrix_set(seed_model->V, K-1, 2, 0, 0.7628723943431572);
+ matrix_set(seed_model->V, K-1, 2, 1, 0.3505528063594583);
+ matrix_set(seed_model->V, K-1, 2, 2, 0.1221488022463632);
+ matrix_set(seed_model->V, K-1, 3, 0, 0.4561071643209315);
+ matrix_set(seed_model->V, K-1, 3, 1, 0.0840834388268874);
+ matrix_set(seed_model->V, K-1, 3, 2, 0.5312457860071739);
+
+ gensvm_init_V(seed_model, model, data);
+ gensvm_initialize_weights(data, model);
+
+ model->rho[0] = 0.3294151808829250;
+ model->rho[1] = 0.6047157463292797;
+ model->rho[2] = 0.7628723943431572;
+ model->rho[3] = 0.4561071643209315;
+ model->rho[4] = 0.8400578887926284;
+ model->rho[5] = 0.1390735925868357;
+ model->rho[6] = 0.3505528063594583;
+ model->rho[7] = 0.0840834388268874;
+
+ // start test code //
+ GENSVM_OUTPUT_FILE = stdout;
+ gensvm_optimize(model, data);
+
+ gensvm_print_matrix(model->V, model->m+1, model->K-1);
+
+ // end test code //
+
+ gensvm_free_data(data);
+ gensvm_free_model(model);
+
return NULL;
}
@@ -209,6 +321,9 @@ char *test_gensvm_get_loss_2()
gensvm_free_model(model);
gensvm_free_data(data);
+ return NULL;
+}
+
char *test_gensvm_calculate_omega()
{
struct GenModel *model = gensvm_init_model();
@@ -460,7 +575,6 @@ char *test_gensvm_calculate_ab_simple()
return NULL;
}
-char *test_gensvm_get_update()
char *test_gensvm_update_B()
{
struct GenData *data = gensvm_init_data();