aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md4
-rw-r--r--Makefile2
-rw-r--r--src/gensvm_kernel.c5
-rw-r--r--tests/aux/test_eigendecomp.m2
-rw-r--r--tests/aux/test_kernel_pre.m46
-rw-r--r--tests/aux/test_train_kernel.m30
-rw-r--r--tests/src/test_gensvm_io.c2
-rw-r--r--tests/src/test_gensvm_kernel.c183
-rw-r--r--tests/src/test_gensvm_train.c57
9 files changed, 182 insertions, 149 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 81713d4..5f3bcc4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
# Change Log
+## Version 0.2.0
+
+- Fix bug in nonlinear GenSVM, it should perform better now.
+
## Version 0.1.4
- Keep track of elapsed iterations during training
diff --git a/Makefile b/Makefile
index 07855ae..15ff02a 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-VERSION=0.1.4
+VERSION=0.2.0
CC=gcc
CFLAGS=-Wall -Wno-unused-result -Wsign-compare -Wstrict-prototypes \
-DVERSION=$(VERSION) -g -O3
diff --git a/src/gensvm_kernel.c b/src/gensvm_kernel.c
index 521bddb..190a120 100644
--- a/src/gensvm_kernel.c
+++ b/src/gensvm_kernel.c
@@ -264,9 +264,12 @@ long gensvm_kernel_eigendecomp(double *K, long n, double cutoff, double **P_ret,
num_eigen = n - cutoff_idx;
+ // In the mathematical derivation (see paper), we state that the
+ // diagonal matrix Sigma contains the square root of the eigenvalues
+ // (i.e. the eigendecomposition is: K = P * Sigma^2 * P').
Sigma = Calloc(double, num_eigen);
for (i=0; i<num_eigen; i++) {
- Sigma[i] = tempSigma[n-1 - i];
+ Sigma[i] = sqrt(tempSigma[n-1 - i]);
}
// revert P to row-major order and copy only the the columns
diff --git a/tests/aux/test_eigendecomp.m b/tests/aux/test_eigendecomp.m
index 921f44b..f3ff4ab 100644
--- a/tests/aux/test_eigendecomp.m
+++ b/tests/aux/test_eigendecomp.m
@@ -23,7 +23,7 @@ ratios = eigenvalues ./ eigenvalues(end, end);
cutoff = 1e-2;
realP = fliplr(P(:, ratios > cutoff));
-realSigma = flipud(eigenvalues(ratios > cutoff));
+realSigma = sqrt(flipud(eigenvalues(ratios > cutoff)));
r = sum(ratios > cutoff);
diff --git a/tests/aux/test_kernel_pre.m b/tests/aux/test_kernel_pre.m
index a1c8337..69f6f1e 100644
--- a/tests/aux/test_kernel_pre.m
+++ b/tests/aux/test_kernel_pre.m
@@ -1,32 +1,32 @@
function test_kernel_pre()
-
+
kerneltype = 'rbf';
rand('state', 123456);
n = 10;
m = 5;
cutoff = 5e-3;
-
+
X = rand(n, m);
Z = [ones(n, 1), X];
-
+
set_matrix(Z, "data->Z", "data->m+1");
-
+
K = zeros(n, n);
if strcmp(kerneltype, 'poly')
- # Polynomial kernel
- # (gamma * <x_1, x_2> + c)^d
+ % Polynomial kernel
+ % (gamma * <x_1, x_2> + c)^d
gamma = 1.5;
c = 3.0;
d = 1.78;
-
+
for ii=1:n
for jj=1:n
K(ii, jj) = (gamma * (X(ii, :) * X(jj, :)') + c)^d;
end
end
elseif strcmp(kerneltype, 'rbf')
- # RBF kernel
- # exp(-gamma * norm(x1 - x2)^2)
+ % RBF kernel
+ % exp(-gamma * norm(x1 - x2)^2)
gamma = 0.348
for ii=1:n
for jj=1:n
@@ -34,8 +34,8 @@ function test_kernel_pre()
end
end
elseif strcmp(kerneltype, 'sigmoid')
- # Sigmoid kernel
- # tanh(gamma * <x_1, x_2> + c)
+ % Sigmoid kernel
+ % tanh(gamma * <x_1, x_2> + c)
gamma = 1.23;
c = 1.6;
for ii=1:n
@@ -44,29 +44,27 @@ function test_kernel_pre()
end
end
end
-
- K(1, 2)
- [P, Sigma] = eig(K);
+ [P, values] = eig(K);
- eigenvalues = diag(Sigma);
+ eigenvalues = diag(values);
ratios = eigenvalues ./ eigenvalues(end, end);
-
+
realP = fliplr(P(:, ratios > cutoff));
- realSigma = flipud(eigenvalues(ratios > cutoff));
-
+ realSigma = sqrt(flipud(eigenvalues(ratios > cutoff)));
+
assert_matrix(realSigma, "data->Sigma", "1");
-
+
r = sum(ratios > cutoff);
fprintf("mu_assert(data->r == %i);\n", r);
-
+
M = realP * diag(realSigma);
-
+
newZ = [ones(n, 1) M];
assert_matrix_abs(newZ, "data->Z", "data->r+1");
-
+
assert_matrix(Z, "data->RAW", "data->m+1");
-
+
end
function set_matrix(A, name, cols)
@@ -98,4 +96,4 @@ function assert_matrix_abs(A, name, cols)
end
end
fprintf("\n");
-end \ No newline at end of file
+end
diff --git a/tests/aux/test_train_kernel.m b/tests/aux/test_train_kernel.m
index 7bf14b8..b561bd4 100644
--- a/tests/aux/test_train_kernel.m
+++ b/tests/aux/test_train_kernel.m
@@ -1,21 +1,21 @@
function [V] = test_train_kernel()
-
+
clear;
more off;
rand('state', 654321);
-
+
n = 10;
m = 5;
classes = 4;
cutoff = 5e-3;
-
+
X = rand(n, m);
Z = [ones(n, 1), X];
set_matrix(Z, "data->Z", "data->m+1");
-
+
y = [2 1 3 2 3 2 4 1 3 4];
set_matrix(y, "data->y", "1");
-
+
p = 1.2143;
kappa = 0.90298;
lambda = 0.00219038;
@@ -36,24 +36,24 @@ function [V] = test_train_kernel()
eigenvalues = diag(Sigma);
ratios = eigenvalues ./ eigenvalues(end, end);
-
+
realP = fliplr(P(:, ratios > cutoff));
- realSigma = flipud(eigenvalues(ratios > cutoff));
-
+ realSigma = sqrt(flipud(eigenvalues(ratios > cutoff)));
+
assert_matrix(realSigma, "data->Sigma", "1");
-
+
r = sum(ratios > cutoff);
fprintf("mu_assert(data->r == %i);\n", r);
-
+
M = realP * diag(realSigma);
size(M)
-
+
assert_matrix(Z, "data->RAW", "data->m+1");
-
- seedV = zeros(size(M, 2) + 1, classes - 1);
+
+ seedV = zeros(size(M, 2) + 1, classes - 1);
[W, t] = msvmmaj(M, y, rho, p, kappa, lambda, epsilon, 'show', 0, seedV);
V = [t'; W];
-
+
fprintf('\n');
assert_matrix_abs(V, "model->V", "model->K-1");
@@ -89,4 +89,4 @@ function assert_matrix_abs(A, name, cols)
end
end
fprintf("\n");
-end \ No newline at end of file
+end
diff --git a/tests/src/test_gensvm_io.c b/tests/src/test_gensvm_io.c
index bf9746f..b4210bb 100644
--- a/tests/src/test_gensvm_io.c
+++ b/tests/src/test_gensvm_io.c
@@ -654,7 +654,7 @@ char *test_gensvm_write_model()
char buffer[GENSVM_MAX_LINE_LENGTH];
fgets(buffer, GENSVM_MAX_LINE_LENGTH, fid);
- mu_assert(strcmp(buffer, "Output file for GenSVM (version 0.1.4)\n")
+ mu_assert(strcmp(buffer, "Output file for GenSVM (version 0.2.0)\n")
== 0, "Line doesn't contain expected content (0).\n");
// skip the time line
diff --git a/tests/src/test_gensvm_kernel.c b/tests/src/test_gensvm_kernel.c
index cf1d4db..b075bc5 100644
--- a/tests/src/test_gensvm_kernel.c
+++ b/tests/src/test_gensvm_kernel.c
@@ -326,245 +326,269 @@ char *test_kernel_preprocess_kernel()
mu_assert(data->r == 7, "Incorrect data->r");
double eps = 1e-14;
+
+ mu_assert(fabs(matrix_get(data->Sigma, 1, 0, 0) -
+ 2.7638223432435374) < eps,
+ "Incorrect data->Sigma at 0, 0");
+ mu_assert(fabs(matrix_get(data->Sigma, 1, 1, 0) -
+ 0.8989108618424078) < eps,
+ "Incorrect data->Sigma at 1, 0");
+ mu_assert(fabs(matrix_get(data->Sigma, 1, 2, 0) -
+ 0.8492992522024180) < eps,
+ "Incorrect data->Sigma at 2, 0");
+ mu_assert(fabs(matrix_get(data->Sigma, 1, 3, 0) -
+ 0.6551312398422764) < eps,
+ "Incorrect data->Sigma at 3, 0");
+ mu_assert(fabs(matrix_get(data->Sigma, 1, 4, 0) -
+ 0.4151267289513675) < eps,
+ "Incorrect data->Sigma at 4, 0");
+ mu_assert(fabs(matrix_get(data->Sigma, 1, 5, 0) -
+ 0.3219015071458272) < eps,
+ "Incorrect data->Sigma at 5, 0");
+ mu_assert(fabs(matrix_get(data->Sigma, 1, 6, 0) -
+ 0.2206142024294812) < eps,
+ "Incorrect data->Sigma at 6, 0");
+
+
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 0, 0)) -
fabs(1.0000000000000000)) < eps,
"Incorrect data->Z at 0, 0");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 0, 1)) -
- fabs(2.4632837902141640)) < eps,
+ fabs(0.8912598149573278)) < eps,
"Incorrect data->Z at 0, 1");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 0, 2)) -
- fabs(-0.3037489220604925)) < eps,
+ fabs(-0.3379077225053534)) < eps,
"Incorrect data->Z at 0, 2");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 0, 3)) -
- fabs(-0.0061287029147240)) < eps,
+ fabs(-0.0072161878146390)) < eps,
"Incorrect data->Z at 0, 3");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 0, 4)) -
- fabs(0.1822712619914593)) < eps,
+ fabs(0.2782209897902920)) < eps,
"Incorrect data->Z at 0, 4");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 0, 5)) -
- fabs(0.0252737053303148)) < eps,
+ fabs(0.0608819032061786)) < eps,
"Incorrect data->Z at 0, 5");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 0, 6)) -
- fabs(-0.0078753266252524)) < eps,
+ fabs(-0.0244650194249782)) < eps,
"Incorrect data->Z at 0, 6");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 0, 7)) -
- fabs(-0.0012800124996018)) < eps,
+ fabs(-0.0058020403287988)) < eps,
"Incorrect data->Z at 0, 7");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 1, 0)) -
fabs(1.0000000000000000)) < eps,
"Incorrect data->Z at 1, 0");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 1, 1)) -
- fabs(2.2923640983040641)) < eps,
+ fabs(0.8294180354638190)) < eps,
"Incorrect data->Z at 1, 1");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 1, 2)) -
- fabs(-0.3048037728463330)) < eps,
+ fabs(-0.3390811990207864)) < eps,
"Incorrect data->Z at 1, 2");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 1, 3)) -
- fabs(-0.2586192720897897)) < eps,
+ fabs(-0.3045090071834334)) < eps,
"Incorrect data->Z at 1, 3");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 1, 4)) -
- fabs(0.1747912247100736)) < eps,
+ fabs(0.2668033732480146)) < eps,
"Incorrect data->Z at 1, 4");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 1, 5)) -
- fabs(-0.0623497873850738)) < eps,
+ fabs(-0.1501945864641692)) < eps,
"Incorrect data->Z at 1, 5");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 1, 6)) -
- fabs(-0.0199493291395259)) < eps,
+ fabs(-0.0619733946461100)) < eps,
"Incorrect data->Z at 1, 6");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 1, 7)) -
- fabs(0.0068540206892510)) < eps,
+ fabs(0.0310679032164383)) < eps,
"Incorrect data->Z at 1, 7");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 2, 0)) -
fabs(1.0000000000000000)) < eps,
"Incorrect data->Z at 2, 0");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 2, 1)) -
- fabs(2.4167201742337761)) < eps,
+ fabs(0.8744122718819858)) < eps,
"Incorrect data->Z at 2, 1");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 2, 2)) -
- fabs(-0.1499385272847361)) < eps,
+ fabs(-0.1668002175181436)) < eps,
"Incorrect data->Z at 2, 2");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 2, 3)) -
- fabs(-0.1781619658696836)) < eps,
+ fabs(-0.2097752534311912)) < eps,
"Incorrect data->Z at 2, 3");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 2, 4)) -
- fabs(-0.2363293887681946)) < eps,
+ fabs(-0.3607359478462531)) < eps,
"Incorrect data->Z at 2, 4");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 2, 5)) -
- fabs(-0.0362117307160720)) < eps,
+ fabs(-0.0872305447725448)) < eps,
"Incorrect data->Z at 2, 5");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 2, 6)) -
- fabs(0.0366137533260933)) < eps,
+ fabs(0.1137420997209145)) < eps,
"Incorrect data->Z at 2, 6");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 2, 7)) -
- fabs(0.0227049982868101)) < eps,
+ fabs(0.1029172103916005)) < eps,
"Incorrect data->Z at 2, 7");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 3, 0)) -
fabs(1.0000000000000000)) < eps,
"Incorrect data->Z at 3, 0");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 3, 1)) -
- fabs(2.3339314848494390)) < eps,
+ fabs(0.8444578540132961)) < eps,
"Incorrect data->Z at 3, 1");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 3, 2)) -
- fabs(0.4067278927345656)) < eps,
+ fabs(0.4524674358711562)) < eps,
"Incorrect data->Z at 3, 2");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 3, 3)) -
- fabs(0.0198947146890620)) < eps,
+ fabs(0.0234248583611390)) < eps,
"Incorrect data->Z at 3, 3");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 3, 4)) -
- fabs(0.1187106614859180)) < eps,
+ fabs(0.1812013445038858)) < eps,
"Incorrect data->Z at 3, 4");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 3, 5)) -
- fabs(0.0734848412140159)) < eps,
+ fabs(0.1770178504276099)) < eps,
"Incorrect data->Z at 3, 5");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 3, 6)) -
- fabs(-0.0166955533210990)) < eps,
+ fabs(-0.0518654089852882)) < eps,
"Incorrect data->Z at 3, 6");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 3, 7)) -
- fabs(0.0229112619510384)) < eps,
+ fabs(0.1038521622757349)) < eps,
"Incorrect data->Z at 3, 7");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 4, 0)) -
fabs(1.0000000000000000)) < eps,
"Incorrect data->Z at 4, 0");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 4, 1)) -
- fabs(2.5061509421266424)) < eps,
+ fabs(0.9067699116960968)) < eps,
"Incorrect data->Z at 4, 1");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 4, 2)) -
- fabs(0.0574469229922174)) < eps,
+ fabs(0.0639072520210456)) < eps,
"Incorrect data->Z at 4, 2");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 4, 3)) -
- fabs(-0.2858649955147738)) < eps,
+ fabs(-0.3365892466918618)) < eps,
"Incorrect data->Z at 4, 3");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 4, 4)) -
- fabs(-0.0995031375002134)) < eps,
+ fabs(-0.1518827548571320)) < eps,
"Incorrect data->Z at 4, 4");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 4, 5)) -
- fabs(0.0223790101651578)) < eps,
+ fabs(0.0539088634973914)) < eps,
"Incorrect data->Z at 4, 5");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 4, 6)) -
- fabs(-0.0355571480867735)) < eps,
+ fabs(-0.1104597129788070)) < eps,
"Incorrect data->Z at 4, 6");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 4, 7)) -
- fabs(-0.0219026472149696)) < eps,
+ fabs(-0.0992803136596373)) < eps,
"Incorrect data->Z at 4, 7");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 5, 0)) -
fabs(1.0000000000000000)) < eps,
"Incorrect data->Z at 5, 0");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 5, 1)) -
- fabs(2.4482858151168982)) < eps,
+ fabs(0.8858332812534048)) < eps,
"Incorrect data->Z at 5, 1");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 5, 2)) -
- fabs(-0.0670998214520230)) < eps,
+ fabs(-0.0746456899124524)) < eps,
"Incorrect data->Z at 5, 2");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 5, 3)) -
- fabs(0.3147064295566219)) < eps,
+ fabs(0.3705483417541217)) < eps,
"Incorrect data->Z at 5, 3");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 5, 4)) -
- fabs(0.1070535630418465)) < eps,
+ fabs(0.1634078128645188)) < eps,
"Incorrect data->Z at 5, 4");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 5, 5)) -
- fabs(-0.0052824396955993)) < eps,
+ fabs(-0.0127248845405431)) < eps,
"Incorrect data->Z at 5, 5");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 5, 6)) -
- fabs(0.0614363461130733)) < eps,
+ fabs(0.1908544842110400)) < eps,
"Incorrect data->Z at 5, 6");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 5, 7)) -
- fabs(-0.0075355247061472)) < eps,
+ fabs(-0.0341570244488496)) < eps,
"Incorrect data->Z at 5, 7");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 6, 0)) -
fabs(1.0000000000000000)) < eps,
"Incorrect data->Z at 6, 0");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 6, 1)) -
- fabs(2.3638928644404329)) < eps,
+ fabs(0.8552984131629242)) < eps,
"Incorrect data->Z at 6, 1");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 6, 2)) -
- fabs(0.3482541374011597)) < eps,
+ fabs(0.3874178766595150)) < eps,
"Incorrect data->Z at 6, 2");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 6, 3)) -
- fabs(-0.2422541976251498)) < eps,
+ fabs(-0.2852400929318269)) < eps,
"Incorrect data->Z at 6, 3");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 6, 4)) -
- fabs(0.0251886519764033)) < eps,
+ fabs(0.0384482534865339)) < eps,
"Incorrect data->Z at 6, 4");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 6, 5)) -
- fabs(-0.0079397861684362)) < eps,
+ fabs(-0.0191261742853618)) < eps,
"Incorrect data->Z at 6, 5");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 6, 6)) -
- fabs(0.0424975213407462)) < eps,
+ fabs(0.1320202620905840)) < eps,
"Incorrect data->Z at 6, 6");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 6, 7)) -
- fabs(-0.0204279932276333)) < eps,
+ fabs(-0.0925960024453241)) < eps,
"Incorrect data->Z at 6, 7");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 7, 0)) -
fabs(1.0000000000000000)) < eps,
"Incorrect data->Z at 7, 0");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 7, 1)) -
- fabs(2.3607306299135344)) < eps,
+ fabs(0.8541542605604135)) < eps,
"Incorrect data->Z at 7, 1");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 7, 2)) -
- fabs(-0.0220102589508912)) < eps,
+ fabs(-0.0244854744615944)) < eps,
"Incorrect data->Z at 7, 2");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 7, 3)) -
- fabs(0.3913398731540265)) < eps,
+ fabs(0.4607797217991149)) < eps,
"Incorrect data->Z at 7, 3");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 7, 4)) -
- fabs(-0.0941469673695446)) < eps,
+ fabs(-0.1437070340168947)) < eps,
"Incorrect data->Z at 7, 4");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 7, 5)) -
- fabs(-0.0477595489009114)) < eps,
+ fabs(-0.1150481180085769)) < eps,
"Incorrect data->Z at 7, 5");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 7, 6)) -
- fabs(-0.0367688438245860)) < eps,
+ fabs(-0.1142238946024231)) < eps,
"Incorrect data->Z at 7, 6");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 7, 7)) -
- fabs(-0.0133498576642393)) < eps,
+ fabs(-0.0605122313850435)) < eps,
"Incorrect data->Z at 7, 7");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 8, 0)) -
fabs(1.0000000000000000)) < eps,
"Incorrect data->Z at 8, 0");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 8, 1)) -
- fabs(2.5023932475093376)) < eps,
+ fabs(0.9054103110595034)) < eps,
"Incorrect data->Z at 8, 1");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 8, 2)) -
- fabs(0.2929602950386334)) < eps,
+ fabs(0.3259058350214859)) < eps,
"Incorrect data->Z at 8, 2");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 8, 3)) -
- fabs(0.1371647327912284)) < eps,
+ fabs(0.1615034187720415)) < eps,
"Incorrect data->Z at 8, 3");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 8, 4)) -
- fabs(-0.0270505649533715)) < eps,
+ fabs(-0.0412902992687150)) < eps,
"Incorrect data->Z at 8, 4");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 8, 5)) -
- fabs(-0.0685258491091892)) < eps,
+ fabs(-0.1650721197410958)) < eps,
"Incorrect data->Z at 8, 5");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 8, 6)) -
- fabs(-0.0213385621647371)) < eps,
+ fabs(-0.0662891030052566)) < eps,
"Incorrect data->Z at 8, 6");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 8, 7)) -
- fabs(0.0121305554343051)) < eps,
+ fabs(0.0549853785509707)) < eps,
"Incorrect data->Z at 8, 7");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 9, 0)) -
fabs(1.0000000000000000)) < eps,
"Incorrect data->Z at 9, 0");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 9, 1)) -
- fabs(2.4579608302226870)) < eps,
+ fabs(0.8893338735144964)) < eps,
"Incorrect data->Z at 9, 1");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 9, 2)) -
- fabs(-0.2538863526247282)) < eps,
+ fabs(-0.2824377403832496)) < eps,
"Incorrect data->Z at 9, 2");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 9, 3)) -
- fabs(0.0991005899665861)) < eps,
+ fabs(0.1166851256604740)) < eps,
"Incorrect data->Z at 9, 3");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 9, 4)) -
- fabs(-0.1374781282330359)) < eps,
+ fabs(-0.2098482256259584)) < eps,
"Incorrect data->Z at 9, 4");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 9, 5)) -
- fabs(0.1043628273525485)) < eps,
+ fabs(0.2513999221784036)) < eps,
"Incorrect data->Z at 9, 5");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 9, 6)) -
- fabs(-0.0024213407513349)) < eps,
+ fabs(-0.0075219925896089)) < eps,
"Incorrect data->Z at 9, 6");
mu_assert(fabs(fabs(matrix_get(data->Z, data->r+1, 9, 7)) -
- fabs(0.0007673936590348)) < eps,
+ fabs(0.0034784417801946)) < eps,
"Incorrect data->Z at 9, 7");
mu_assert(fabs(matrix_get(data->RAW, data->m+1, 0, 0) -
@@ -748,9 +772,9 @@ char *test_kernel_preprocess_kernel()
0.1028774221216107) < eps,
"Incorrect data->RAW at 9, 5");
- // end test code //
+ // end test code //
gensvm_free_model(model);
gensvm_free_data(data);
@@ -2317,7 +2341,7 @@ char *test_kernel_eigendecomp()
mu_assert(r == 7, "Incorrect number of eigenvalues kept");
- // Note: to overcome sign variability in the eigenvectors, we take the
+ // Note: to overcome sign variability in the eigenvectors, we take the
// absolute value of the elements of P and the expected outcome.
mu_assert(fabs(fabs(matrix_get(P, r, 0, 0)) -
@@ -2532,19 +2556,20 @@ char *test_kernel_eigendecomp()
"Incorrect P at 9, 6");
eps = 1e-13;
- mu_assert(fabs(Sigma[0] - 22.9663721202447704) < eps,
+
+ mu_assert(fabs(Sigma[0] - 4.7923242920575353) < eps,
"Incorrect Sigma at 0");
- mu_assert(fabs(Sigma[1] - 2.2569857335186856) < eps,
+ mu_assert(fabs(Sigma[1] - 1.5023267732150303) < eps,
"Incorrect Sigma at 1");
- mu_assert(fabs(Sigma[2] - 1.4177404640754938) < eps,
+ mu_assert(fabs(Sigma[2] - 1.1906890711161726) < eps,
"Incorrect Sigma at 2");
- mu_assert(fabs(Sigma[3] - 1.0075496644459232) < eps,
+ mu_assert(fabs(Sigma[3] - 1.0037677343120393) < eps,
"Incorrect Sigma at 3");
- mu_assert(fabs(Sigma[4] - 0.7919296491505164) < eps,
+ mu_assert(fabs(Sigma[4] - 0.8899042921295091) < eps,
"Incorrect Sigma at 4");
- mu_assert(fabs(Sigma[5] - 0.6808726728950240) < eps,
+ mu_assert(fabs(Sigma[5] - 0.8251500911319253) < eps,
"Incorrect Sigma at 5");
- mu_assert(fabs(Sigma[6] - 0.2909718164349679) < eps,
+ mu_assert(fabs(Sigma[6] - 0.5394180349552358) < eps,
"Incorrect Sigma at 6");
// end test code //
diff --git a/tests/src/test_gensvm_train.c b/tests/src/test_gensvm_train.c
index b95de28..f7033f0 100644
--- a/tests/src/test_gensvm_train.c
+++ b/tests/src/test_gensvm_train.c
@@ -275,23 +275,24 @@ char *test_gensvm_train_seed_kernel()
mu_assert(model->K == data->K, "Incorrect model K");
double eps = 1e-13;
+
mu_assert(fabs(matrix_get(data->Sigma, 1, 0, 0) -
- 7.8302939172918506) < eps,
+ 2.7982662341692670) < eps,
"Incorrect data->Sigma at 0, 0");
mu_assert(fabs(matrix_get(data->Sigma, 1, 1, 0) -
- 0.7947913383766066) < eps,
+ 0.8915107056993801) < eps,
"Incorrect data->Sigma at 1, 0");
mu_assert(fabs(matrix_get(data->Sigma, 1, 2, 0) -
- 0.5288740088908547) < eps,
+ 0.7272372438832145) < eps,
"Incorrect data->Sigma at 2, 0");
mu_assert(fabs(matrix_get(data->Sigma, 1, 3, 0) -
- 0.4537982052555444) < eps,
+ 0.6736454596117636) < eps,
"Incorrect data->Sigma at 3, 0");
mu_assert(fabs(matrix_get(data->Sigma, 1, 4, 0) -
- 0.2226012271232192) < eps,
+ 0.4718063449374322) < eps,
"Incorrect data->Sigma at 4, 0");
mu_assert(fabs(matrix_get(data->Sigma, 1, 5, 0) -
- 0.0743004417495061) < eps,
+ 0.2725810737184557) < eps,
"Incorrect data->Sigma at 5, 0");
// we need a large eps here because there are numerical precision
@@ -299,69 +300,71 @@ char *test_gensvm_train_seed_kernel()
// compare with absolute values because of variability in the
// eigendecomposition.
eps = 1e-7;
+
mu_assert(fabs(fabs(matrix_get(model->V, model->K-1, 0, 0)) -
- fabs(5.0555413160638665)) < eps,
+ fabs(1.3968329665264863)) < eps,
"Incorrect model->V at 0, 0");
mu_assert(fabs(fabs(matrix_get(model->V, model->K-1, 0, 1)) -
- fabs(-2.2586632211763198)) < eps,
+ fabs(-0.4491223112772532)) < eps,
"Incorrect model->V at 0, 1");
mu_assert(fabs(fabs(matrix_get(model->V, model->K-1, 0, 2)) -
- fabs(-4.5572671806963143)) < eps,
+ fabs(-1.2044427235549637)) < eps,
"Incorrect model->V at 0, 2");
mu_assert(fabs(fabs(matrix_get(model->V, model->K-1, 1, 0)) -
- fabs(-1.9627432869558412)) < eps,
+ fabs(-1.2834234211019704)) < eps,
"Incorrect model->V at 1, 0");
mu_assert(fabs(fabs(matrix_get(model->V, model->K-1, 1, 1)) -
- fabs(0.9934555242449399)) < eps,
+ fabs(0.6330939040375793)) < eps,
"Incorrect model->V at 1, 1");
mu_assert(fabs(fabs(matrix_get(model->V, model->K-1, 1, 2)) -
- fabs(1.7855287218670219)) < eps,
+ fabs(1.2876548429115076)) < eps,
"Incorrect model->V at 1, 2");
mu_assert(fabs(fabs(matrix_get(model->V, model->K-1, 2, 0)) -
- fabs(1.9393083227054353)) < eps,
+ fabs(2.0023377286211428)) < eps,
"Incorrect model->V at 2, 0");
mu_assert(fabs(fabs(matrix_get(model->V, model->K-1, 2, 1)) -
- fabs(-1.1958487809502740)) < eps,
+ fabs(-1.5454495147993872)) < eps,
"Incorrect model->V at 2, 1");
mu_assert(fabs(fabs(matrix_get(model->V, model->K-1, 2, 2)) -
- fabs(2.1140967864804359)) < eps,
+ fabs(1.8380262406111434)) < eps,
"Incorrect model->V at 2, 2");
mu_assert(fabs(fabs(matrix_get(model->V, model->K-1, 3, 0)) -
- fabs(2.3909204618652535)) < eps,
+ fabs(1.8873525552961188)) < eps,
"Incorrect model->V at 3, 0");
mu_assert(fabs(fabs(matrix_get(model->V, model->K-1, 3, 1)) -
- fabs(-0.2834554569573399)) < eps,
+ fabs(-0.5671111794102348)) < eps,
"Incorrect model->V at 3, 1");
mu_assert(fabs(fabs(matrix_get(model->V, model->K-1, 3, 2)) -
- fabs(1.0926232371314393)) < eps,
+ fabs(1.3530484176263944)) < eps,
"Incorrect model->V at 3, 2");
mu_assert(fabs(fabs(matrix_get(model->V, model->K-1, 4, 0)) -
- fabs(3.3374545494113272)) < eps,
+ fabs(2.9991675684385952)) < eps,
"Incorrect model->V at 4, 0");
mu_assert(fabs(fabs(matrix_get(model->V, model->K-1, 4, 1)) -
- fabs(1.6699291195221897)) < eps,
+ fabs(1.6232323178615611)) < eps,
"Incorrect model->V at 4, 1");
mu_assert(fabs(fabs(matrix_get(model->V, model->K-1, 4, 2)) -
- fabs(-1.4345249893609275)) < eps,
+ fabs(-1.0853101351516645)) < eps,
"Incorrect model->V at 4, 2");
mu_assert(fabs(fabs(matrix_get(model->V, model->K-1, 5, 0)) -
- fabs(-0.0221825925355533)) < eps,
+ fabs(-0.2735156994082831)) < eps,
"Incorrect model->V at 5, 0");
mu_assert(fabs(fabs(matrix_get(model->V, model->K-1, 5, 1)) -
- fabs(-0.1216077739550210)) < eps,
+ fabs(-0.2154874773946488)) < eps,
"Incorrect model->V at 5, 1");
mu_assert(fabs(fabs(matrix_get(model->V, model->K-1, 5, 2)) -
- fabs(-0.7900947982642630)) < eps,
+ fabs(-0.9036193937904904)) < eps,
"Incorrect model->V at 5, 2");
mu_assert(fabs(fabs(matrix_get(model->V, model->K-1, 6, 0)) -
- fabs(-0.0076471781062262)) < eps,
+ fabs(-0.1010202110238350)) < eps,
"Incorrect model->V at 6, 0");
mu_assert(fabs(fabs(matrix_get(model->V, model->K-1, 6, 1)) -
- fabs(-0.8781872510019056)) < eps,
+ fabs(-1.7921615999242961)) < eps,
"Incorrect model->V at 6, 1");
mu_assert(fabs(fabs(matrix_get(model->V, model->K-1, 6, 2)) -
- fabs(-0.2782284589344380)) < eps,
+ fabs(-0.6850178130530472)) < eps,
"Incorrect model->V at 6, 2");
+
// end test code //
gensvm_free_model(model);