diff options
| author | Gertjan van den Burg <gertjanvandenburg@gmail.com> | 2016-05-09 20:55:24 +0200 |
|---|---|---|
| committer | Gertjan van den Burg <gertjanvandenburg@gmail.com> | 2016-05-09 20:55:24 +0200 |
| commit | 7c8a5e4b2a7cff7573b1a308daf19d2dbd558a9c (patch) | |
| tree | 2c4774a63ec91d60931d822a7607a5011711c946 /src/gensvm_kernel.c | |
| parent | add doc and test to phony (diff) | |
| download | gensvm-7c8a5e4b2a7cff7573b1a308daf19d2dbd558a9c.tar.gz gensvm-7c8a5e4b2a7cff7573b1a308daf19d2dbd558a9c.zip | |
strip whitespaces
Diffstat (limited to 'src/gensvm_kernel.c')
| -rw-r--r-- | src/gensvm_kernel.c | 54 |
1 files changed, 27 insertions, 27 deletions
diff --git a/src/gensvm_kernel.c b/src/gensvm_kernel.c index a6bc9fc..f53bcce 100644 --- a/src/gensvm_kernel.c +++ b/src/gensvm_kernel.c @@ -5,7 +5,7 @@ * @brief Defines main functions for use of kernels in GenSVM. * * @details - * Functions for constructing different kernels using user-supplied + * Functions for constructing different kernels using user-supplied * parameters. Also contains the functions for decomposing the * kernel matrix using several decomposition methods. * @@ -34,7 +34,7 @@ void gensvm_kernel_preprocess(struct GenModel *model, struct GenData *data) return; } - int i; + int i; long r, n = data->n; double *P = NULL, @@ -55,7 +55,7 @@ void gensvm_kernel_preprocess(struct GenModel *model, struct GenData *data) // build M and set to data (leave RAW intact) gensvm_make_trainfactor(data, P, Sigma, r); - + // Set Sigma to data->Sigma (need it again for prediction) if (data->Sigma != NULL) free(data->Sigma); @@ -81,7 +81,7 @@ void gensvm_kernel_preprocess(struct GenModel *model, struct GenData *data) data->kernelparam[0] = model->kernelparam[0]; data->kernelparam[1] = model->kernelparam[1]; } - + free(K); free(P); } @@ -117,13 +117,13 @@ void gensvm_make_kernel(struct GenModel *model, struct GenData *data, x1 = &data->RAW[i*(data->m+1)+1]; x2 = &data->RAW[j*(data->m+1)+1]; if (model->kerneltype == K_POLY) - value = gensvm_dot_poly(x1, x2, + value = gensvm_dot_poly(x1, x2, model->kernelparam, data->m); else if (model->kerneltype == K_RBF) - value = gensvm_dot_rbf(x1, x2, + value = gensvm_dot_rbf(x1, x2, model->kernelparam, data->m); else if (model->kerneltype == K_SIGMOID) - value = gensvm_dot_sigmoid(x1, x2, + value = gensvm_dot_sigmoid(x1, x2, model->kernelparam, data->m); else { fprintf(stderr, "Unknown kernel type in " @@ -154,11 +154,11 @@ long gensvm_make_eigen(double *K, long n, double **P, double **Sigma) IWORK = Malloc(int, 5*n); IFAIL = Malloc(int, n); - - // highest precision eigenvalues, may reduce for speed + + // highest precision eigenvalues, may reduce for speed abstol = 2.0*dlamch('S'); - // first perform a workspace query to determine optimal size of the + // first perform a workspace query to determine optimal size of the // WORK array. WORK = Malloc(double, 1); status = dsyevx( @@ -183,7 +183,7 @@ long gensvm_make_eigen(double *K, long n, double **P, double **Sigma) IFAIL); LWORK = WORK[0]; - // allocate the requested memory for the eigendecomposition + // allocate the requested memory for the eigendecomposition WORK = (double *)realloc(WORK, LWORK*sizeof(double)); status = dsyevx( 'V', @@ -211,7 +211,7 @@ long gensvm_make_eigen(double *K, long n, double **P, double **Sigma) exit(1); } - // Select the desired number of eigenvalues, depending on their size. + // Select the desired number of eigenvalues, depending on their size. // dsyevx sorts eigenvalues in ascending order. max_eigen = tempSigma[n-1]; cutoff_idx = 0; @@ -223,23 +223,23 @@ long gensvm_make_eigen(double *K, long n, double **P, double **Sigma) } num_eigen = n - cutoff_idx; - + *Sigma = Calloc(double, num_eigen); - + for (i=0; i<num_eigen; i++) { (*Sigma)[i] = tempSigma[n-1 - i]; } - // revert P to row-major order and copy only the the columns + // revert P to row-major order and copy only the the columns // corresponding to the selected eigenvalues - *P = Calloc(double, n*num_eigen); + *P = Calloc(double, n*num_eigen); for (j=n-1; j>n-1-num_eigen; j--) { for (i=0; i<n; i++) { (*P)[i*num_eigen + (n-1)-j] = tempP[i + j*n]; } } - free(tempSigma); + free(tempSigma); free(tempP); free(IWORK); free(IFAIL); @@ -322,7 +322,7 @@ void gensvm_make_testfactor(struct GenData *testdata, double value, *N = NULL, *M = NULL; - + n1 = traindata->n; n2 = testdata->n; r = traindata->r; @@ -340,7 +340,7 @@ void gensvm_make_testfactor(struct GenData *testdata, exit(1); } - // copy M from traindata->Z because we need it in dgemm without column + // copy M from traindata->Z because we need it in dgemm without column // of 1's. for (i=0; i<n1; i++) for (j=0; j<r; j++) @@ -370,7 +370,7 @@ void gensvm_make_testfactor(struct GenData *testdata, for (i=0; i<n2; i++) matrix_mul(N, r, i, j, value); } - + // write N to Z with a column of ones testdata->Z = Calloc(double, n2*(r+1)); if (testdata->Z == NULL) { @@ -380,7 +380,7 @@ void gensvm_make_testfactor(struct GenData *testdata, } for (i=0; i<n2; i++) { for (j=0; j<r; j++) { - matrix_set(testdata->Z, r+1, i, j+1, + 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); @@ -394,7 +394,7 @@ void gensvm_make_testfactor(struct GenData *testdata, /** * @brief Compute the RBF kernel between two vectors - * + * * @details * The RBF kernel is computed between two vectors. This kernel is defined as * @f[ @@ -404,7 +404,7 @@ void gensvm_make_testfactor(struct GenData *testdata, * * @param[in] x1 first vector * @param[in] x2 second vector - * @param[in] kernelparam array of kernel parameters (gamma is first + * @param[in] kernelparam array of kernel parameters (gamma is first * element) * @param[in] n length of the vectors x1 and x2 * @returns kernel evaluation @@ -413,8 +413,8 @@ double gensvm_dot_rbf(double *x1, double *x2, double *kernelparam, long n) { long i; double value = 0.0; - - for (i=0; i<n; i++) + + for (i=0; i<n; i++) value += (x1[i] - x2[i]) * (x1[i] - x2[i]); value *= -kernelparam[0]; return exp(value); @@ -424,7 +424,7 @@ double gensvm_dot_rbf(double *x1, double *x2, double *kernelparam, long n) * @brief Compute the polynomial kernel between two vectors * * @details - * The polynomial kernel is computed between two vectors. This kernel is + * The polynomial kernel is computed between two vectors. This kernel is * defined as * @f[ * k(x_1, x_2) = ( \gamma \langle x_1, x_2 \rangle + c)^d @@ -450,7 +450,7 @@ double gensvm_dot_poly(double *x1, double *x2, double *kernelparam, long n) /** * @brief Compute the sigmoid kernel between two vectors - * + * * @details * The sigmoid kernel is computed between two vectors. This kernel is defined * as |
