diff options
| author | Gertjan van den Burg <burg@ese.eur.nl> | 2013-10-22 18:59:59 +0200 |
|---|---|---|
| committer | Gertjan van den Burg <burg@ese.eur.nl> | 2013-10-22 18:59:59 +0200 |
| commit | adf4ed1172853740710c26c6e1d3e70a47ff6e7c (patch) | |
| tree | 818bd53157c34b4110ea8c97d13c6a9fba29963d | |
| parent | restart using git (diff) | |
| download | gensvm-adf4ed1172853740710c26c6e1d3e70a47ff6e7c.tar.gz gensvm-adf4ed1172853740710c26c6e1d3e70a47ff6e7c.zip | |
started work on including kernels
| -rw-r--r-- | include/MSVMMaj.h | 3 | ||||
| -rw-r--r-- | include/kernel.h | 11 | ||||
| -rw-r--r-- | src/kernel.c | 85 | ||||
| -rw-r--r-- | src/trainMSVMMaj.c | 2 | ||||
| -rw-r--r-- | training/abalone.training | 8 | ||||
| -rw-r--r-- | training/car.training | 7 | ||||
| -rw-r--r-- | training/glass.training | 7 | ||||
| -rw-r--r-- | training/marketing.training | 7 | ||||
| -rw-r--r-- | training/nursery.training | 7 | ||||
| -rw-r--r-- | training/satimage.training | 8 | ||||
| -rw-r--r-- | training/shuttle.training | 7 | ||||
| -rw-r--r-- | training/train_all.py | 11 | ||||
| -rw-r--r-- | training/vehicle.training | 7 | ||||
| -rw-r--r-- | training/vowel.training | 8 | ||||
| -rw-r--r-- | training/wine.training | 8 | ||||
| -rw-r--r-- | training/zip.training | 9 |
16 files changed, 195 insertions, 0 deletions
diff --git a/include/MSVMMaj.h b/include/MSVMMaj.h index 5c3efb8..de99f91 100644 --- a/include/MSVMMaj.h +++ b/include/MSVMMaj.h @@ -2,6 +2,7 @@ #define MSVMMAJ_H #include "globals.h" +#include "types.h" /* Model structure @@ -27,6 +28,8 @@ struct MajModel { double *rho; double training_error; char *data_file; + KernelType kerneltype; + double *kernelparam; }; /* diff --git a/include/kernel.h b/include/kernel.h new file mode 100644 index 0000000..ac5c35d --- /dev/null +++ b/include/kernel.h @@ -0,0 +1,11 @@ +#ifndef KERNEL_H +#define KERNEL_H + +#include "globals.h" +#include "types.h" + +// forward declarations +struct MajData; + +// function declarations + diff --git a/src/kernel.c b/src/kernel.c new file mode 100644 index 0000000..ee64871 --- /dev/null +++ b/src/kernel.c @@ -0,0 +1,85 @@ +/** + * @file kernel.c + * @author Gertjan van den Burg (burg@ese.eur.nl) + * @date October 18, 2013 + * @brief Defines main functions for use of kernels in MSVMMaj. + * + * @details + * Functions for constructing different kernels using user-supplied + * parameters. Also contains the functions for decomposing the + * kernel matrix using several decomposition methods. + * + */ +#include <math.h> + +#include "kernel.h" + +void msvmmaj_make_kernel(struct MajModel *model, struct MajData *data) +{ + switch (model->kerneltype) { + case K_LINEAR: + break; + case K_POLY: + msvmmaj_make_kernel_poly(model, data); + break; + case K_RBF: + msvmmaj_make_kernel_rbf(model, data); + break; + case K_SIGMOID: + msvmmaj_make_kernel_sigmoid(model, data); + break; + } +} + +void msvmmaj_make_kernel_rbf(struct MajModel *model, struct MajData *data) +{ + long i, j; + long n = model->n; + double value; + double *x1, *x2; + double *K = Calloc(double, n*(n+1)); + + for (i=0; i<n; i++) { + for (j=0; j<n; j++) { + x1 = &data->Z[i*(data->m+1)+1]; + x2 = &data->Z[j*(data->m+1)+1]; + value = msvmmaj_compute_rbf(x1, x2, model->kernelparam, n); + matrix_set(K, n+1, i, j+1, value); + } + matrix_set(K, n+1, i, 0, 1.0); + } + + free(data->Z); + data->Z = K; + data->m = n; + model->m = n; +} + +/** + * Implements k(x, z) = exp( -gamma * || x - z ||^2) + */ +double msvmmaj_compute_rbf(double *x1, double *x2, double *kernelparam, long n) +{ + long i; + double value = 0.0; + + for (i=0; i<n; i++) + value += (x1[i] - x2[i]) * (x1[i] - x2[i]); + value *= -kernelparam[0]; + return exp(value); +} + +/** + * Implements k(x, z) = (gamma * <x, z> + c)^degree + */ +double msvmmaj_compute_poly(double *x1, double *x2, double *kernelparam, long n) +{ + long i; + double value = 0.0; + for (i=0; i<n; i++) + value += x1[i]*x2[i]; + value *= kernelparam[0]; + value += kernelparam[1]; + for (i=1; i<(int kernelparam[2]); i++) + value *= value; + :w diff --git a/src/trainMSVMMaj.c b/src/trainMSVMMaj.c index ebcf36c..b4b74df 100644 --- a/src/trainMSVMMaj.c +++ b/src/trainMSVMMaj.c @@ -73,6 +73,8 @@ int main(int argc, char **argv) } else { msvmmaj_seed_model_V(NULL, model); } + // initialize kernel (if necessary) + // msvmmaj_make_kernel(model, data); // start training msvmmaj_optimize(model, data); diff --git a/training/abalone.training b/training/abalone.training new file mode 100644 index 0000000..1704c87 --- /dev/null +++ b/training/abalone.training @@ -0,0 +1,8 @@ +train: ./data/abalone.train +p: 1.0 1.5 2.0 +kappa: -0.9 0.0 1.0 +lambda: 64 32 16 8 4 2 1 0.5 0.25 0.125 0.0625 0.03125 0.015625 0.0078125 0.00390625 0.001953125 0.0009765625 0.00048828125 0.000244140625 +epsilon: 1e-6 +weight: 2 +folds: 10 +repeats: 10 diff --git a/training/car.training b/training/car.training new file mode 100644 index 0000000..a4eaf1e --- /dev/null +++ b/training/car.training @@ -0,0 +1,7 @@ +data: ./data/car.train +p: 1.0 1.25 1.5 1.75 2.0 +kappa: -0.9 0.0 0.5 1.0 5.0 +lambda: 64 32 16 8 4 2 1 0.5 0.25 0.125 0.0625 0.03125 0.015625 0.0078125 0.00390625 0.001953125 0.0009765625 0.00048828125 0.000244140625 +epsilon: 1e-6 +weight: 1 2 +folds: 10 diff --git a/training/glass.training b/training/glass.training new file mode 100644 index 0000000..a5053f8 --- /dev/null +++ b/training/glass.training @@ -0,0 +1,7 @@ +data: ./data/glass.train +p: 1.0 1.5 2.0 +kappa: -0.9 0.0 0.5 1.0 5.0 +lambda: 64 32 16 8 4 2 1 0.5 0.25 0.125 0.0625 0.03125 0.015625 0.0078125 0.00390625 0.001953125 0.0009765625 0.00048828125 0.000244140625 +epsilon: 1e-6 +weight: 1 2 +folds: 10 diff --git a/training/marketing.training b/training/marketing.training new file mode 100644 index 0000000..8d1a0a5 --- /dev/null +++ b/training/marketing.training @@ -0,0 +1,7 @@ +train: ./data/marketing.train +p: 1.0 1.25 1.5 1.75 2.0 +kappa: -0.9 0.0 0.5 1.0 5.0 +lambda: 64 32 16 8 4 2 1 0.5 0.25 0.125 0.0625 0.03125 0.015625 0.0078125 0.00390625 0.001953125 0.0009765625 0.00048828125 0.000244140625 +epsilon: 1e-6 +weight: 1 2 +folds: 10 diff --git a/training/nursery.training b/training/nursery.training new file mode 100644 index 0000000..e0d016b --- /dev/null +++ b/training/nursery.training @@ -0,0 +1,7 @@ +train: ./data/nursery.train +p: 1.0 1.25 1.5 1.75 2.0 +kappa: -0.9 0.0 0.5 1.0 5.0 +lambda: 64 32 16 8 4 2 1 0.5 0.25 0.125 0.0625 0.03125 0.015625 0.0078125 0.00390625 0.001953125 0.0009765625 0.00048828125 0.000244140625 +epsilon: 1e-6 +weight: 1 +folds: 10 diff --git a/training/satimage.training b/training/satimage.training new file mode 100644 index 0000000..bf12e62 --- /dev/null +++ b/training/satimage.training @@ -0,0 +1,8 @@ +train: ./data/satimage.train +test: ./data/satimage.test +p: 1.0 1.25 1.5 1.75 2.0 +kappa: -0.9 0.0 0.5 1.0 5.0 +lambda: 64 32 16 8 4 2 1 0.5 0.25 0.125 0.0625 0.03125 0.015625 0.0078125 0.00390625 0.001953125 0.0009765625 0.00048828125 0.000244140625 +epsilon: 1e-6 +weight: 1 2 +folds: 10 diff --git a/training/shuttle.training b/training/shuttle.training new file mode 100644 index 0000000..615850c --- /dev/null +++ b/training/shuttle.training @@ -0,0 +1,7 @@ +train: ./data/shuttle.train +p: 1.0 1.25 1.5 1.75 2.0 +kappa: -0.9 0.0 0.5 1.0 5.0 +lambda: 64 32 16 8 4 2 1 0.5 0.25 0.125 0.0625 0.03125 0.015625 0.0078125 0.00390625 0.001953125 0.0009765625 0.00048828125 0.000244140625 +epsilon: 1e-6 +weight: 1 2 +folds: 10 diff --git a/training/train_all.py b/training/train_all.py new file mode 100644 index 0000000..a334adb --- /dev/null +++ b/training/train_all.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python + +import os + +def main(): + for f in os.listdir('.'): + if f.endswith('.training'): + os.system('../trainMSVMMajdataset %s > %s.output' % (f, f)) + +if __name__ == '__main__': + main() diff --git a/training/vehicle.training b/training/vehicle.training new file mode 100644 index 0000000..b0a2fb6 --- /dev/null +++ b/training/vehicle.training @@ -0,0 +1,7 @@ +data: ./data/vehicle.train +p: 1.0 1.25 1.5 1.75 2.0 +kappa: -0.9 0.0 0.5 1.0 5.0 +lambda: 64 32 16 8 4 2 1 0.5 0.25 0.125 0.0625 0.03125 0.015625 0.0078125 0.00390625 0.001953125 0.0009765625 0.00048828125 0.000244140625 +epsilon: 1e-6 +weight: 1 2 +folds: 10 diff --git a/training/vowel.training b/training/vowel.training new file mode 100644 index 0000000..6fd62e2 --- /dev/null +++ b/training/vowel.training @@ -0,0 +1,8 @@ +train: ./data/vowel.train +test: ./data/vowel.test +p: 1.0 1.25 1.5 1.75 2.0 +kappa: -0.9 0.0 0.5 1.0 5.0 +lambda: 64 32 16 8 4 2 1 0.5 0.25 0.125 0.0625 0.03125 0.015625 0.0078125 0.00390625 0.001953125 0.0009765625 0.00048828125 0.000244140625 +epsilon: 1e-6 +weight: 1 2 +folds: 10 diff --git a/training/wine.training b/training/wine.training new file mode 100644 index 0000000..7480756 --- /dev/null +++ b/training/wine.training @@ -0,0 +1,8 @@ +train: ./data/wine.train +p: 1.0 1.5 2.0 +kappa: -0.9 0.0 1.0 +lambda: 64 32 16 8 4 2 1 0.5 0.25 0.125 0.0625 0.03125 0.015625 0.0078125 0.00390625 0.001953125 0.0009765625 0.00048828125 0.000244140625 +epsilon: 1e-6 +weight: 1 2 +folds: 10 +repeats: 10 diff --git a/training/zip.training b/training/zip.training new file mode 100644 index 0000000..9d32086 --- /dev/null +++ b/training/zip.training @@ -0,0 +1,9 @@ +train: ./data/zip.train +test: ./data/zip.test +p: 1.0 1.5 2.0 +kappa: -0.9 0.0 1.0 +lambda: 64 32 16 8 4 2 1 0.5 0.25 0.125 0.0625 0.03125 0.015625 0.0078125 0.00390625 0.001953125 0.0009765625 0.00048828125 0.000244140625 +epsilon: 1e-6 +weight: 1 2 +folds: 10 +repeats: 10 |
