1#ifndef FSTSEARCHSEQSTEPENSEMBLE_H
2#define FSTSEARCHSEQSTEPENSEMBLE_H
139template<
class RETURNTYPE,
typename DIMTYPE,
class SUBSET,
class CRITERION>
142 typedef Sequential_Step<RETURNTYPE,DIMTYPE,SUBSET,CRITERION>
parent;
155 Sequential_Step_Ensemble(
const PEnsembleCriteria ensemble,
PEvaluatorEngine engine=
PEvaluatorEngine()):Sequential_Step<RETURNTYPE,DIMTYPE,SUBSET,CRITERION>(),
_engine(engine),
track(false) {assert(ensemble);
_ensemble=ensemble;
if(!
_engine)
_engine.reset(
new Candidate_Evaluator_Sequential<RETURNTYPE,DIMTYPE,SUBSET,
Criterion<RETURNTYPE,SUBSET> >());
notify(
"Sequential_Step_Ensemble constructor.");}
162 virtual std::ostream&
print(std::ostream& os)
const override {
163 if(
_engine->is_threaded()) os <<
"Sequential_Step_Ensemble(threads="<<
_engine->get_max_threads()<<
")";
164 else os <<
"Sequential_Step_Ensemble()";
207 typename CANDIDATELISTS::iterator
oiter;
208 typename CANDIDATELIST::iterator
iter;
209 typename FINALVALUES::iterator
fiter;
217template<
class RETURNTYPE,
typename DIMTYPE,
class SUBSET,
class CRITERION>
232 DIMTYPE _candidates=0;
233 bool b=sub->getFirstCandidateSubset(1,
false);
if(!b)
return false;
235 if(!sub->getFirstTemporaryFeature(_tfeat))
return false;
236 assert(_tfeat<sub->get_n());
238 _final.insert( make_pair(_tfeat,_cs));
240 b=sub->getNextCandidateSubset();
242 if(_candidates==0)
return false;
249 for(
typename PAbstractCriteria::size_type j=0;j<
_ensemble->size();j++)
253 typename CANDIDATELIST::iterator it;
254 for(it=lst->begin(); it!=lst->end() && val<it->_value; it++);
258 b=sub->getFirstCandidateSubset(1,
false);
if(!b)
return false;
260 if(!sub->getFirstTemporaryFeature(_tfeat))
return false;
261 if(!
_engine->add_candidate(sub,_tfeat))
return false;
262 b=sub->getNextCandidateSubset();
264 if(!
_engine->collect())
return false;
269template<
class RETURNTYPE,
typename DIMTYPE,
class SUBSET,
class CRITERION>
273 assert(sub->get_n()>0);
277 if(_generalization_level!=1)
throw FST::fst_error(
"Sequential_Step_Ensemble currently does not support generalization level other than 1.");
298 DIMTYPE _curposition;
301 iter=(*oiter)->begin();
303 _lastval=
iter->_value;
304 _final[
iter->_tempfeature]->_value+=_curposition;
306 while(
iter!=(*oiter)->end())
308 if(
iter->_value<_lastval) {_curposition++; _lastval=
iter->_value;}
309 _final[
iter->_tempfeature]->_value+=_curposition;
326 if(_lastval<1.0 || ( (*fiter).second->_value < _lastval && (*fiter).second->_value > 0.0 ))
328 _lastval=(*fiter).second->_value;
329 _curposition=(*fiter).second->_tempfeature;
334 assert(sub->get_d()!=0);
336 if(!crit->evaluate(result,sub)) {
if(
parent::output_normal()) {std::ostringstream sos; sos <<
"FAILURE crit->eval() sub=" << *(sub) << std::endl << std::endl << std::flush;
syncout::print(os,sos);}
return false;}
340 std::ostringstream sos;
341 sos <<
"---------------- "<< std::endl;
342 sos <<
"candidate lists: "<< std::endl;
346 sos << lst++ <<
": ";
347 for(
iter=(*oiter)->begin();
iter!=(*oiter)->end();
iter++) sos <<
iter->_tempfeature <<
"," <<
iter->_value <<
" | ";
350 sos <<
"final list: "<<std::endl;
356 sos <<
"verified crit value=" << result << std::endl;
357 sos << std::endl << std::flush;
Abstract candidate-evaluation strategy: the seam through which one search algorithm body evaluates ca...
Implements sequential in-line evaluation of a criterion on a set of subset candidates.
Implements sequential in-line evaluation of a criterion on a set of subset candidates.
Definition candidate_evaluator_sequential.hpp:62
Abstract candidate-evaluation strategy (sequential-inline vs. thread-pooled).
Definition candidate_evaluator.hpp:86
std::function< void(const RETURNTYPE, const PSubset &, const DIMTYPE)> ResultCallback
Definition candidate_evaluator.hpp:94
Abstract class, defines interface for feature selection criterion classes.
Definition criterion.hpp:84
Nested class to hold feature/subset candidate info in the course of the ensemble voting process.
Definition seq_step_ensemble.hpp:188
const PSubset _sub
owned snapshot of the candidate subset (see the two constructors above)
Definition seq_step_ensemble.hpp:196
SubsetCandidate(const RETURNTYPE value, const PSubset sub, const DIMTYPE tfeature)
Constructs a candidate entry, taking a deep (owned) copy of sub – the caller's subset object is mutat...
Definition seq_step_ensemble.hpp:191
const DIMTYPE _tempfeature
copy of sub->getFirstTemporaryFeature() at the time this candidate was constructed – the feature this...
Definition seq_step_ensemble.hpp:197
RETURNTYPE _value
Dual-purpose: in a member's per-candidate list (_lists) this is the raw value that member criterion r...
Definition seq_step_ensemble.hpp:195
SubsetCandidate(const SubsetCandidate &fc)
Copy constructor – unlike the constructor above this SHARES (does not deep-copy) the source's _sub,...
Definition seq_step_ensemble.hpp:193
Implements voting ensemble selection step in sequential search type of methods to possibly improve ro...
Definition seq_step_ensemble.hpp:140
CANDIDATELISTS _lists
per-member ordered candidate lists, rebuilt by order_candidates() on every evaluate_candidates() call
Definition seq_step_ensemble.hpp:203
Sequential_Step_Ensemble(const PEnsembleCriteria ensemble, PEvaluatorEngine engine=PEvaluatorEngine())
Constructs the ensemble step over the given member criteria.
Definition seq_step_ensemble.hpp:155
virtual std::ostream & print(std::ostream &os) const override
Writes a human-readable identification of the step, incl. the engine's thread count (if threaded) and...
Definition seq_step_ensemble.hpp:162
std::shared_ptr< SubsetCandidate > PSubsetCandidate
shared pointer to a SubsetCandidate
Definition seq_step_ensemble.hpp:199
bool evaluate_candidates(RETURNTYPE &result, const PSubset sub, const PCriterion crit, const DIMTYPE _generalization_level=1, std::ostream &os=std::cout) override
chooses among subsets offered by sub->get*CandidateSubset()
Definition seq_step_ensemble.hpp:270
std::shared_ptr< SUBSET > PSubset
shared pointer to a feature subset
Definition seq_step_ensemble.hpp:147
PEvaluatorEngine _engine
candidate-evaluation engine driving the per-member candidate batches
Definition seq_step_ensemble.hpp:184
std::vector< PAbstractCriterion > PAbstractCriteria
the ordered collection of ensemble member criteria
Definition seq_step_ensemble.hpp:145
std::shared_ptr< Criterion< RETURNTYPE, SUBSET > > PAbstractCriterion
shared pointer to one ensemble member, held via the abstract Criterion base so unrelated (filter/wrap...
Definition seq_step_ensemble.hpp:144
Candidate_Evaluator< RETURNTYPE, DIMTYPE, SUBSET, Criterion< RETURNTYPE, SUBSET > > EVALUATORENGINE
typed on the abstract Criterion (the ensemble members' type)
Definition seq_step_ensemble.hpp:148
std::vector< PCANDIDATELIST > CANDIDATELISTS
one CANDIDATELIST per ensemble member, indexed the same as _ensemble
Definition seq_step_ensemble.hpp:202
Sequential_Step< RETURNTYPE, DIMTYPE, SUBSET, CRITERION > parent
base class alias
Definition seq_step_ensemble.hpp:142
std::shared_ptr< EVALUATORENGINE > PEvaluatorEngine
shared pointer to the candidate-evaluation engine (see candidate_evaluator.hpp)
Definition seq_step_ensemble.hpp:149
PEnsembleCriteria _ensemble
the ensemble member criteria, as supplied to the constructor
Definition seq_step_ensemble.hpp:185
bool track
cached parent::result_tracker_active() for the duration of the current evaluate_candidates() call
Definition seq_step_ensemble.hpp:213
FINALVALUES::iterator fiter
iterates _final, i.e. over candidate features and their tallied votes
Definition seq_step_ensemble.hpp:209
std::shared_ptr< CANDIDATELIST > PCANDIDATELIST
shared pointer to a CANDIDATELIST
Definition seq_step_ensemble.hpp:201
bool order_candidates(const PSubset sub)
Builds, for each ensemble member, the ordered (best-first) list of candidate subsets in _lists,...
Definition seq_step_ensemble.hpp:218
std::shared_ptr< PAbstractCriteria > PEnsembleCriteria
shared pointer to the ensemble member collection, as supplied to the constructor
Definition seq_step_ensemble.hpp:146
std::unique_ptr< SUBSET > tmp_step_sub
holds the winning candidate subset while evaluate_candidates() assembles it, before it is copied into...
Definition seq_step_ensemble.hpp:212
CANDIDATELIST::iterator iter
iterates one member's ordered candidate list (an element of _lists)
Definition seq_step_ensemble.hpp:208
FINALVALUES _final
the per-feature vote tally built by evaluate_candidates() from _lists; the entry with the lowest (bes...
Definition seq_step_ensemble.hpp:205
std::list< SubsetCandidate > CANDIDATELIST
one ensemble member's candidates, kept sorted best (highest _value) first by order_candidates()
Definition seq_step_ensemble.hpp:200
std::shared_ptr< CRITERION > PCriterion
shared pointer to the single criterion passed into evaluate_candidates() and used to (re-)score the w...
Definition seq_step_ensemble.hpp:143
std::map< DIMTYPE, PSubsetCandidate > FINALVALUES
maps each candidate feature to its tallied ensemble vote (see SubsetCandidate::_value); iteration ord...
Definition seq_step_ensemble.hpp:204
CANDIDATELISTS::iterator oiter
iterates _lists, i.e. over ensemble members
Definition seq_step_ensemble.hpp:207
bool output_normal() const
true unless output detail is SILENT
Definition seq_step.hpp:137
PResultTracker _tracker
the assigned result tracker, or null (see enable_result_tracking()/result_tracker_active())
Definition seq_step.hpp:140
bool output_detailed() const
true only at the DETAILED output level
Definition seq_step.hpp:138
bool result_tracker_active() const
true if a result tracker was assigned via enable_result_tracking() and not since disabled
Definition seq_step.hpp:133
FST4 specific error passing class.
Definition error.hpp:61
static void print(std::ostream &os, std::ostringstream &sos)
Writes sos's buffered content to os, serializing concurrent writers under FST_THREADED via a shared m...
Definition global.hpp:86
Defines interface for feature selection criterion classes.
FST4 specific error passing class.
The Feature Selection Toolbox 4 library: every library component – data access, criteria and classifi...
Definition data_accessor.hpp:80
void notify(const std::string msg)
Prints msg followed by a newline via syncout::print(); a no-op unless the preprocessor macro DEBUG is...
Definition global.hpp:112
Defines interface for implementations of one selection step in sequential search type of methods.