A common benchmark used in the kernel-machine literature is that of a toy sinc function. Here we show how to reproduce these examples with a kernel machine of your choice. First, let us define our data structure.
#include <boost/vector_property_map.hpp> typedef std::pair< double, double > example_type; typedef boost::vector_property_map< example_type > container_type;
The example_type is an input-output pair
with both inputs and outputs being of type double. The container_type provides a type definition for the data container to be used by the kernel machine of choice (this could also very well be, e.g., a custom class that accesses a database on-the-fly to retrieve examples of example_type).
We let the data for one experiment consist of 50 examples
, with inputs
uniformly distributed over [-10,10], and outputs corrupted with Gaussian noise,
.
#include <boost/random/mersenne_twister.hpp> #include <boost/random/normal_distribution.hpp> #include <boost/random/variate_generator.hpp> #include <boost/math/special_functions/sinc.hpp> // create the random number generator N(0,0.1) boost::mt19937 randomness; typedef boost::normal_distribution<double> dist_type; dist_type norm_dist( 0.0, 0.1 ); boost::variate_generator< boost::mt19937, dist_type > noise( randomness, norm_dist ); // instantiate the data container, and fill it with (x,y)-pairs container_type my_data; for( int i=0; i<50; ++i ) { double x = static_cast<double>(i) / 49.0 * 20.0 - 10.0; my_data[ i ] = std::make_pair( x, boost::sinc(x) + noise() ); }
To generate the outputs, we have pulled in parts from the Boost Random Number Library, and the sinc function from the Boost Math Special Functions Library. Figure 1 shows an example scatterplot of the data that we just built the generator for.

Figure 1: Input data generated for our first tutorial example.