Ignore:
Timestamp:
Mar 19, 2007, 11:15:43 PM (15 years ago)
Author:
Peter
Message:

Generalized ConsenusInputRanker?, Fixes #151

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/yat/classifier/ConsensusInputRanker.cc

    r817 r828  
    3131#include "yat/statistics/Score.h"
    3232#include "yat/statistics/utility.h"
     33#include "yat/statistics/VectorFunction.h"
    3334#include "yat/utility/stl_utility.h"
    3435
     
    4445namespace classifier { 
    4546
    46   ConsensusInputRanker::ConsensusInputRanker(const IRRetrieve& retriever)
    47     : retriever_(retriever)
     47  ConsensusInputRanker::ConsensusInputRanker(const IRRetrieve& retriever,
     48                                             const statistics::VectorFunction&
     49                                             vf)
     50    : retriever_(retriever), vec_func_(vf)
    4851  {
    4952  }
    5053
    5154
    52   ConsensusInputRanker::ConsensusInputRanker(const Sampler& sampler,
    53                                              const MatrixLookup& data,
    54                                              statistics::Score& score,
    55                                              const IRRetrieve& retriever)
    56     : retriever_(retriever)
     55  void ConsensusInputRanker::add(const Sampler& sampler,
     56                                 const MatrixLookup& data,
     57                                 statistics::Score& score)
    5758  {
    5859    assert(sampler.size());
     60    assert(id_.empty() || id_.size()==data.rows());
     61    input_rankers_.reserve(sampler.size()+input_rankers_.size());
    5962    id_.resize(data.rows());
    6063    rank_.resize(data.rows());
     
    6770  }
    6871
    69   ConsensusInputRanker::ConsensusInputRanker(const Sampler& sampler,
    70                                              const MatrixLookupWeighted& data,
    71                                              statistics::Score& score,
    72                                              const IRRetrieve& retriever)
    73     : retriever_(retriever)
     72  void ConsensusInputRanker::add(const Sampler& sampler,
     73                                 const MatrixLookupWeighted& data,
     74                                 statistics::Score& score)
    7475  {
    75     assert(sampler.size());
     76    assert(id_.empty() || id_.size()==data.rows());
    7677    id_.resize(data.rows());
    7778    rank_.resize(data.rows());
    78  
    7979    for (size_t i=0; i<sampler.size(); ++i){
    8080      input_rankers_.push_back(InputRanker(MatrixLookupWeighted(data,sampler.training_index(i), false),
     
    8787  void ConsensusInputRanker::add(const InputRanker& ir)
    8888  {
     89    assert(id_.empty() || id_.size()==ir.id().size());
    8990    input_rankers_.push_back(ir);
    9091  }
     
    9293  size_t ConsensusInputRanker::id(size_t i) const
    9394  {
     95    assert(i<id_.size());
    9496    return id_[i];
    9597  }
     
    106108  }
    107109
     110
     111  void ConsensusInputRanker::reserve(size_t n)
     112  {
     113    input_rankers_.reserve(n);
     114  }
     115
     116
    108117  void ConsensusInputRanker::update(void)
    109118  {
    110 
    111     // Sorting with respect to median info (from retriever_)
    112     std::vector<std::pair<double,size_t> > medians(id_.size());
     119    // Sorting with respect to VectorFunction(info) where info is a
     120    // vector and each element contains infomation retrieved with
     121    // retriever_ from each InputRanker
     122    std::vector<std::pair<double,size_t> > cons_rank;
     123    cons_rank.reserve(id_.size());
    113124    for (size_t i=0; i<id_.size(); i++){
    114125      std::vector<double> scores;
     
    117128        scores.push_back(retriever_(input_rankers_[j],i));
    118129      }
    119       medians[i].first = statistics::median(scores);
    120       medians[i].second = i;
     130      cons_rank.push_back(std::make_pair(vec_func_(scores), i));
    121131    }
    122132   
    123     //sort medians and assign id_ and rank_
    124     sort(medians.begin(), medians.end(),
     133    //sort cons_rank and assign id_ and rank_
     134    sort(cons_rank.begin(), cons_rank.end(),
    125135         std::greater<std::pair<double, size_t> >());
    126136         
    127     for (size_t i=0; i<medians.size(); i++){
    128       id_[i]=medians[i].second;
     137    for (size_t i=0; i<cons_rank.size(); i++){
     138      assert(i<id_.size());
     139      id_[i]=cons_rank[i].second;
     140      assert(id_[i]<rank_.size());
    129141      rank_[id_[i]]=i;
    130142    }
Note: See TracChangeset for help on using the changeset viewer.