-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathUtility.cpp
More file actions
83 lines (68 loc) · 1.89 KB
/
Copy pathUtility.cpp
File metadata and controls
83 lines (68 loc) · 1.89 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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <random>
#include "Utility.h"
void printVector(Vector v, bool endl) {
std::cout << "[";
for (int i = 0; i < v.size(); i++) {
if (i != 0) std::cout << ", ";
std::cout << std::setw(10) << v[i];
}
std::cout << "]";
if (endl) std::cout << std::endl;
}
void printMatrix(Matrix m, bool endl) {
std::cout << "[";
for (int i = 0; i < m.size(); i++) {
if (i != 0) std::cout << " ";
printVector(m[i], i != m.size() - 1);
}
std::cout << "]";
if (endl) std::cout << std::endl;
}
void printDataPoint(DataPoint p) {
printVector(p.inputs, false);
std::cout << " ";
printVector(p.inputs, true);
}
void printData(Data d) {
for (auto& p : d) printDataPoint(p);
}
Data splitInputOutput(Matrix& data, std::vector<int> outputCols) {
if (data.size() == 0) {
return Data();
}
Data newData;
std::vector<bool> isOutput(data[0].size());
for (int i = 0; i < isOutput.size(); i++) {
isOutput[i] = (std::find(outputCols.begin(), outputCols.end(), i) != outputCols.end());
}
for (auto& row : data) {
Vector inputRow, outputRow;
for (int i = 0; i < row.size(); i++) {
if (isOutput[i])
outputRow.push_back(row[i]);
else
inputRow.push_back(row[i]);
}
newData.push_back(DataPoint{inputRow, outputRow});
}
return newData;
}
std::pair<Data, Data> splitTrainTest(Data& data, double testRatio) {
Data train, test;
std::vector<int> indices(data.size());
for (int i = 0; i < indices.size(); i++) indices[i] = i;
std::random_device rd;
std::mt19937 g(rd());
std::shuffle(indices.begin(), indices.end(), g);
int numTest = data.size() * testRatio;
for (int i = 0; i < numTest; i++) {
test.push_back(data[indices[i]]);
}
for (int i = numTest; i < data.size(); i++) {
train.push_back(data[indices[i]]);
}
return std::pair<Data, Data>(train, test);
}