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

Last change on this file since 473 was 473, checked in by Peter, 17 years ago

fixed the bugs!

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 2.6 KB
Line 
1// $Id: ConsensusInputRanker.cc 473 2005-12-22 14:44:54Z 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#include <iostream>
17
18namespace theplu {
19namespace classifier { 
20
21  ConsensusInputRanker::ConsensusInputRanker
22  (const MatrixLookup& data, const Target& target,
23   statistics::Score& score_object, CrossSplitting& sampler,
24   const size_t n)
25    : nof_rankers_(n)
26
27  {
28    for (size_t i=0; i<nof_rankers_; i++){
29      std::vector<size_t> index=sampler.next();
30      input_rankers_.push_back(InputRanker(MatrixLookup(data,index), 
31                                           Target(target,index), 
32                                           score_object)  );
33    }
34    // Sorting with respect to median rank
35    std::vector<std::pair<double,size_t> > medians(data.rows());
36    for (size_t i=0; i<data.rows(); i++){ 
37      std::vector<size_t> ranks(nof_rankers_);
38      for (size_t j=0; j<nof_rankers_; j++) {
39        ranks[j]=input_rankers_[j].rank(i);
40      }
41      medians[i].first = statistics::median(ranks);
42      medians[i].second = i;
43    }
44   
45    //sort medians and assign id_ and rank_
46    sort(medians.begin(), medians.end());
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].second;
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    for (size_t i=0; i<nof_rankers_; i++){
62      std::vector<size_t> index = sampler.next();
63      input_rankers_.push_back(InputRanker(MatrixLookup(data,index),
64                                           Target(target,index),
65                                           score_object,
66                                           MatrixLookup(weight,index)));
67    }
68   
69    // Sorting with respect to median rank
70    std::vector<std::pair<double, size_t> > median(data.rows());
71    for (size_t i=0; i<data.rows(); i++){ 
72      std::vector<size_t> ranks(nof_rankers_);
73      for (size_t j=0; j<nof_rankers_; j++) 
74        ranks[j]=input_rankers_[j].rank(i);
75      median[i].first = statistics::median(ranks);
76      median[i].second = i;
77    }
78   
79    //sort medians and assign id_ and rank_
80    sort(median.begin(), median.end());
81    id_.resize(data.rows());
82    rank_.resize(data.rows());
83    for (size_t i=0; i<data.rows(); i++){
84      id_[i]=median[i].second;
85      rank_[id_[i]]=i;           
86    }
87
88  }
89   
90
91}} // of namespace classifier and namespace theplu
Note: See TracBrowser for help on using the repository browser.