1#ifndef FSTSEARCHSEQSTEPHYBRID_H
2#define FSTSEARCHSEQSTEPHYBRID_H
116template<
class RETURNTYPE,
typename DIMTYPE,
class SUBSET,
class CRITERION,
class FILTERCRITERION>
119 typedef Sequential_Step<RETURNTYPE,DIMTYPE,SUBSET,CRITERION>
parent;
129 Sequential_Step_Hybrid(
const PFilterCriterion filtercrit,
const DIMTYPE keep_perc,
const DIMTYPE keep_max=1000,
PEvaluatorEngine engine=
PEvaluatorEngine()):Sequential_Step<RETURNTYPE,DIMTYPE,SUBSET,CRITERION>(),
_engine(engine),
track(false) {assert(keep_perc<=100); assert(keep_max>0); assert(filtercrit);
_filtercrit=filtercrit;
_keep_perc=keep_perc;
_keep_max=keep_max;
_listsize=0;
if(!
_engine)
_engine.reset(
new Candidate_Evaluator_Sequential<RETURNTYPE,DIMTYPE,SUBSET,CRITERION>());
notify(
"Sequential_Step_Hybrid constructor.");}
139 virtual std::ostream&
print(std::ostream& os)
const override;
160 typename CANDIDATELIST::iterator
iter;
166template<
class RETURNTYPE,
typename DIMTYPE,
class SUBSET,
class CRITERION,
class FILTERCRITERION>
176template<
class RETURNTYPE,
typename DIMTYPE,
class SUBSET,
class CRITERION,
class FILTERCRITERION>
183 assert(sub->get_d()!=0);
195template<
class RETURNTYPE,
typename DIMTYPE,
class SUBSET,
class CRITERION,
class FILTERCRITERION>
202 assert(_generalization_level>=1 && _generalization_level<=sub->get_n());
207 _listsize=DIMTYPE(((
double)
_keep_perc/100.0)*sub->getNoOfCandidateSubsets(_generalization_level,
false));
212 bool b=sub->getFirstCandidateSubset(_generalization_level,
false);
if(!b)
return false;
214 b=sub->getNextCandidateSubset();
217 b=sub->getNextCandidateSubset();
221 std::ostringstream sos;
222 sos <<
"candidate list of "<<
_filterlist.size() <<
":" << std::endl;
224 sos << std::endl << std::flush;
230template<
class RETURNTYPE,
typename DIMTYPE,
class SUBSET,
class CRITERION,
class FILTERCRITERION>
238 assert(_generalization_level>=1 && _generalization_level<=sub->get_n());
247 sub->stateless_copy( *((
_filterlist.begin())->_sub) );
248 assert(sub->get_d()!=0);
249 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;}
262 on_result=[tracker](
const RETURNTYPE val,
const PSubset &csub,
const DIMTYPE) {tracker->add(val,csub);};
269 DIMTYPE dummyfeature;
270 if(!
_engine->getBestResult(result,psub,dummyfeature)) {
if(
parent::output_normal()) {std::ostringstream sos; sos <<
"FAILURE crit->eval() (no candidate evaluated)" << std::endl << std::endl << std::flush;
syncout::print(os,sos);}
return false;}
272 sub->stateless_copy(*psub);
273 assert(sub->get_d()!=0);
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
fired once per evaluated batch candidate: (criterion value, candidate, feature tag as passed to add_c...
Definition candidate_evaluator.hpp:94
Nested class to hold [Subset,criterion value] pair in the course of hybrid feature candidate evaluati...
Definition seq_step_hybrid.hpp:150
const PSubset _sub
an owned copy of the candidate subset (independent of the caller's subset instance)
Definition seq_step_hybrid.hpp:154
SubsetCandidate(const RETURNTYPE value, const PSubset sub)
stores value together with an owned copy of sub
Definition seq_step_hybrid.hpp:152
const RETURNTYPE _value
the filter criterion value of _sub
Definition seq_step_hybrid.hpp:153
Implements hybrid selection step in sequential search type of methods.
Definition seq_step_hybrid.hpp:117
bool track
Definition seq_step_hybrid.hpp:163
Candidate_Evaluator< RETURNTYPE, DIMTYPE, SUBSET, CRITERION > EVALUATORENGINE
Definition seq_step_hybrid.hpp:123
std::shared_ptr< SUBSET > PSubset
Definition seq_step_hybrid.hpp:122
DIMTYPE _keep_perc
Definition seq_step_hybrid.hpp:146
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_hybrid.hpp:231
bool filter_candidates(const PSubset sub, const DIMTYPE _generalization_level, std::ostream &os)
evaluates every offered candidate with _filtercrit and keeps the top _listsize in _filterlist,...
Definition seq_step_hybrid.hpp:196
CANDIDATELIST _filterlist
Definition seq_step_hybrid.hpp:159
PFilterCriterion _filtercrit
Definition seq_step_hybrid.hpp:145
std::shared_ptr< CRITERION > PCriterion
Definition seq_step_hybrid.hpp:121
DIMTYPE get_prefiltering_max() const
the currently configured keep_max
Definition seq_step_hybrid.hpp:134
DIMTYPE _listsize
Definition seq_step_hybrid.hpp:158
Sequential_Step_Hybrid(const PFilterCriterion filtercrit, const DIMTYPE keep_perc, const DIMTYPE keep_max=1000, PEvaluatorEngine engine=PEvaluatorEngine())
Definition seq_step_hybrid.hpp:129
PEvaluatorEngine _engine
Definition seq_step_hybrid.hpp:144
DIMTYPE get_prefiltering_perc() const
the currently configured keep_perc
Definition seq_step_hybrid.hpp:133
CANDIDATELIST::iterator iter
Definition seq_step_hybrid.hpp:160
virtual std::ostream & print(std::ostream &os) const override
writes a human-readable identification of the step, its prefiltering settings, filter criterion and (...
Definition seq_step_hybrid.hpp:167
std::shared_ptr< CRITERION > PFilterCriterion
Definition seq_step_hybrid.hpp:120
bool test_candidate(const PSubset sub)
evaluates one candidate with _filtercrit and inserts it into _filterlist in sorted position,...
Definition seq_step_hybrid.hpp:177
Sequential_Step< RETURNTYPE, DIMTYPE, SUBSET, CRITERION > parent
Definition seq_step_hybrid.hpp:119
DIMTYPE _keep_max
Definition seq_step_hybrid.hpp:147
std::list< SubsetCandidate > CANDIDATELIST
Definition seq_step_hybrid.hpp:156
std::shared_ptr< EVALUATORENGINE > PEvaluatorEngine
Definition seq_step_hybrid.hpp:124
void set_prefiltering_limits(const DIMTYPE keep_perc, const DIMTYPE keep_max)
reconfigures the pre-filtering percentage/cap (see the constructor parameters)
Definition seq_step_hybrid.hpp:132
bool output_normal() const
true unless output detail is SILENT
Definition seq_step.hpp:137
std::shared_ptr< Result_Tracker< RETURNTYPE, SUBSET > > PResultTracker
shared pointer to the result tracker enabled via enable_result_tracking()
Definition seq_step.hpp:103
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
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
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.