SVMregression.cpp
#include <Rng/GlobalRng.h>
#include <ReClaM/Svm.h>
#include <ReClaM/MeanSquaredError.h>
#include <iostream>
using namespace std;
double sinc(double x)
{
if (x == 0.0) return 1.0;
else return sin(x) / x;
}
int main()
{
cout << "*** Support Vector Machine example program ***" << endl << endl;
cout << "The regression training data are sampled from a sinc function" << endl;
cout << "with additive Gaussian white noise." << endl;
cout << endl;
unsigned int e;
Rng::seed(42);
double C = 100.0;
double epsilon = 0.1;
double sigma = 2.0;
unsigned int examples = 100;
Array<double> x(examples, 1);
Array<double> t(examples, 1);
Array<double> y(examples, 1);
for (e = 0; e < examples; e++)
{
x(e, 0) = Rng::uni(-12.0, 12.0);
t(e, 0) = sinc(x(e, 0));
y(e, 0) = t(e, 0) + Rng::gauss(0.0, 0.01);
}
double gamma = 0.5 / (sigma * sigma);
RBFKernel k(gamma);
SVM svm(&k, false);
Epsilon_SVM esvm(&svm, C, epsilon);
SVM_Optimizer SVMopt;
SVMopt.init(esvm);
cout << "Support Vector Machine training ..." << flush;
SVMopt.optimize(svm, x, y);
cout << " done." << endl << endl;
MeanSquaredError mse;
double err = mse.error(svm, x, t);
cout << "mean squared error on the training data: " << err << endl << endl;
if (err <= 0.0015) exit(EXIT_SUCCESS);
else exit(EXIT_FAILURE);
}