summaryrefslogtreecommitdiffstats
path: root/ml/dlib/dlib/test/active_learning.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ml/dlib/dlib/test/active_learning.cpp')
-rw-r--r--ml/dlib/dlib/test/active_learning.cpp165
1 files changed, 0 insertions, 165 deletions
diff --git a/ml/dlib/dlib/test/active_learning.cpp b/ml/dlib/dlib/test/active_learning.cpp
deleted file mode 100644
index 9dc0013a5..000000000
--- a/ml/dlib/dlib/test/active_learning.cpp
+++ /dev/null
@@ -1,165 +0,0 @@
-// Copyright (C) 2012 Davis E. King (davis@dlib.net)
-// License: Boost Software License See LICENSE.txt for the full license.
-
-
-#include <dlib/svm.h>
-
-#include "tester.h"
-
-
-namespace
-{
-
- using namespace test;
- using namespace dlib;
- using namespace std;
-
- logger dlog("test.active_learning");
-
-// ----------------------------------------------------------------------------------------
-
- typedef matrix<double, 0, 1> sample_type;
- typedef radial_basis_kernel<sample_type> kernel_type;
-
-// ----------------------------------------------------------------------------------------
-
- void make_dataset (
- std::vector<sample_type>& samples,
- std::vector<double>& labels
- )
- {
- for (int r = -10; r <= 10; ++r)
- {
- for (int c = -10; c <= 10; ++c)
- {
- sample_type samp(2);
- samp(0) = r;
- samp(1) = c;
- samples.push_back(samp);
-
- // if this point is less than 10 from the origin
- if (sqrt((double)r*r + c*c) <= 8)
- labels.push_back(+1);
- else
- labels.push_back(-1);
-
- }
- }
-
-
- vector_normalizer<sample_type> normalizer;
- normalizer.train(samples);
- for (unsigned long i = 0; i < samples.size(); ++i)
- samples[i] = normalizer(samples[i]);
-
- randomize_samples(samples, labels);
-
- /*
- cout << "samples.size(): " << samples.size() << endl;
- cout << "num +1 samples: "<< sum(mat(labels) > 0) << endl;
- cout << "num -1 samples: "<< sum(mat(labels) < 0) << endl;
- */
-
- empirical_kernel_map<kernel_type> ekm;
- ekm.load(kernel_type(0.15), samples);
- for (unsigned long i = 0; i < samples.size(); ++i)
- samples[i] = ekm.project(samples[i]);
-
- //cout << "dims: "<< ekm.out_vector_size() << endl;
- }
-
-// ----------------------------------------------------------------------------------------
-
- double test_rank_unlabeled_training_samples (
- const std::vector<sample_type>& samples,
- const std::vector<double>& labels,
- active_learning_mode mode,
- int iterations,
- bool pick_front
- )
- {
- matrix<double,2,1> s;
- s = sum(mat(labels) > 0), sum(mat(labels) < 0);
- s /= labels.size();
-
-
- svm_c_linear_dcd_trainer<linear_kernel<sample_type> > trainer;
- trainer.set_c(25);
-
- const unsigned long initial_size = 1;
- std::vector<sample_type> tsamples(samples.begin(), samples.begin()+initial_size);
- std::vector<double> tlabels(labels.begin(), labels.begin()+initial_size);
-
- decision_function<linear_kernel<sample_type> > df;
-
- double random_score = 0;
- double active_learning_score = 0;
- for (int i = 0; i < iterations; ++i)
- {
- print_spinner();
- random_subset_selector<sample_type> sss = randomly_subsample(samples,50,i);
- random_subset_selector<double> ssl = randomly_subsample(labels,50,i);
- std::vector<unsigned long> results;
-
- results = rank_unlabeled_training_samples(trainer, tsamples, tlabels, sss, mode);
-
- const unsigned long idx = pick_front ? results.front() : results.back();
- tsamples.push_back(sss[idx]);
- tlabels.push_back(ssl[idx]);
-
- df = trainer.train(tsamples, tlabels);
- //cout << "tsamples.size(): " << tsamples.size() << endl;
- const unsigned long num = tsamples.size();
- const double active = test_binary_decision_function(df, samples, labels)*s;
- //cout << "test: "<< active;
- df = trainer.train(randomly_subsample(samples,num,i), randomly_subsample(labels,num,i));
- const double random = test_binary_decision_function(df, samples, labels)*s;
- //cout << "test: "<< random << endl;
-
- active_learning_score += active;
- random_score += random;
-
- //cout << "\n\n***********\n\n" << flush;
- }
-
- dlog << LINFO << "pick_front: " << pick_front << " mode: "<< mode;
- dlog << LINFO << "active_learning_score: "<< active_learning_score;
- dlog << LINFO << "random_score: "<< random_score;
- return active_learning_score / random_score;
- }
-
-// ----------------------------------------------------------------------------------------
-
- class test_active_learning : public tester
- {
- public:
- test_active_learning (
- ) :
- tester ("test_active_learning",
- "Runs tests on the active learning components.")
- {}
-
- void perform_test (
- )
- {
- std::vector<sample_type> samples;
- std::vector<double> labels;
- print_spinner();
- make_dataset(samples, labels);
- dlog << LINFO << "samples.size(): "<< samples.size();
-
- // When we pick the best/front ranked element then the active learning method
- // shouldn't do much worse than random selection (and often much better).
- DLIB_TEST(test_rank_unlabeled_training_samples(samples, labels, max_min_margin, 35, true) >= 0.97);
- DLIB_TEST(test_rank_unlabeled_training_samples(samples, labels, ratio_margin, 25, true) >= 0.96);
- // However, picking the worst ranked element should do way worse than random
- // selection.
- DLIB_TEST(test_rank_unlabeled_training_samples(samples, labels, max_min_margin, 25, false) < 0.8);
- DLIB_TEST(test_rank_unlabeled_training_samples(samples, labels, ratio_margin, 25, false) < 0.8);
- }
- } a;
-
-}
-
-
-