yat/classifier/BootstrapSampler.cc

Code
Comments
Other
Rev Date Author Line
823 19 Mar 07 peter 1 // $Id$
823 19 Mar 07 peter 2
823 19 Mar 07 peter 3 /*
2119 12 Dec 09 peter 4   Copyright (C) 2007, 2008 Jari Häkkinen, Peter Johansson
4359 23 Aug 23 peter 5   Copyright (C) 2012 Peter Johansson
823 19 Mar 07 peter 6
1437 25 Aug 08 peter 7   This file is part of the yat library, http://dev.thep.lu.se/yat
823 19 Mar 07 peter 8
823 19 Mar 07 peter 9   The yat library is free software; you can redistribute it and/or
823 19 Mar 07 peter 10   modify it under the terms of the GNU General Public License as
1486 09 Sep 08 jari 11   published by the Free Software Foundation; either version 3 of the
823 19 Mar 07 peter 12   License, or (at your option) any later version.
823 19 Mar 07 peter 13
823 19 Mar 07 peter 14   The yat library is distributed in the hope that it will be useful,
823 19 Mar 07 peter 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
823 19 Mar 07 peter 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
823 19 Mar 07 peter 17   General Public License for more details.
823 19 Mar 07 peter 18
823 19 Mar 07 peter 19   You should have received a copy of the GNU General Public License
1487 10 Sep 08 jari 20   along with yat. If not, see <http://www.gnu.org/licenses/>.
823 19 Mar 07 peter 21 */
823 19 Mar 07 peter 22
2881 18 Nov 12 peter 23 #include <config.h>
2881 18 Nov 12 peter 24
823 19 Mar 07 peter 25 #include "BootstrapSampler.h"
823 19 Mar 07 peter 26 #include "Target.h"
823 19 Mar 07 peter 27 #include "yat/random/random.h"
823 19 Mar 07 peter 28
848 28 Apr 07 jari 29 #include <cassert>
848 28 Apr 07 jari 30
823 19 Mar 07 peter 31 namespace theplu {
823 19 Mar 07 peter 32 namespace yat {
4200 19 Aug 22 peter 33 namespace classifier {
823 19 Mar 07 peter 34
823 19 Mar 07 peter 35   BootstrapSampler::BootstrapSampler(const Target& target, size_t N)
823 19 Mar 07 peter 36     : Sampler(target, N)
4200 19 Aug 22 peter 37   {
823 19 Mar 07 peter 38     assert(target.size()>1);
823 19 Mar 07 peter 39     build(target, N);
823 19 Mar 07 peter 40   }
823 19 Mar 07 peter 41
823 19 Mar 07 peter 42   BootstrapSampler::~BootstrapSampler()
823 19 Mar 07 peter 43   {
823 19 Mar 07 peter 44   }
823 19 Mar 07 peter 45
823 19 Mar 07 peter 46   void BootstrapSampler::build(const Target& target, size_t N)
823 19 Mar 07 peter 47   {
4200 19 Aug 22 peter 48     // index[i] gives all indices that belong to class i
823 19 Mar 07 peter 49     std::vector<std::vector<size_t> > index(target.nof_classes());
823 19 Mar 07 peter 50
823 19 Mar 07 peter 51     for (size_t i = 0; i<target.size(); ++i)
823 19 Mar 07 peter 52       index[target(i)].push_back(i);
823 19 Mar 07 peter 53
823 19 Mar 07 peter 54     random::DiscreteUniform rnd;
823 19 Mar 07 peter 55
823 19 Mar 07 peter 56     for (size_t i = 0; i<N; ++i){
823 19 Mar 07 peter 57       std::vector<size_t> training_index;
823 19 Mar 07 peter 58       std::vector<size_t> validation_index;
823 19 Mar 07 peter 59       training_index.reserve(target.size());
823 19 Mar 07 peter 60       validation_index.reserve(target.size());
4200 19 Aug 22 peter 61
823 19 Mar 07 peter 62       for (size_t label=0; label<target.nof_classes(); ++label) {
823 19 Mar 07 peter 63         std::vector<char> drawn(index[label].size(),0);
823 19 Mar 07 peter 64         for (size_t j=0; j<index[label].size(); ++j) {
823 19 Mar 07 peter 65           size_t k = rnd(index[label].size());
823 19 Mar 07 peter 66           training_index.push_back(index[label][k]);
823 19 Mar 07 peter 67           drawn[k]=1;
823 19 Mar 07 peter 68         }
823 19 Mar 07 peter 69         for (size_t j=0; j<index[label].size(); ++j)
823 19 Mar 07 peter 70           if (!drawn[j]) {
823 19 Mar 07 peter 71             validation_index.push_back(index[label][j]);
823 19 Mar 07 peter 72           }
823 19 Mar 07 peter 73       }
1134 23 Feb 08 peter 74       training_index_.push_back(utility::Index(training_index));
1134 23 Feb 08 peter 75       training_target_.push_back(Target(target,utility::Index(training_index)));
1134 23 Feb 08 peter 76       validation_index_.push_back(utility::Index(validation_index));
1134 23 Feb 08 peter 77       validation_target_.push_back(Target(target,
1134 23 Feb 08 peter 78                                           utility::Index(validation_index)));
823 19 Mar 07 peter 79     }
823 19 Mar 07 peter 80
823 19 Mar 07 peter 81   }
823 19 Mar 07 peter 82
823 19 Mar 07 peter 83 }}} // of namespace classifier, yat, and theplu