source: trunk/lib/classifier/ConsensusInputRanker.cc @ 451

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

directory svm -> classifier

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