MCPcopy
hub / github.com/BrainJS/brain.js / train

Method train

src/cross-validate.js:81–159  ·  view source on GitHub ↗

* * @param {object} data * @param {object} trainOpts * @param {number} [k] * @returns { * { * avgs: { * error: number, * trainTime: number, * testTime: number, * iterations: number, * trainError: number * }, * stats: { *

(data, trainOpts = {}, k = 4)

Source from the content-addressed store, hash-verified

79 * }
80 */
81 train(data, trainOpts = {}, k = 4) {
82 if (data.length <= k) {
83 throw new Error(`Training set size is too small for ${ data.length } k folds of ${ k }`);
84 }
85 let size = data.length / k;
86
87 if (data.constructor === Array) {
88 this.shuffleArray(data);
89 } else {
90 let newData = {};
91 this.shuffleArray(Object.keys(data)).forEach((key) => {
92 newData[key] = data[key];
93 });
94 data = newData;
95 }
96
97 let avgs = {
98 error: 0,
99 trainTime: 0,
100 testTime: 0,
101 iterations: 0,
102 trainError: 0
103 };
104
105 let stats = {
106 truePos: 0,
107 trueNeg: 0,
108 falsePos: 0,
109 falseNeg: 0,
110 total: 0
111 };
112
113 let results = [];
114 let stat;
115 let sum;
116
117 for (let i = 0; i < k; i++) {
118 let dclone = data.slice(0);
119 let testSet = dclone.splice(i * size, size);
120 let trainSet = dclone;
121 let result = this.testPartition(trainOpts, trainSet, testSet);
122 for (stat in avgs) {
123 if (stat in avgs) {
124 sum = avgs[stat];
125 avgs[stat] = sum + result[stat];
126 }
127 }
128
129 for (stat in stats) {
130 if (stat in stats) {
131 sum = stats[stat];
132 stats[stat] = sum + result[stat];
133 }
134 }
135
136 results.push(result);
137 }
138

Callers 1

testPartitionMethod · 0.45

Calls 2

shuffleArrayMethod · 0.95
testPartitionMethod · 0.95

Tested by

no test coverage detected