Feature Selection Toolbox FST4
UTIA · Czech Academy of Sciences
Loading...
Searching...
No Matches
criterion_negative.hpp
Go to the documentation of this file.
1#ifndef FSTCRITERIONNEGATIVE_H
2#define FSTCRITERIONNEGATIVE_H
3 /*
27=========================================================================
28Copyright and license:
29 * FST4 software (with the exception of any bundled or externally linked
30 third-party components) is Copyright (C) 2000-present Institute of
31 Information Theory and Automation of the Czech Academy of Sciences (UTIA).
32 * FST4 is free software: you can redistribute it and/or modify it under
33 the terms of the GNU Affero General Public License as published by the
34 Free Software Foundation, version 3. The full text of the license is in
35 the file LICENSE in the distribution root and at
36 https://www.gnu.org/licenses/agpl-3.0.html.
37 * FST4 is distributed in the hope that it will be useful, but WITHOUT ANY
38 WARRANTY; without even the implied warranty of MERCHANTABILITY or
39 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
40 License for more details.
41 * Closed-source use without the AGPL's copyleft obligations requires a
42 commercial license from UTIA; in case of interest write to
43 utia@utia.cas.cz. LICENSING.md in the distribution root explains both
44 options, the contributor license agreement that every contribution
45 requires, and the contacts (technical questions and pull requests:
46 somol@utia.cas.cz, with "FST" in the subject line).
47========================================================================== */
48
49#include <memory>
50#include <cassert>
51#include <iostream>
52#include "error.hpp"
53#include "global.hpp"
54#include "criterion.hpp"
55
56/*============== Template parameter type naming conventions ==============
57--------- Numeric types: -------------------------------------------------
58DATATYPE - data sample values - usually real numbers (but may be integers
59 in text processing etc.)
60REALTYPE - must be real numbers - for representing intermediate results of
61 calculations like mean, covariance etc.
62IDXTYPE - index values for enumeration of data samples - (nonnegative) integers,
63 extent depends on numbers of samples in data
64DIMTYPE - index values for enumeration of features (dimensions), or classes (not
65 class sizes) - (nonnegative) integers, usually lower extent than IDXTYPE,
66 but be aware of expressions like _classes*_features*_features !
67 in linearized representations of feature matrices for all classes
68BINTYPE - feature selection marker type - represents ca. <10 different feature
69 states (selected, deselected, sel./desel. temporarily 1st nested loop, 2nd...)
70RETURNTYPE - criterion value: real value, but may be extended in future to support
71 multiple values
72--------- Class types: ---------------------------------------------------
73SUBSET - class of class type Subset
74CLASSIFIER - class implementing interface defined in abstract class Classifier
75EVALUATOR - class implementing interface defined in abstract class Sequential_Step
76DISTANCE - class implementing interface defined in abstract class Distance
77DATAACCESSOR - class implementing interface defined in abstract class Data_Accessor
78INTERVALCONTAINER - class of class type Data_Intervaller
79CONTAINER - STL container of class type Data_Interval
80========================================================================== */
81
82namespace FST {
83
98template<class CRITERION, class RETURNTYPE, class SUBSET>
99class Criterion_Negative : public Clonable_Impl<Criterion_Negative<CRITERION,RETURNTYPE,SUBSET>,Criterion<RETURNTYPE,SUBSET> > { // adapter class
100public:
102 typedef std::shared_ptr<CRITERION> PCriterion;
103 typedef std::shared_ptr<SUBSET> PSubset;
105 Criterion_Negative(const PCriterion crit): _crit(crit) {notify("Criterion_Negative constructor.");}
106 virtual ~Criterion_Negative() {notify("Criterion_Negative destructor.");}
107
108 virtual bool evaluate(RETURNTYPE &result, const PSubset sub)
109 override {
110 assert(sub);
111 assert(_crit);
112 RETURNTYPE _result;
113 if(!_crit->evaluate(_result,sub)) return false;
114 result=-_result;
115 notify("Criterion_Negative result=",result,".");
116 return true;
117 }
118
119
120
121 virtual std::ostream& print(std::ostream& os) const override {os << "Criterion_Negative()"; return os;}
122private:
123 friend parent_impl;
127protected:
128};
129
130template<class CRITERION, class RETURNTYPE, class SUBSET>
132{
133 notify("Criterion_Negative copy-constructor.");
134 // deep-copies the wrapped criterion, so a clone shares nothing with its origin;
135 // the unique_ptr returned by clone_unique() converts into the shared_ptr member
136 if(cn._crit) _crit=clone_unique(*cn._crit);
137}
138
139
140
141} // namespace
142#endif // FSTCRITERIONNEGATIVE_H ///:~
CRTP mixin implementing the Clonable protocol for a concrete class.
Definition clonable.hpp:184
Returns the negative of another Criterion's result.
Definition criterion_negative.hpp:99
std::shared_ptr< CRITERION > PCriterion
shared pointer to the wrapped criterion whose result is negated
Definition criterion_negative.hpp:102
virtual std::ostream & print(std::ostream &os) const override
writes a human-readable identification of the object; base default writes nothing
Definition criterion_negative.hpp:121
Clonable_Impl< Criterion_Negative, Criterion< RETURNTYPE, SUBSET > > parent_impl
implements clone(); sharing/stateless_clone throw in Criterion
Definition criterion_negative.hpp:101
PCriterion _crit
the wrapped criterion whose evaluate() result is negated
Definition criterion_negative.hpp:126
Criterion_Negative(const PCriterion crit)
Constructs the adapter around crit, the criterion whose evaluate() result is negated.
Definition criterion_negative.hpp:105
std::shared_ptr< SUBSET > PSubset
Definition criterion_negative.hpp:103
virtual bool evaluate(RETURNTYPE &result, const PSubset sub) override
Scores the given feature subset; higher is better (FST4 searches maximize).
Definition criterion_negative.hpp:108
Defines interface for feature selection criterion classes.
FST4 specific error passing class.
Global definitions.
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
std::unique_ptr< T > clone_unique(const T &src)
Definition clonable.hpp:234
Copyright © 2000–present ÚTIA, Institute of Information Theory and Automation of the Czech Academy of Sciences · Contacts · This site sets no cookies and uses no analytics.