Feature Selection Toolbox FST4
UTIA · Czech Academy of Sciences
Loading...
Searching...
No Matches
data_scaler.hpp
Go to the documentation of this file.
1#ifndef FSTDATASCALER_H
2#define FSTDATASCALER_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 <iostream>
50#include "error.hpp"
51#include "global.hpp"
52
53/*============== Template parameter type naming conventions ==============
54--------- Numeric types: -------------------------------------------------
55DATATYPE - data sample values - usually real numbers (but may be integers
56 in text processing etc.)
57REALTYPE - must be real numbers - for representing intermediate results of
58 calculations like mean, covariance etc.
59IDXTYPE - index values for enumeration of data samples - (nonnegative) integers,
60 extent depends on numbers of samples in data
61DIMTYPE - index values for enumeration of features (dimensions), or classes (not
62 class sizes) - (nonnegative) integers, usually lower extent than IDXTYPE,
63 but be aware of expressions like _classes*_features*_features !
64 in linearized representations of feature matrices for all classes
65BINTYPE - feature selection marker type - represents ca. <10 different feature
66 states (selected, deselected, sel./desel. temporarily 1st nested loop, 2nd...)
67RETURNTYPE - criterion value: real value, but may be extended in future to support
68 multiple values
69--------- Class types: ---------------------------------------------------
70SUBSET - class of class type Subset
71CLASSIFIER - class implementing interface defined in abstract class Classifier
72EVALUATOR - class implementing interface defined in abstract class Sequential_Step
73DISTANCE - class implementing interface defined in abstract class Distance
74DATAACCESSOR - class implementing interface defined in abstract class Data_Accessor
75INTERVALCONTAINER - class of class type Data_Intervaller
76CONTAINER - STL container of class type Data_Interval
77========================================================================== */
78
79namespace FST {
80
81// NOTE: this implementation supports only scaling of one-dimensional data,
82// thus is applicable only to scale feature values individually
83// and independently for each feature
84
85template <typename DATATYPE>
86class Data_Scaler;
87
88template <typename DATATYPE>
89std::ostream& operator<<(std::ostream& os, const Data_Scaler<DATATYPE>& ds);
90
92template<typename DATATYPE>
95 friend std::ostream& operator<< <>(std::ostream& os, const Data_Scaler<DATATYPE>& ds);
96public:
97 Data_Scaler(const int dims=1) {notify("Data_Scaler constructor.");}
102 Data_Scaler(const Data_Scaler &ds) {notify("Data_Scaler copy constructor.");}
103 virtual ~Data_Scaler() {notify("Data_Scaler destructor.");}
112 virtual int learn_loops() const =0;
115 virtual bool startFirstLoop() =0;
118 virtual bool startNextLoop() =0;
121 virtual void learn(const DATATYPE& value) =0;
122
123 virtual DATATYPE scale(const DATATYPE& value) =0;
124 virtual void scale_inplace(DATATYPE& value) =0;
125
131 virtual Data_Scaler* duplicate() const {throw fst_error("Data_Scaler::duplicate() not implemented by this scaler; required for per-split scaling with clones.");}
132
133 virtual std::ostream& print(std::ostream& os) const {return os;}
134};
135
137template<typename DATATYPE>
138std::ostream& operator<<(std::ostream& os, const Data_Scaler<DATATYPE>& ds) {
139 return ds.print(os);
140}
141
142} // namespace
143#endif // FSTDATASCALER_H ///:~
abstract class, defines interface for data scaling implementations (for use in data accessors)
Definition data_scaler.hpp:93
Data_Scaler(const Data_Scaler &ds)
Copy constructor. The base class carries no state of its own; the concrete scalers' copy constructors...
Definition data_scaler.hpp:102
virtual DATATYPE scale(const DATATYPE &value)=0
return the scaled value
virtual bool startFirstLoop()=0
virtual std::ostream & print(std::ostream &os) const
writes a human-readable identification of the scaler and its configuration; base default writes nothi...
Definition data_scaler.hpp:133
virtual bool startNextLoop()=0
virtual void scale_inplace(DATATYPE &value)=0
scale the value in place
virtual Data_Scaler * duplicate() const
Definition data_scaler.hpp:131
virtual int learn_loops() const =0
Number of full data passes learn() needs before scale() is valid. 1 for scalers whose statistic is a ...
virtual void learn(const DATATYPE &value)=0
Data_Scaler(const int dims=1)
Definition data_scaler.hpp:97
FST4 specific error passing class.
Definition error.hpp:61
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::ostream & operator<<(std::ostream &os, const Data_Intervaller< CONTAINER, IDXTYPE > &ia)
Streams every contained interval as "si:<startidx>, c:<count>" lines to os.
Definition data_intervaller.hpp:152
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.