aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/MSVMMaj.h3
-rw-r--r--include/kernel.h11
-rw-r--r--src/kernel.c85
-rw-r--r--src/trainMSVMMaj.c2
-rw-r--r--training/abalone.training8
-rw-r--r--training/car.training7
-rw-r--r--training/glass.training7
-rw-r--r--training/marketing.training7
-rw-r--r--training/nursery.training7
-rw-r--r--training/satimage.training8
-rw-r--r--training/shuttle.training7
-rw-r--r--training/train_all.py11
-rw-r--r--training/vehicle.training7
-rw-r--r--training/vowel.training8
-rw-r--r--training/wine.training8
-rw-r--r--training/zip.training9
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