source: trunk/c++_tools/classifier/ConsensusInputRanker.cc @ 615

Last change on this file since 615 was 615, checked in by Peter, 16 years ago

ref #60 NOTE: there is most likely a bug around. I have removed the ensemble.build() test in the ensemble_test to get the test go through. I will try to find and remove this bug asap.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date ID
File size: 2.2 KB
Line 
1// $Id$
2
3
4#include <c++_tools/classifier/ConsensusInputRanker.h>
5
6#include <c++_tools/classifier/InputRanker.h>
7#include <c++_tools/classifier/MatrixLookup.h>
8#include <c++_tools/classifier/MatrixLookupWeighted.h>
9#include <c++_tools/classifier/Sampler.h>
10#include <c++_tools/classifier/Target.h>
11#include <c++_tools/statistics/Score.h>
12#include <c++_tools/statistics/utility.h>
13#include <c++_tools/utility/stl_utility.h>
14
15#include <cassert>
16#include <iostream>
17#include <utility>
18#include <vector>
19#include <cmath>
20
21namespace theplu {
22namespace classifier { 
23
24  ConsensusInputRanker::ConsensusInputRanker(const Sampler& sampler, 
25                                             const MatrixLookup& data, 
26                                             statistics::Score& score)
27  {
28    assert(sampler.size());
29    id_.resize(data.rows());
30    rank_.resize(data.rows());
31    for (size_t i=0; i<sampler.size(); ++i){
32      input_rankers_.push_back(InputRanker(MatrixLookup(data,sampler.training_index(i), false), 
33                                           sampler.training_target(i), 
34                                           score));       
35    }
36    update();
37  }
38
39  ConsensusInputRanker::ConsensusInputRanker(const Sampler& sampler, 
40                                             const MatrixLookupWeighted& data, 
41                                             statistics::Score& score)
42  {
43    assert(sampler.size());
44    id_.resize(data.rows());
45    rank_.resize(data.rows());
46 
47    for (size_t i=0; i<sampler.size(); ++i){
48      input_rankers_.push_back(InputRanker(MatrixLookupWeighted(data,sampler.training_index(i), false), 
49                                           sampler.training_target(i), 
50                                           score));       
51    }
52    update();
53  }
54
55  void ConsensusInputRanker::update(void)
56  {
57
58    // Sorting with respect to median rank
59    std::vector<std::pair<double,size_t> > medians(id_.size());
60    for (size_t i=0; i<id_.size(); i++){ 
61      std::vector<size_t> ranks(input_rankers_.size());
62      for (size_t j=0; j<input_rankers_.size(); j++) {
63        ranks[j]=input_rankers_[j].rank()[i];
64      }
65      medians[i].first = statistics::median(ranks);
66      medians[i].second = i;
67    }
68   
69    //sort medians and assign id_ and rank_
70    sort(medians.begin(), medians.end());
71    for (size_t i=0; i<medians.size(); i++){
72      id_[i]=medians[i].second;
73      rank_[id_[i]]=i;
74    }
75  }
76
77
78}} // of namespace classifier and namespace theplu
Note: See TracBrowser for help on using the repository browser.