panann
TrainingData.h
1 //-------------------------------------------------------------------------------------------------------
2 // Copyright (C) Taylor Woll and panann contributors. All rights reserved.
3 // Licensed under the MIT license. See LICENSE.txt file in the project root for
4 // full license information.
5 //-------------------------------------------------------------------------------------------------------
6 
7 #ifndef TRAININGDATA_H__
8 #define TRAININGDATA_H__
9 
10 #include <cstdint>
11 #include <vector>
12 
13 namespace panann {
14 
20 struct Example {
21  std::vector<double> input;
22  std::vector<double> output;
23 };
24 
30 class TrainingData : public std::vector<Example> {
31  public:
32  enum class ScalingAlgorithm : uint8_t {
36  None = 0,
37 
45  Simple,
46 
53 
60  };
61 
62  TrainingData() = default;
63  TrainingData(const TrainingData&) = delete;
64  TrainingData& operator=(const TrainingData&) = delete;
65  ~TrainingData() = default;
66 
73  void SetScalingAlgorithm(ScalingAlgorithm algorithm);
74  ScalingAlgorithm GetScalingAlgorithm() const;
75 
83  void SetSimpleScalingNewMin(double val);
84  double GetSimpleScalingNewMin() const;
85 
93  void SetSimpleScalingNewMax(double val);
94  double GetSimpleScalingNewMax() const;
95 
102  void SetStandardDeviationMultiplier(double val);
103  double GetStandardDeviationMultiplier() const;
104 
111  void SetUniformNormMultiplier(double val);
112  double GetUniformNormMultiplier() const;
113 
122  void Scale();
123 
131  void Descale();
132 
138  void ScaleInput(std::vector<double>* vec) const;
139 
145  void ScaleOutput(std::vector<double>* vec) const;
146 
152  void DescaleInput(std::vector<double>* vec) const;
153 
159  void DescaleOutput(std::vector<double>* vec) const;
160 
172  void FromSequentialData(const std::vector<double>& data, size_t input_length);
173 
174  protected:
175  void CalculateMinMax();
176  void CalculateMean();
177  void CalculateStdev();
178  void CalculateUniformNorm();
179 
180  void ScaleSimple();
181  void ScaleStandardDeviation();
182  void ScaleUniformNorm();
183 
184  void DescaleSimple();
185  void DescaleStandardDeviation();
186  void DescaleUniformNorm();
187 
188  private:
189  static constexpr double DefaultSimpleScalingNewMin = -1.0;
190  static constexpr double DefaultSimpleScalingNewMax = 1.0;
191  static constexpr double DefaultStandardDeviationMultiplier = 2.5;
192  static constexpr double DefaultUniformNormMultiplier = 1.0;
193 
194  double simple_scaling_new_min_ = DefaultSimpleScalingNewMin;
195  double simple_scaling_new_max_ = DefaultSimpleScalingNewMax;
196  double input_old_min_ = 0;
197  double input_old_max_ = 0;
198  double output_old_min_ = 0;
199  double output_old_max_ = 0;
200  double input_factor_ = 0;
201  double output_factor_ = 0;
202  double input_mean_ = 0;
203  double input_standard_deviation_ = 0;
204  double output_mean_ = 0;
205  double output_standard_deviation_ = 0;
206  double standard_deviation_multiplier_ = DefaultStandardDeviationMultiplier;
207  double input_uniform_norm_ = 0;
208  double output_uniform_norm_ = 0;
209  double uniform_norm_multiplier_ = DefaultUniformNormMultiplier;
210  ScalingAlgorithm scaling_algorithm_ = ScalingAlgorithm::Simple;
211 };
212 
213 } // namespace panann
214 
215 #endif // TRAININGDATA_H__
panann::TrainingData::DescaleOutput
void DescaleOutput(std::vector< double > *vec) const
Definition: TrainingData.cc:338
panann::TrainingData::ScaleInput
void ScaleInput(std::vector< double > *vec) const
Definition: TrainingData.cc:284
panann::TrainingData
Definition: TrainingData.h:30
panann::TrainingData::SetSimpleScalingNewMin
void SetSimpleScalingNewMin(double val)
Definition: TrainingData.cc:79
panann::TrainingData::SetStandardDeviationMultiplier
void SetStandardDeviationMultiplier(double val)
Definition: TrainingData.cc:95
panann::TrainingData::ScalingAlgorithm::UniformNorm
@ UniformNorm
panann::TrainingData::Scale
void Scale()
Definition: TrainingData.cc:254
panann::TrainingData::SetUniformNormMultiplier
void SetUniformNormMultiplier(double val)
Definition: TrainingData.cc:103
panann::TrainingData::Descale
void Descale()
Definition: TrainingData.cc:269
panann::TrainingData::ScalingAlgorithm::Simple
@ Simple
panann::TrainingData::ScalingAlgorithm
ScalingAlgorithm
Definition: TrainingData.h:32
panann::TrainingData::ScalingAlgorithm::None
@ None
panann::TrainingData::DescaleInput
void DescaleInput(std::vector< double > *vec) const
Definition: TrainingData.cc:320
panann::TrainingData::SetSimpleScalingNewMax
void SetSimpleScalingNewMax(double val)
Definition: TrainingData.cc:87
panann::TrainingData::ScalingAlgorithm::StandardDeviation
@ StandardDeviation
panann::TrainingData::ScaleOutput
void ScaleOutput(std::vector< double > *vec) const
Definition: TrainingData.cc:302
panann::Example
Definition: TrainingData.h:20
panann::TrainingData::SetScalingAlgorithm
void SetScalingAlgorithm(ScalingAlgorithm algorithm)
Definition: TrainingData.cc:71
panann::TrainingData::FromSequentialData
void FromSequentialData(const std::vector< double > &data, size_t input_length)
Definition: TrainingData.cc:356