source: branches/peters_vector/lib/classifier/ConsensusInputRanker.cc @ 470

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

compiling 3 tests fail

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