aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGertjan van den Burg <burg@ese.eur.nl>2015-03-05 14:26:34 +0100
committerGertjan van den Burg <burg@ese.eur.nl>2015-03-05 14:26:34 +0100
commitcb3a4c5b7c5fc2dc4b3be63f619390c07ac9c242 (patch)
tree950dd8b1748f03205ce2507558bb7c927f8d232e
parentrewrite of consistency_repeats to work with kernels (diff)
downloadgensvm-cb3a4c5b7c5fc2dc4b3be63f619390c07ac9c242.tar.gz
gensvm-cb3a4c5b7c5fc2dc4b3be63f619390c07ac9c242.zip
fixed nonlinearity
-rw-r--r--src/gensvm_kernel.c25
-rw-r--r--src/gensvm_train_dataset.c7
2 files changed, 22 insertions, 10 deletions
diff --git a/src/gensvm_kernel.c b/src/gensvm_kernel.c
index f85cb38..5548f34 100644
--- a/src/gensvm_kernel.c
+++ b/src/gensvm_kernel.c
@@ -52,7 +52,6 @@ void gensvm_kernel_preprocess(struct GenModel *model, struct GenData *data)
// generate the eigen decomposition
r = gensvm_make_eigen(K, n, &P, &Sigma);
- note("[DEBUG]: n = %li\tr = %li\n", n, r);
// build M and set to data (leave RAW intact)
gensvm_make_trainfactor(data, P, Sigma, r);
@@ -218,7 +217,7 @@ long gensvm_make_eigen(double *K, long n, double **P, double **Sigma)
cutoff_idx = 0;
for (i=0; i<n; i++)
- if (tempSigma[i]/max_eigen > 1e-10 ) {
+ if (tempSigma[i]/max_eigen > 1e-8 ) {
cutoff_idx = i;
break;
}
@@ -328,7 +327,7 @@ void gensvm_make_testfactor(struct GenData *testdata,
n2 = testdata->n;
r = traindata->r;
- N = Calloc(double, n2*(r+1));
+ N = Calloc(double, n2*r);
if (N == NULL) {
fprintf(stderr, "Failed to allocate memory for N in "
"gensvm_make_testfactor.\n");
@@ -371,12 +370,26 @@ void gensvm_make_testfactor(struct GenData *testdata,
for (i=0; i<n2; i++)
matrix_mul(N, r, i, j, value);
}
-
- // Set N and r to testdata
- testdata->Z = N;
+
+ // write N to Z with a column of ones
+ testdata->Z = Calloc(double, n2*(r+1));
+ if (testdata->Z == NULL) {
+ fprintf(stderr, "Failed to allocate memory for testdata->Z in "
+ "gensvm_make_testfactor.\n");
+ exit(1);
+ }
+ for (i=0; i<n2; i++) {
+ for (j=0; j<r; j++) {
+ matrix_set(testdata->Z, r+1, i, j+1,
+ matrix_get(N, r, i, j));
+ }
+ matrix_set(testdata->Z, r+1, i, 0, 1.0);
+ }
+ // Set r to testdata
testdata->r = r;
free(M);
+ free(N);
}
/**
diff --git a/src/gensvm_train_dataset.c b/src/gensvm_train_dataset.c
index 62c69d7..5925b5c 100644
--- a/src/gensvm_train_dataset.c
+++ b/src/gensvm_train_dataset.c
@@ -543,11 +543,9 @@ void start_training(struct Queue *q)
main_s = clock();
while (task) {
- print_progress_string(task, q->N);
make_model_from_task(task, model);
-
if (kernel_changed(task, prevtask)) {
- note("*");
+ note("Computing kernel");
for (f=0; f<folds; f++) {
if (train_folds[f]->Z != train_folds[f]->RAW)
free(train_folds[f]->Z);
@@ -558,8 +556,9 @@ void start_training(struct Queue *q)
gensvm_kernel_postprocess(model,
train_folds[f], test_folds[f]);
}
- note("*");
+ note(".\n");
}
+ print_progress_string(task, q->N);
loop_s = clock();
perf = gensvm_cross_validation(model, train_folds, test_folds,