diff options
| author | Gertjan van den Burg <burg@ese.eur.nl> | 2015-03-05 14:26:34 +0100 |
|---|---|---|
| committer | Gertjan van den Burg <burg@ese.eur.nl> | 2015-03-05 14:26:34 +0100 |
| commit | cb3a4c5b7c5fc2dc4b3be63f619390c07ac9c242 (patch) | |
| tree | 950dd8b1748f03205ce2507558bb7c927f8d232e | |
| parent | rewrite of consistency_repeats to work with kernels (diff) | |
| download | gensvm-cb3a4c5b7c5fc2dc4b3be63f619390c07ac9c242.tar.gz gensvm-cb3a4c5b7c5fc2dc4b3be63f619390c07ac9c242.zip | |
fixed nonlinearity
| -rw-r--r-- | src/gensvm_kernel.c | 25 | ||||
| -rw-r--r-- | src/gensvm_train_dataset.c | 7 |
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, |
