From 3713989f5ea8747c2afca4d35e5f2da746f25b24 Mon Sep 17 00:00:00 2001 From: Gertjan van den Burg Date: Mon, 5 Dec 2016 19:21:59 +0100 Subject: add octave testfiles to git --- tests/aux/test_kernel_pre.m | 101 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 tests/aux/test_kernel_pre.m (limited to 'tests/aux/test_kernel_pre.m') diff --git a/tests/aux/test_kernel_pre.m b/tests/aux/test_kernel_pre.m new file mode 100644 index 0000000..a1c8337 --- /dev/null +++ b/tests/aux/test_kernel_pre.m @@ -0,0 +1,101 @@ +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 * + 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) + gamma = 0.348 + for ii=1:n + for jj=1:n + K(ii, jj) = exp(-gamma * sum((X(ii, :) - X(jj, :)).^2)); + end + end + elseif strcmp(kerneltype, 'sigmoid') + # Sigmoid kernel + # tanh(gamma * + c) + gamma = 1.23; + c = 1.6; + for ii=1:n + for jj=1:n + K(ii, jj) = tanh(gamma * (X(ii, :) * X(jj, :)') + c); + end + end + end + + K(1, 2) + + [P, Sigma] = eig(K); + + eigenvalues = diag(Sigma); + ratios = eigenvalues ./ eigenvalues(end, end); + + realP = fliplr(P(:, ratios > cutoff)); + realSigma = 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) + for ii=1:size(A, 1) + for jj=1:size(A, 2) + fprintf("matrix_set(%s, %s, %i, %i, %.16f);\n", name, cols, ii-1, jj-1, A(ii, jj)); + end + end + fprintf("\n"); +end + +function assert_matrix(A, name, cols) + for ii=1:size(A, 1) + for jj=1:size(A, 2) + fprintf(["mu_assert(fabs(matrix_get(%s, %s, %i, %i) -\n%.16f) <", ... + " eps,\n\"Incorrect %s at %i, %i\");\n"], name, cols, ... + ii-1, jj-1, A(ii, jj), name, ii-1, jj-1); + end + end + fprintf("\n"); +end + +function assert_matrix_abs(A, name, cols) + for ii=1:size(A, 1) + for jj=1:size(A, 2) + fprintf(["mu_assert(fabs(fabs(matrix_get(%s, %s, %i, %i)) -\nfabs(%.16f)) <", ... + " eps,\n\"Incorrect %s at %i, %i\");\n"], name, cols, ... + ii-1, jj-1, A(ii, jj), name, ii-1, jj-1); + end + end + fprintf("\n"); +end \ No newline at end of file -- cgit v1.2.3