summaryrefslogtreecommitdiffstats
path: root/ml/dlib/examples/krls_filter_ex.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ml/dlib/examples/krls_filter_ex.cpp')
-rw-r--r--ml/dlib/examples/krls_filter_ex.cpp109
1 files changed, 0 insertions, 109 deletions
diff --git a/ml/dlib/examples/krls_filter_ex.cpp b/ml/dlib/examples/krls_filter_ex.cpp
deleted file mode 100644
index 5bb74b183..000000000
--- a/ml/dlib/examples/krls_filter_ex.cpp
+++ /dev/null
@@ -1,109 +0,0 @@
-// The contents of this file are in the public domain. See LICENSE_FOR_EXAMPLE_PROGRAMS.txt
-/*
- This is an example illustrating the use of the krls object
- from the dlib C++ Library.
-
- The krls object allows you to perform online regression. This
- example will use the krls object to perform filtering of a signal
- corrupted by uniformly distributed noise.
-*/
-
-#include <iostream>
-
-#include <dlib/svm.h>
-#include <dlib/rand.h>
-
-using namespace std;
-using namespace dlib;
-
-// Here is the function we will be trying to learn with the krls
-// object.
-double sinc(double x)
-{
- if (x == 0)
- return 1;
-
- // also add in x just to make this function a little more complex
- return sin(x)/x + x;
-}
-
-int main()
-{
- // Here we declare that our samples will be 1 dimensional column vectors. The reason for
- // using a matrix here is that in general you can use N dimensional vectors as inputs to the
- // krls object. But here we only have 1 dimension to make the example simple.
- typedef matrix<double,1,1> sample_type;
-
-
- // Now we are making a typedef for the kind of kernel we want to use. I picked the
- // radial basis kernel because it only has one parameter and generally gives good
- // results without much fiddling.
- typedef radial_basis_kernel<sample_type> kernel_type;
-
-
- // Here we declare an instance of the krls object. The first argument to the constructor
- // is the kernel we wish to use. The second is a parameter that determines the numerical
- // accuracy with which the object will perform part of the regression algorithm. Generally
- // smaller values give better results but cause the algorithm to run slower (because it tries
- // to use more "dictionary vectors" to represent the function it is learning.
- // You just have to play with it to decide what balance of speed and accuracy is right
- // for your problem. Here we have set it to 0.001.
- //
- // The last argument is the maximum number of dictionary vectors the algorithm is allowed
- // to use. The default value for this field is 1,000,000 which is large enough that you
- // won't ever hit it in practice. However, here we have set it to the much smaller value
- // of 7. This means that once the krls object accumulates 7 dictionary vectors it will
- // start discarding old ones in favor of new ones as it goes through the training process.
- // In other words, the algorithm "forgets" about old training data and focuses on recent
- // training samples. So the bigger the maximum dictionary size the longer its memory will
- // be. But in this example program we are doing filtering so we only care about the most
- // recent data. So using a small value is appropriate here since it will result in much
- // faster filtering and won't introduce much error.
- krls<kernel_type> test(kernel_type(0.05),0.001,7);
-
- dlib::rand rnd;
-
- // Now let's loop over a big range of values from the sinc() function. Each time
- // adding some random noise to the data we send to the krls object for training.
- sample_type m;
- double mse_noise = 0;
- double mse = 0;
- double count = 0;
- for (double x = -20; x <= 20; x += 0.01)
- {
- m(0) = x;
- // get a random number between -0.5 and 0.5
- const double noise = rnd.get_random_double()-0.5;
-
- // train on this new sample
- test.train(m, sinc(x)+noise);
-
- // once we have seen a bit of data start measuring the mean squared prediction error.
- // Also measure the mean squared error due to the noise.
- if (x > -19)
- {
- ++count;
- mse += pow(sinc(x) - test(m),2);
- mse_noise += pow(noise,2);
- }
- }
-
- mse /= count;
- mse_noise /= count;
-
- // Output the ratio of the error from the noise and the mean squared prediction error.
- cout << "prediction error: " << mse << endl;
- cout << "noise: " << mse_noise << endl;
- cout << "ratio of noise to prediction error: " << mse_noise/mse << endl;
-
- // When the program runs it should print the following:
- // prediction error: 0.00735201
- // noise: 0.0821628
- // ratio of noise to prediction error: 11.1756
-
- // And we see that the noise has been significantly reduced by filtering the points
- // through the krls object.
-
-}
-
-