-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFeatureScaler.cpp
More file actions
65 lines (54 loc) · 1.96 KB
/
Copy pathFeatureScaler.cpp
File metadata and controls
65 lines (54 loc) · 1.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include "FeatureScaler.h"
FeatureScaler::FeatureScaler(const Data& data) {
inputMin = data[0].inputs;
inputMax = data[0].inputs;
outputMin = data[0].expectedOutputs;
outputMax = data[0].expectedOutputs;
for (auto& point : data) {
// handle inputs
for (int i = 0; i < point.inputs.size(); i++) {
if (point.inputs[i] < inputMin[i]) inputMin[i] = point.inputs[i];
if (point.inputs[i] > inputMax[i]) inputMax[i] = point.inputs[i];
}
// handle outputs
for (int i = 0; i < point.expectedOutputs.size(); i++) {
if (point.expectedOutputs[i] < outputMin[i]) outputMin[i] = point.expectedOutputs[i];
if (point.expectedOutputs[i] > outputMax[i]) outputMax[i] = point.expectedOutputs[i];
}
}
}
Data FeatureScaler::scaleData(const Data& data) {
Data scaled;
for (auto& point : data) {
scaled.push_back(DataPoint{scaleInput(point.inputs), scaleOutput(point.expectedOutputs)});
}
return scaled;
}
Vector FeatureScaler::scaleInput(Vector input) {
Vector scaled;
for (int i = 0; i < input.size(); i++) {
scaled.push_back(scaleNumber(inputMin[i], inputMax[i], input[i]));
}
return scaled;
}
Vector FeatureScaler::scaleOutput(Vector output) {
Vector scaled;
for (int i = 0; i < output.size(); i++) {
scaled.push_back(scaleNumber(outputMin[i], outputMax[i], output[i]));
}
return scaled;
}
Vector FeatureScaler::unscaleOutput(Vector output) {
Vector unscaled;
for (int i = 0; i < output.size(); i++) {
unscaled.push_back(unscaleNumber(outputMin[i], outputMax[i], output[i]));
}
return unscaled;
}
std::vector<Vector> FeatureScaler::unscaleManyOutputs(std::vector<Vector> output) {
std::vector<Vector> unscaled;
for (auto& o : output) unscaled.push_back(unscaleOutput(o));
return unscaled;
}
double FeatureScaler::scaleNumber(double min, double max, double x) { return (x - min) / (max - min); }
double FeatureScaler::unscaleNumber(double min, double max, double x) { return x * (max - min) + min; }