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

Last change on this file since 666 was 666, checked in by Peter, 15 years ago

refs #151, added IRRetreive functors and prepared ConsensusInputRanker? for usage.

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