summaryrefslogtreecommitdiffstats
path: root/ml/dlib/examples/svm_sparse_ex.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ml/dlib/examples/svm_sparse_ex.cpp')
-rw-r--r--ml/dlib/examples/svm_sparse_ex.cpp120
1 files changed, 0 insertions, 120 deletions
diff --git a/ml/dlib/examples/svm_sparse_ex.cpp b/ml/dlib/examples/svm_sparse_ex.cpp
deleted file mode 100644
index 5d68e4a2c..000000000
--- a/ml/dlib/examples/svm_sparse_ex.cpp
+++ /dev/null
@@ -1,120 +0,0 @@
-// The contents of this file are in the public domain. See LICENSE_FOR_EXAMPLE_PROGRAMS.txt
-/*
-
- This is an example showing how to use sparse feature vectors with
- the dlib C++ library's machine learning tools.
-
- This example creates a simple binary classification problem and shows
- you how to train a support vector machine on that data.
-
- The data used in this example will be 100 dimensional data and will
- come from a simple linearly separable distribution.
-*/
-
-
-#include <iostream>
-#include <ctime>
-#include <vector>
-#include <dlib/svm.h>
-
-using namespace std;
-using namespace dlib;
-
-
-int main()
-{
- // In this example program we will be dealing with feature vectors that are sparse (i.e. most
- // of the values in each vector are zero). So rather than using a dlib::matrix we can use
- // one of the containers from the STL to represent our sample vectors. In particular, we
- // can use the std::map to represent sparse vectors. (Note that you don't have to use std::map.
- // Any STL container of std::pair objects that is sorted can be used. So for example, you could
- // use a std::vector<std::pair<unsigned long,double> > here so long as you took care to sort every vector)
- typedef std::map<unsigned long,double> sample_type;
-
-
- // This is a typedef for the type of kernel we are going to use in this example.
- // Since our data is linearly separable I picked the linear kernel. Note that if you
- // are using a sparse vector representation like std::map then you have to use a kernel
- // meant to be used with that kind of data type.
- typedef sparse_linear_kernel<sample_type> kernel_type;
-
-
- // Here we create an instance of the pegasos svm trainer object we will be using.
- svm_pegasos<kernel_type> trainer;
- // Here we setup a parameter to this object. See the dlib documentation for a
- // description of what this parameter does.
- trainer.set_lambda(0.00001);
-
- // Let's also use the svm trainer specially optimized for the linear_kernel and
- // sparse_linear_kernel.
- svm_c_linear_trainer<kernel_type> linear_trainer;
- // This trainer solves the "C" formulation of the SVM. See the documentation for
- // details.
- linear_trainer.set_c(10);
-
- std::vector<sample_type> samples;
- std::vector<double> labels;
-
- // make an instance of a sample vector so we can use it below
- sample_type sample;
-
-
- // Now let's go into a loop and randomly generate 10000 samples.
- srand(time(0));
- double label = +1;
- for (int i = 0; i < 10000; ++i)
- {
- // flip this flag
- label *= -1;
-
- sample.clear();
-
- // now make a random sparse sample with at most 10 non-zero elements
- for (int j = 0; j < 10; ++j)
- {
- int idx = std::rand()%100;
- double value = static_cast<double>(std::rand())/RAND_MAX;
-
- sample[idx] = label*value;
- }
-
- // let the svm_pegasos learn about this sample.
- trainer.train(sample,label);
-
- // Also save the samples we are generating so we can let the svm_c_linear_trainer
- // learn from them below.
- samples.push_back(sample);
- labels.push_back(label);
- }
-
- // In addition to the rule we learned with the pegasos trainer, let's also use our
- // linear_trainer to learn a decision rule.
- decision_function<kernel_type> df = linear_trainer.train(samples, labels);
-
- // Now we have trained our SVMs. Let's test them out a bit.
- // Each of these statements prints the output of the SVMs given a particular sample.
- // Each SVM outputs a number > 0 if a sample is predicted to be in the +1 class and < 0
- // if a sample is predicted to be in the -1 class.
-
-
- sample.clear();
- sample[4] = 0.3;
- sample[10] = 0.9;
- cout << "This is a +1 example, its SVM output is: " << trainer(sample) << endl;
- cout << "df: " << df(sample) << endl;
-
- sample.clear();
- sample[83] = -0.3;
- sample[26] = -0.9;
- sample[58] = -0.7;
- cout << "This is a -1 example, its SVM output is: " << trainer(sample) << endl;
- cout << "df: " << df(sample) << endl;
-
- sample.clear();
- sample[0] = -0.2;
- sample[9] = -0.8;
- cout << "This is a -1 example, its SVM output is: " << trainer(sample) << endl;
- cout << "df: " << df(sample) << endl;
-
-}
-