21 #include <unordered_map>
57 std::unordered_map<SCALER_PARAMETER, std::vector<double>>
parameters;
74 virtual std::vector<T>
scale(
const std::vector<T>& input) = 0;
83 virtual std::vector<T>
descale(
const std::vector<T>& input) = 0;
107 static std::unique_ptr<Scaler<T>>
create_scaler(
const std::shared_ptr<const ScalerData> scalerData);
127 std::vector<T>
scale(
const std::vector<T>& input)
override {
return input; };
136 std::vector<T>
descale(
const std::vector<T>& input)
override {
return input; };
144 class MinMaxScaler :
public Scaler<T> {
162 std::vector<T>
scale(
const std::vector<T>& input)
override;
171 std::vector<T>
descale(
const std::vector<T>& input)
override;
181 std::vector<double>
_mean;
193 std::vector<T>
scale(
const std::vector<T>& input)
override;
202 std::vector<T>
descale(
const std::vector<T>& input)
override;
210 switch (scalerData->type) {
212 return std::make_unique<IdentityScaler<T>>();
218 throw MelonException(
" Error while creating sclaler: Invalid scaler type.");
221 catch (
const std::out_of_range& e) {
222 throw MelonException(
" Error while creating scaler: Scaler data object is missing a parameter.", e);
231 std::vector<T> output(input.size());
232 for (
size_t i = 0; i < input.size(); ++i) {
233 output.at(i) = _scaledLowerBounds.at(i) + (input.at(i) - _lowerBounds.at(i)) / (_upperBounds.at(i) - _lowerBounds.at(i)) * (_scaledUpperBounds.at(i) - _scaledLowerBounds.at(i));
244 std::vector<T> output(input.size());
245 for (
size_t i = 0; i < input.size(); ++i) {
246 output.at(i) = _lowerBounds.at(i) + (input.at(i) - _scaledLowerBounds.at(i)) / (_scaledUpperBounds.at(i) - _scaledLowerBounds.at(i)) * (_upperBounds.at(i) - _lowerBounds.at(i));
257 std::vector<T> output(input.size());
258 for (
size_t i = 0; i < input.size(); ++i) {
259 output.at(i) = (input.at(i) - _mean.at(i)) / _stdDev.at(i);
272 std::vector<T> output(input.size());
273 for (
size_t i = 0; i < input.size(); ++i) {
274 output.at(i) = _stdDev.at(i)*input.at(i) + _mean.at(i);