├── diagrams
├── 10
│ ├── .gitkeep
│ └── diagrams.xml
├── 11
│ └── .gitkeep
├── 12
│ └── .gitkeep
├── 13
│ └── .gitkeep
├── 01
│ ├── .gitkeep
│ └── diagrams.xml
├── 02
│ └── .gitkeep
├── 03
│ ├── .gitkeep
│ └── diagrams.xml
├── 00
│ ├── .gitkeep
│ └── diagrams.xml
├── 04
│ └── .gitkeep
├── 05
│ └── .gitkeep
├── 06
│ ├── .gitkeep
│ └── diagrams.xml
├── 07
│ └── .gitkeep
├── 08
│ └── .gitkeep
└── 09
│ ├── .gitkeep
│ └── diagrams.xml
├── .gitignore
├── MLKits
├── .gitignore
├── regressions
│ ├── plot.png
│ ├── linear-regression
│ │ ├── plot.png
│ │ ├── index.js
│ │ └── linear-regression.js
│ ├── logistic-regression
│ │ ├── plot.png
│ │ ├── index.js
│ │ └── logistic-regression.js
│ ├── multinominal-logistic-regression
│ │ ├── plot.png
│ │ ├── index.js
│ │ └── logistic-regression.js
│ ├── package.json
│ ├── load-csv.js
│ ├── package-lock.json
│ └── data
│ │ └── cars.csv
├── knn-tf
│ ├── package.json
│ ├── index.js
│ ├── load-csv.js
│ └── package-lock.json
├── README.md
└── plinko
│ ├── lib
│ ├── style.css
│ └── index.js
│ ├── score.js
│ └── index.html
├── README.md
└── loadcsv
├── data.csv
├── package.json
├── package-lock.json
└── load-csv.js
/diagrams/01/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/diagrams/02/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/diagrams/03/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/diagrams/00/.gitkeep:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/diagrams/04/.gitkeep:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/diagrams/05/.gitkeep:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/diagrams/06/.gitkeep:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/diagrams/07/.gitkeep:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/diagrams/08/.gitkeep:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/diagrams/09/.gitkeep:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/diagrams/10/.gitkeep:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/diagrams/11/.gitkeep:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/diagrams/12/.gitkeep:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/diagrams/13/.gitkeep:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | .DS_Store
3 |
--------------------------------------------------------------------------------
/MLKits/.gitignore:
--------------------------------------------------------------------------------
1 | plinko_analysis
2 | .DS_Store
3 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # MLCasts
2 | Completed Code for a course on Machine Learning hosted on Udemy
3 |
--------------------------------------------------------------------------------
/loadcsv/data.csv:
--------------------------------------------------------------------------------
1 | passed,id,height,value,,,
2 | TRUE,0,10,20,,,
3 | FALSE,1,11,21,,,
4 | TRUE,2,12,22,,,
--------------------------------------------------------------------------------
/MLKits/regressions/plot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/StephenGrider/MLCasts/master/MLKits/regressions/plot.png
--------------------------------------------------------------------------------
/MLKits/regressions/linear-regression/plot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/StephenGrider/MLCasts/master/MLKits/regressions/linear-regression/plot.png
--------------------------------------------------------------------------------
/MLKits/regressions/logistic-regression/plot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/StephenGrider/MLCasts/master/MLKits/regressions/logistic-regression/plot.png
--------------------------------------------------------------------------------
/MLKits/regressions/multinominal-logistic-regression/plot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/StephenGrider/MLCasts/master/MLKits/regressions/multinominal-logistic-regression/plot.png
--------------------------------------------------------------------------------
/loadcsv/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "loadcsv",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "author": "",
10 | "license": "ISC",
11 | "dependencies": {
12 | "lodash": "^4.17.11",
13 | "shuffle-seed": "^1.1.6"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/MLKits/knn-tf/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "knn-tf",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "author": "",
10 | "license": "ISC",
11 | "dependencies": {
12 | "@tensorflow/tfjs-node": "^0.1.17",
13 | "lodash": "^4.17.11",
14 | "shuffle-seed": "^1.1.6"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/MLKits/regressions/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "linear_regression",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {},
7 | "author": "",
8 | "license": "ISC",
9 | "dependencies": {
10 | "@tensorflow/tfjs-node": "^0.1.17",
11 | "lodash": "^4.17.11",
12 | "mnist-data": "^1.2.6",
13 | "node-remote-plot": "^1.2.0",
14 | "shuffle-seed": "^1.1.6"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/MLKits/README.md:
--------------------------------------------------------------------------------
1 | # ML Kits
2 |
3 | Starter projects for learning about Machine Learning.
4 |
5 | ## Downloading
6 |
7 | There are two ways to download this repository - either as a zip or by using git.
8 |
9 | ### Zip Download
10 |
11 | To download this project as a zip file, find the green 'Clone or Download' button on the top right hand side. Click that button, then download this project as a zip file.
12 |
13 | Once downloaded extract the zip file to your local computer.
14 |
15 | ### Git Download
16 |
17 | To download this project using git, run the following command at your terminal:
18 |
19 | ```
20 | git clone https://github.com/StephenGrider/MLKits.git
21 | ```
22 |
--------------------------------------------------------------------------------
/MLKits/regressions/linear-regression/index.js:
--------------------------------------------------------------------------------
1 | require('@tensorflow/tfjs-node');
2 | const tf = require('@tensorflow/tfjs');
3 | const loadCSV = require('../load-csv');
4 | const LinearRegression = require('./linear-regression');
5 | const plot = require('node-remote-plot');
6 |
7 | let { features, labels, testFeatures, testLabels } = loadCSV(
8 | '../data/cars.csv',
9 | {
10 | shuffle: true,
11 | splitTest: 50,
12 | dataColumns: ['horsepower', 'weight', 'displacement'],
13 | labelColumns: ['mpg']
14 | }
15 | );
16 |
17 | const regression = new LinearRegression(features, labels, {
18 | learningRate: 0.1,
19 | iterations: 3,
20 | batchSize: 10
21 | });
22 |
23 | regression.train();
24 | const r2 = regression.test(testFeatures, testLabels);
25 |
26 | plot({
27 | x: regression.mseHistory.reverse(),
28 | xLabel: 'Iteration #',
29 | yLabel: 'Mean Squared Error'
30 | });
31 |
32 | console.log('R2 is', r2);
33 |
34 | regression.predict([[120, 2, 380]]).print();
35 |
--------------------------------------------------------------------------------
/loadcsv/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "loadcsv",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "lodash": {
8 | "version": "4.17.11",
9 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
10 | "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
11 | },
12 | "seedrandom": {
13 | "version": "2.4.4",
14 | "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.4.tgz",
15 | "integrity": "sha512-9A+PDmgm+2du77B5i0Ip2cxOqqHjgNxnBgglxLcX78A2D6c2rTo61z4jnVABpF4cKeDMDG+cmXXvdnqse2VqMA=="
16 | },
17 | "shuffle-seed": {
18 | "version": "1.1.6",
19 | "resolved": "https://registry.npmjs.org/shuffle-seed/-/shuffle-seed-1.1.6.tgz",
20 | "integrity": "sha1-UzwSaDurO0+j6HUfxOViFGdEJgs=",
21 | "requires": {
22 | "seedrandom": "2.4.4"
23 | }
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/MLKits/regressions/logistic-regression/index.js:
--------------------------------------------------------------------------------
1 | require('@tensorflow/tfjs-node');
2 | const tf = require('@tensorflow/tfjs');
3 | const loadCSV = require('../load-csv');
4 | const LogisticRegression = require('./logistic-regression');
5 | const plot = require('node-remote-plot');
6 |
7 | const { features, labels, testFeatures, testLabels } = loadCSV(
8 | '../data/cars.csv',
9 | {
10 | dataColumns: ['horsepower', 'displacement', 'weight'],
11 | labelColumns: ['passedemissions'],
12 | shuffle: true,
13 | splitTest: 50,
14 | converters: {
15 | passedemissions: value => {
16 | return value === 'TRUE' ? 1 : 0;
17 | }
18 | }
19 | }
20 | );
21 |
22 | const regression = new LogisticRegression(features, labels, {
23 | learningRate: 0.5,
24 | iterations: 100,
25 | batchSize: 10
26 | });
27 |
28 | regression.train();
29 |
30 | console.log(regression.test(testFeatures, testLabels));
31 |
32 | plot({
33 | x: regression.costHistory.reverse()
34 | });
35 |
--------------------------------------------------------------------------------
/MLKits/plinko/lib/style.css:
--------------------------------------------------------------------------------
1 | .target-wrapper {
2 | display: flex;
3 | justify-content: center;
4 | align-items: center;
5 | margin-bottom: 10px;
6 | flex-direction: column;
7 | position: relative;
8 | }
9 |
10 | canvas {
11 | border: 1px solid gray;
12 | }
13 |
14 | .bucket-labels {
15 | display: flex;
16 | max-width: 795px;
17 | justify-content: space-around;
18 | }
19 |
20 | .bucket-labels > div {
21 | z-index: 10;
22 | margin-top: -67px;
23 | min-width: 79.5px;
24 | text-align: center;
25 | }
26 |
27 | .bucket-labels .score {
28 | font-weight: bolder;
29 | font-size: 20px;
30 | }
31 |
32 | .wrapper {
33 | margin: 20px;
34 | }
35 |
36 | .x-axis {
37 | position: absolute;
38 | z-index: 10;
39 | top: 0px;
40 | left: 10px;
41 | }
42 |
43 | /* .x-axis span.neck {
44 | display: inline-block;
45 | min-width: 200px;
46 | border-bottom: 1px solid black;
47 | position: relative;
48 | bottom: 6px;
49 | right: -9px;
50 | }
51 |
52 | .x-axis span.head {
53 | font-size: 18px;
54 | } */
55 |
56 | .x-position {
57 | position: absolute;
58 | right: 10px;
59 | }
60 |
61 | .target-wrapper > div {
62 | position: relative;
63 | }
64 |
--------------------------------------------------------------------------------
/MLKits/knn-tf/index.js:
--------------------------------------------------------------------------------
1 | require('@tensorflow/tfjs-node');
2 | const tf = require('@tensorflow/tfjs');
3 | const loadCSV = require('./load-csv');
4 |
5 | function knn(features, labels, predictionPoint, k) {
6 | const { mean, variance } = tf.moments(features, 0);
7 |
8 | const scaledPrediction = predictionPoint.sub(mean).div(variance.pow(0.5));
9 |
10 | return (
11 | features
12 | .sub(mean)
13 | .div(variance.pow(0.5))
14 | .sub(scaledPrediction)
15 | .pow(2)
16 | .sum(1)
17 | .pow(0.5)
18 | .expandDims(1)
19 | .concat(labels, 1)
20 | .unstack()
21 | .sort((a, b) => (a.get(0) > b.get(0) ? 1 : -1))
22 | .slice(0, k)
23 | .reduce((acc, pair) => acc + pair.get(1), 0) / k
24 | );
25 | }
26 |
27 | let { features, labels, testFeatures, testLabels } = loadCSV(
28 | 'kc_house_data.csv',
29 | {
30 | shuffle: true,
31 | splitTest: 10,
32 | dataColumns: ['lat', 'long', 'sqft_lot', 'sqft_living'],
33 | labelColumns: ['price']
34 | }
35 | );
36 |
37 | features = tf.tensor(features);
38 | labels = tf.tensor(labels);
39 |
40 | testFeatures.forEach((testPoint, i) => {
41 | const result = knn(features, labels, tf.tensor(testPoint), 10);
42 | const err = (testLabels[i][0] - result) / testLabels[i][0];
43 | console.log('Error', err * 100);
44 | });
45 |
--------------------------------------------------------------------------------
/MLKits/regressions/multinominal-logistic-regression/index.js:
--------------------------------------------------------------------------------
1 | require('@tensorflow/tfjs-node');
2 | const tf = require('@tensorflow/tfjs');
3 | const LogisticRegression = require('./logistic-regression');
4 | const plot = require('node-remote-plot');
5 | const _ = require('lodash');
6 | const mnist = require('mnist-data');
7 |
8 | function loadData() {
9 | const mnistData = mnist.training(0, 60000);
10 |
11 | const features = mnistData.images.values.map(image => _.flatMap(image));
12 | const encodedLabels = mnistData.labels.values.map(label => {
13 | const row = new Array(10).fill(0);
14 | row[label] = 1;
15 | return row;
16 | });
17 |
18 | return { features, labels: encodedLabels };
19 | }
20 |
21 | const { features, labels } = loadData();
22 |
23 | const regression = new LogisticRegression(features, labels, {
24 | learningRate: 1,
25 | iterations: 40,
26 | batchSize: 500
27 | });
28 |
29 | regression.train();
30 |
31 | const testMnistData = mnist.testing(0, 10000);
32 | const testFeatures = testMnistData.images.values.map(image => _.flatMap(image));
33 | const testEncodedLabels = testMnistData.labels.values.map(label => {
34 | const row = new Array(10).fill(0);
35 | row[label] = 1;
36 | return row;
37 | });
38 |
39 | const accuracy = regression.test(testFeatures, testEncodedLabels);
40 | console.log('Accuracy is', accuracy);
41 |
42 | plot({
43 | x: regression.costHistory.reverse()
44 | });
45 |
--------------------------------------------------------------------------------
/MLKits/knn-tf/load-csv.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs');
2 | const _ = require('lodash');
3 | const shuffleSeed = require('shuffle-seed');
4 |
5 | function extractColumns(data, columnNames) {
6 | const headers = _.first(data);
7 |
8 | const indexes = _.map(columnNames, column => headers.indexOf(column));
9 | const extracted = _.map(data, row => _.pullAt(row, indexes));
10 |
11 | return extracted;
12 | }
13 |
14 | module.exports = function loadCSV(
15 | filename,
16 | {
17 | dataColumns = [],
18 | labelColumns = [],
19 | converters = {},
20 | shuffle = false,
21 | splitTest = false
22 | }
23 | ) {
24 | let data = fs.readFileSync(filename, { encoding: 'utf-8' });
25 | data = _.map(data.split('\n'), d => d.split(','));
26 | data = _.dropRightWhile(data, val => _.isEqual(val, ['']));
27 | const headers = _.first(data);
28 |
29 | data = _.map(data, (row, index) => {
30 | if (index === 0) {
31 | return row;
32 | }
33 | return _.map(row, (element, index) => {
34 | if (converters[headers[index]]) {
35 | const converted = converters[headers[index]](element);
36 | return _.isNaN(converted) ? element : converted;
37 | }
38 |
39 | const result = parseFloat(element.replace('"', ''));
40 | return _.isNaN(result) ? element : result;
41 | });
42 | });
43 |
44 | let labels = extractColumns(data, labelColumns);
45 | data = extractColumns(data, dataColumns);
46 |
47 | data.shift();
48 | labels.shift();
49 |
50 | if (shuffle) {
51 | data = shuffleSeed.shuffle(data, 'phrase');
52 | labels = shuffleSeed.shuffle(labels, 'phrase');
53 | }
54 |
55 | if (splitTest) {
56 | const trainSize = _.isNumber(splitTest)
57 | ? splitTest
58 | : Math.floor(data.length / 2);
59 |
60 | return {
61 | features: data.slice(trainSize),
62 | labels: labels.slice(trainSize),
63 | testFeatures: data.slice(0, trainSize),
64 | testLabels: labels.slice(0, trainSize)
65 | };
66 | } else {
67 | return { features, data };
68 | }
69 | };
70 |
--------------------------------------------------------------------------------
/MLKits/regressions/load-csv.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs');
2 | const _ = require('lodash');
3 | const shuffleSeed = require('shuffle-seed');
4 |
5 | function extractColumns(data, columnNames) {
6 | const headers = _.first(data);
7 |
8 | const indexes = _.map(columnNames, column => headers.indexOf(column));
9 | const extracted = _.map(data, row => _.pullAt(row, indexes));
10 |
11 | return extracted;
12 | }
13 |
14 | module.exports = function loadCSV(
15 | filename,
16 | {
17 | dataColumns = [],
18 | labelColumns = [],
19 | converters = {},
20 | shuffle = false,
21 | splitTest = false
22 | }
23 | ) {
24 | let data = fs.readFileSync(filename, { encoding: 'utf-8' });
25 | data = _.map(data.split('\n'), d => d.split(','));
26 | data = _.dropRightWhile(data, val => _.isEqual(val, ['']));
27 | const headers = _.first(data);
28 |
29 | data = _.map(data, (row, index) => {
30 | if (index === 0) {
31 | return row;
32 | }
33 | return _.map(row, (element, index) => {
34 | if (converters[headers[index]]) {
35 | const converted = converters[headers[index]](element);
36 | return _.isNaN(converted) ? element : converted;
37 | }
38 |
39 | const result = parseFloat(element.replace('"', ''));
40 | return _.isNaN(result) ? element : result;
41 | });
42 | });
43 |
44 | let labels = extractColumns(data, labelColumns);
45 | data = extractColumns(data, dataColumns);
46 |
47 | data.shift();
48 | labels.shift();
49 |
50 | if (shuffle) {
51 | data = shuffleSeed.shuffle(data, 'phrase');
52 | labels = shuffleSeed.shuffle(labels, 'phrase');
53 | }
54 |
55 | if (splitTest) {
56 | const trainSize = _.isNumber(splitTest)
57 | ? splitTest
58 | : Math.floor(data.length / 2);
59 |
60 | return {
61 | features: data.slice(trainSize),
62 | labels: labels.slice(trainSize),
63 | testFeatures: data.slice(0, trainSize),
64 | testLabels: labels.slice(0, trainSize)
65 | };
66 | } else {
67 | return { features: data, labels };
68 | }
69 | };
70 |
--------------------------------------------------------------------------------
/MLKits/plinko/score.js:
--------------------------------------------------------------------------------
1 | const outputs = [];
2 |
3 | function onScoreUpdate(dropPosition, bounciness, size, bucketLabel) {
4 | outputs.push([dropPosition, bounciness, size, bucketLabel]);
5 | }
6 |
7 | function runAnalysis() {
8 | const testSetSize = 100;
9 | const k = 10;
10 |
11 | _.range(0, 3).forEach(feature => {
12 | const data = _.map(outputs, row => [row[feature], _.last(row)]);
13 | const [testSet, trainingSet] = splitDataset(minMax(data, 1), testSetSize);
14 |
15 | const accuracy = _.chain(testSet)
16 | .filter(
17 | testPoint =>
18 | knn(trainingSet, _.initial(testPoint), k) === _.last(testPoint)
19 | )
20 | .size()
21 | .divide(testSetSize)
22 | .value();
23 |
24 | console.log('For feature of', feature, 'accuracy is', accuracy);
25 | });
26 | }
27 |
28 | function knn(data, point, k) {
29 | return _.chain(data)
30 | .map(row => {
31 | return [distance(_.initial(row), point), _.last(row)];
32 | })
33 | .sortBy(row => row[0])
34 | .slice(0, k)
35 | .countBy(row => row[1])
36 | .toPairs()
37 | .sortBy(row => row[1])
38 | .last()
39 | .first()
40 | .parseInt()
41 | .value();
42 | }
43 |
44 | function distance(pointA, pointB) {
45 | return (
46 | _.chain(pointA)
47 | .zip(pointB)
48 | .map(([a, b]) => (a - b) ** 2)
49 | .sum()
50 | .value() ** 0.5
51 | );
52 | }
53 |
54 | function splitDataset(data, testCount) {
55 | const shuffled = _.shuffle(data);
56 |
57 | const testSet = _.slice(shuffled, 0, testCount);
58 | const trainingSet = _.slice(shuffled, testCount);
59 |
60 | return [testSet, trainingSet];
61 | }
62 |
63 | function minMax(data, featureCount) {
64 | const clonedData = _.cloneDeep(data);
65 |
66 | for (let i = 0; i < featureCount; i++) {
67 | const column = clonedData.map(row => row[i]);
68 |
69 | const min = _.min(column);
70 | const max = _.max(column);
71 |
72 | for (let j = 0; j < clonedData.length; j++) {
73 | clonedData[j][i] = (clonedData[j][i] - min) / (max - min);
74 | }
75 | }
76 |
77 | return clonedData;
78 | }
79 |
--------------------------------------------------------------------------------
/loadcsv/load-csv.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs');
2 | const _ = require('lodash');
3 | const shuffleSeed = require('shuffle-seed');
4 |
5 | function extractColumns(data, columnNames) {
6 | const headers = _.first(data);
7 |
8 | const indexes = _.map(columnNames, column => headers.indexOf(column));
9 | const extracted = _.map(data, row => _.pullAt(row, indexes));
10 |
11 | return extracted;
12 | }
13 |
14 | function loadCSV(
15 | filename,
16 | {
17 | converters = {},
18 | dataColumns = [],
19 | labelColumns = [],
20 | shuffle = true,
21 | splitTest = false
22 | }
23 | ) {
24 | let data = fs.readFileSync(filename, { encoding: 'utf-8' });
25 | data = data.split('\n').map(row => row.split(','));
26 | data = data.map(row => _.dropRightWhile(row, val => val === ''));
27 | const headers = _.first(data);
28 |
29 | data = data.map((row, index) => {
30 | if (index === 0) {
31 | return row;
32 | }
33 |
34 | return row.map((element, index) => {
35 | if (converters[headers[index]]) {
36 | const converted = converters[headers[index]](element);
37 | return _.isNaN(converted) ? element : converted;
38 | }
39 |
40 | const result = parseFloat(element);
41 | return _.isNaN(result) ? element : result;
42 | });
43 | });
44 |
45 | let labels = extractColumns(data, labelColumns);
46 | data = extractColumns(data, dataColumns);
47 |
48 | data.shift();
49 | labels.shift();
50 |
51 | if (shuffle) {
52 | data = shuffleSeed.shuffle(data, 'phrase');
53 | labels = shuffleSeed.shuffle(labels, 'phrase');
54 | }
55 |
56 | if (splitTest) {
57 | const trainSize = _.isNumber(splitTest)
58 | ? splitTest
59 | : Math.floor(data.length / 2);
60 |
61 | return {
62 | features: data.slice(0, trainSize),
63 | labels: labels.slice(0, trainSize),
64 | testFeatures: data.slice(trainSize),
65 | testLabels: labels.slice(trainSize)
66 | };
67 | } else {
68 | return { features: data, labels };
69 | }
70 | }
71 |
72 | const { features, labels, testFeatures, testLabels } = loadCSV('data.csv', {
73 | dataColumns: ['height', 'value'],
74 | labelColumns: ['passed'],
75 | shuffle: true,
76 | splitTest: false,
77 | converters: {
78 | passed: val => (val === 'TRUE' ? 1 : 0)
79 | }
80 | });
81 |
82 | console.log('Features', features);
83 | console.log('Labels', labels);
84 | console.log('testFeatures', testFeatures);
85 | console.log('testLabels', testLabels);
86 |
--------------------------------------------------------------------------------
/MLKits/regressions/linear-regression/linear-regression.js:
--------------------------------------------------------------------------------
1 | const tf = require('@tensorflow/tfjs');
2 | const _ = require('lodash');
3 |
4 | class LinearRegression {
5 | constructor(features, labels, options) {
6 | this.features = this.processFeatures(features);
7 | this.labels = tf.tensor(labels);
8 | this.mseHistory = [];
9 |
10 | this.options = Object.assign(
11 | { learningRate: 0.1, iterations: 1000 },
12 | options
13 | );
14 |
15 | this.weights = tf.zeros([this.features.shape[1], 1]);
16 | }
17 |
18 | gradientDescent(features, labels) {
19 | const currentGuesses = features.matMul(this.weights);
20 | const differences = currentGuesses.sub(labels);
21 |
22 | const slopes = features
23 | .transpose()
24 | .matMul(differences)
25 | .div(features.shape[0]);
26 |
27 | this.weights = this.weights.sub(slopes.mul(this.options.learningRate));
28 | }
29 |
30 | train() {
31 | const batchQuantity = Math.floor(
32 | this.features.shape[0] / this.options.batchSize
33 | );
34 |
35 | for (let i = 0; i < this.options.iterations; i++) {
36 | for (let j = 0; j < batchQuantity; j++) {
37 | const startIndex = j * this.options.batchSize;
38 | const { batchSize } = this.options;
39 |
40 | const featureSlice = this.features.slice(
41 | [startIndex, 0],
42 | [batchSize, -1]
43 | );
44 | const labelSlice = this.labels.slice([startIndex, 0], [batchSize, -1]);
45 |
46 | this.gradientDescent(featureSlice, labelSlice);
47 | }
48 |
49 | this.recordMSE();
50 | this.updateLearningRate();
51 | }
52 | }
53 |
54 | predict(observations) {
55 | return this.processFeatures(observations).matMul(this.weights);
56 | }
57 |
58 | test(testFeatures, testLabels) {
59 | testFeatures = this.processFeatures(testFeatures);
60 | testLabels = tf.tensor(testLabels);
61 |
62 | const predictions = testFeatures.matMul(this.weights);
63 |
64 | const res = testLabels
65 | .sub(predictions)
66 | .pow(2)
67 | .sum()
68 | .get();
69 | const tot = testLabels
70 | .sub(testLabels.mean())
71 | .pow(2)
72 | .sum()
73 | .get();
74 |
75 | return 1 - res / tot;
76 | }
77 |
78 | processFeatures(features) {
79 | features = tf.tensor(features);
80 | features = tf.ones([features.shape[0], 1]).concat(features, 1);
81 |
82 | if (this.mean && this.variance) {
83 | features = features.sub(this.mean).div(this.variance.pow(0.5));
84 | } else {
85 | features = this.standardize(features);
86 | }
87 |
88 | return features;
89 | }
90 |
91 | standardize(features) {
92 | const { mean, variance } = tf.moments(features, 0);
93 |
94 | this.mean = mean;
95 | this.variance = variance;
96 |
97 | return features.sub(mean).div(variance.pow(0.5));
98 | }
99 |
100 | recordMSE() {
101 | const mse = this.features
102 | .matMul(this.weights)
103 | .sub(this.labels)
104 | .pow(2)
105 | .sum()
106 | .div(this.features.shape[0])
107 | .get();
108 |
109 | this.mseHistory.unshift(mse);
110 | }
111 |
112 | updateLearningRate() {
113 | if (this.mseHistory.length < 2) {
114 | return;
115 | }
116 |
117 | if (this.mseHistory[0] > this.mseHistory[1]) {
118 | this.options.learningRate /= 2;
119 | } else {
120 | this.options.learningRate *= 1.05;
121 | }
122 | }
123 | }
124 |
125 | module.exports = LinearRegression;
126 |
--------------------------------------------------------------------------------
/MLKits/regressions/logistic-regression/logistic-regression.js:
--------------------------------------------------------------------------------
1 | const tf = require('@tensorflow/tfjs');
2 | const _ = require('lodash');
3 |
4 | class LogisticRegression {
5 | constructor(features, labels, options) {
6 | this.features = this.processFeatures(features);
7 | this.labels = tf.tensor(labels);
8 | this.costHistory = [];
9 |
10 | this.options = Object.assign(
11 | { learningRate: 0.1, iterations: 1000, decisionBoundary: 0.5 },
12 | options
13 | );
14 |
15 | this.weights = tf.zeros([this.features.shape[1], 1]);
16 | }
17 |
18 | gradientDescent(features, labels) {
19 | const currentGuesses = features.matMul(this.weights).sigmoid();
20 | const differences = currentGuesses.sub(labels);
21 |
22 | const slopes = features
23 | .transpose()
24 | .matMul(differences)
25 | .div(features.shape[0]);
26 |
27 | this.weights = this.weights.sub(slopes.mul(this.options.learningRate));
28 | }
29 |
30 | train() {
31 | const batchQuantity = Math.floor(
32 | this.features.shape[0] / this.options.batchSize
33 | );
34 |
35 | for (let i = 0; i < this.options.iterations; i++) {
36 | for (let j = 0; j < batchQuantity; j++) {
37 | const startIndex = j * this.options.batchSize;
38 | const { batchSize } = this.options;
39 |
40 | const featureSlice = this.features.slice(
41 | [startIndex, 0],
42 | [batchSize, -1]
43 | );
44 | const labelSlice = this.labels.slice([startIndex, 0], [batchSize, -1]);
45 |
46 | this.gradientDescent(featureSlice, labelSlice);
47 | }
48 |
49 | this.recordCost();
50 | this.updateLearningRate();
51 | }
52 | }
53 |
54 | predict(observations) {
55 | return this.processFeatures(observations)
56 | .matMul(this.weights)
57 | .sigmoid()
58 | .greater(this.options.decisionBoundary)
59 | .cast('float32');
60 | }
61 |
62 | test(testFeatures, testLabels) {
63 | const predictions = this.predict(testFeatures);
64 | testLabels = tf.tensor(testLabels);
65 |
66 | const incorrect = predictions
67 | .sub(testLabels)
68 | .abs()
69 | .sum()
70 | .get();
71 |
72 | return (predictions.shape[0] - incorrect) / predictions.shape[0];
73 | }
74 |
75 | processFeatures(features) {
76 | features = tf.tensor(features);
77 |
78 | if (this.mean && this.variance) {
79 | features = features.sub(this.mean).div(this.variance.pow(0.5));
80 | } else {
81 | features = this.standardize(features);
82 | }
83 |
84 | features = tf.ones([features.shape[0], 1]).concat(features, 1);
85 |
86 | return features;
87 | }
88 |
89 | standardize(features) {
90 | const { mean, variance } = tf.moments(features, 0);
91 |
92 | this.mean = mean;
93 | this.variance = variance;
94 |
95 | return features.sub(mean).div(variance.pow(0.5));
96 | }
97 |
98 | recordCost() {
99 | const guesses = this.features.matMul(this.weights).sigmoid();
100 |
101 | const termOne = this.labels.transpose().matMul(guesses.log());
102 |
103 | const termTwo = this.labels
104 | .mul(-1)
105 | .add(1)
106 | .transpose()
107 | .matMul(
108 | guesses
109 | .mul(-1)
110 | .add(1)
111 | .log()
112 | );
113 |
114 | const cost = termOne
115 | .add(termTwo)
116 | .div(this.features.shape[0])
117 | .mul(-1)
118 | .get(0, 0);
119 |
120 | this.costHistory.unshift(cost);
121 | }
122 |
123 | updateLearningRate() {
124 | if (this.costHistory.length < 2) {
125 | return;
126 | }
127 |
128 | if (this.costHistory[0] > this.costHistory[1]) {
129 | this.options.learningRate /= 2;
130 | } else {
131 | this.options.learningRate *= 1.05;
132 | }
133 | }
134 | }
135 |
136 | module.exports = LogisticRegression;
137 |
--------------------------------------------------------------------------------
/MLKits/regressions/multinominal-logistic-regression/logistic-regression.js:
--------------------------------------------------------------------------------
1 | const tf = require('@tensorflow/tfjs');
2 | const _ = require('lodash');
3 |
4 | class LogisticRegression {
5 | constructor(features, labels, options) {
6 | this.features = this.processFeatures(features);
7 | this.labels = tf.tensor(labels);
8 | this.costHistory = [];
9 |
10 | this.options = Object.assign(
11 | { learningRate: 0.1, iterations: 1000, decisionBoundary: 0.5 },
12 | options
13 | );
14 |
15 | this.weights = tf.zeros([this.features.shape[1], this.labels.shape[1]]);
16 | }
17 |
18 | gradientDescent(features, labels) {
19 | const currentGuesses = features.matMul(this.weights).softmax();
20 | const differences = currentGuesses.sub(labels);
21 |
22 | const slopes = features
23 | .transpose()
24 | .matMul(differences)
25 | .div(features.shape[0]);
26 |
27 | return this.weights.sub(slopes.mul(this.options.learningRate));
28 | }
29 |
30 | train() {
31 | const batchQuantity = Math.floor(
32 | this.features.shape[0] / this.options.batchSize
33 | );
34 |
35 | for (let i = 0; i < this.options.iterations; i++) {
36 | for (let j = 0; j < batchQuantity; j++) {
37 | const startIndex = j * this.options.batchSize;
38 | const { batchSize } = this.options;
39 |
40 | this.weights = tf.tidy(() => {
41 | const featureSlice = this.features.slice(
42 | [startIndex, 0],
43 | [batchSize, -1]
44 | );
45 | const labelSlice = this.labels.slice(
46 | [startIndex, 0],
47 | [batchSize, -1]
48 | );
49 |
50 | return this.gradientDescent(featureSlice, labelSlice);
51 | });
52 | }
53 |
54 | this.recordCost();
55 | this.updateLearningRate();
56 | }
57 | }
58 |
59 | predict(observations) {
60 | return this.processFeatures(observations)
61 | .matMul(this.weights)
62 | .softmax()
63 | .argMax(1);
64 | }
65 |
66 | test(testFeatures, testLabels) {
67 | const predictions = this.predict(testFeatures);
68 | testLabels = tf.tensor(testLabels).argMax(1);
69 |
70 | const incorrect = predictions
71 | .notEqual(testLabels)
72 | .sum()
73 | .get();
74 |
75 | return (predictions.shape[0] - incorrect) / predictions.shape[0];
76 | }
77 |
78 | processFeatures(features) {
79 | features = tf.tensor(features);
80 |
81 | if (this.mean && this.variance) {
82 | features = features.sub(this.mean).div(this.variance.pow(0.5));
83 | } else {
84 | features = this.standardize(features);
85 | }
86 |
87 | features = tf.ones([features.shape[0], 1]).concat(features, 1);
88 |
89 | return features;
90 | }
91 |
92 | standardize(features) {
93 | const { mean, variance } = tf.moments(features, 0);
94 |
95 | const filler = variance
96 | .cast('bool')
97 | .logicalNot()
98 | .cast('float32');
99 |
100 | this.mean = mean;
101 | this.variance = variance.add(filler);
102 |
103 | return features.sub(mean).div(this.variance.pow(0.5));
104 | }
105 |
106 | recordCost() {
107 | const cost = tf.tidy(() => {
108 | const guesses = this.features.matMul(this.weights).sigmoid();
109 |
110 | const termOne = this.labels.transpose().matMul(guesses.add(1e-7).log());
111 |
112 | const termTwo = this.labels
113 | .mul(-1)
114 | .add(1)
115 | .transpose()
116 | .matMul(
117 | guesses
118 | .mul(-1)
119 | .add(1)
120 | .add(1e-7)
121 | .log()
122 | );
123 |
124 | return termOne
125 | .add(termTwo)
126 | .div(this.features.shape[0])
127 | .mul(-1)
128 | .get(0, 0);
129 | });
130 |
131 | this.costHistory.unshift(cost);
132 | }
133 |
134 | updateLearningRate() {
135 | if (this.costHistory.length < 2) {
136 | return;
137 | }
138 |
139 | if (this.costHistory[0] > this.costHistory[1]) {
140 | this.options.learningRate /= 2;
141 | } else {
142 | this.options.learningRate *= 1.05;
143 | }
144 | }
145 | }
146 |
147 | module.exports = LogisticRegression;
148 |
--------------------------------------------------------------------------------
/MLKits/plinko/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Plinko
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
0
24 |
Bucket #1
25 |
26 |
27 |
0
28 |
Bucket #2
29 |
30 |
31 |
0
32 |
Bucket #3
33 |
34 |
35 |
0
36 |
Bucket #4
37 |
38 |
39 |
0
40 |
Bucket #5
41 |
42 |
43 |
0
44 |
Bucket #6
45 |
46 |
47 |
0
48 |
Bucket #7
49 |
50 |
51 |
0
52 |
Bucket #8
53 |
54 |
55 |
0
56 |
Bucket #9
57 |
58 |
59 |
0
60 |
Bucket #10
61 |
62 |
63 |
64 |
65 |
97 |
98 |
99 |
100 |
107 |
108 |
120 |
121 |
133 |
134 |
144 |
145 |
146 |
147 |
148 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
--------------------------------------------------------------------------------
/MLKits/plinko/lib/index.js:
--------------------------------------------------------------------------------
1 | //////////////////////////////////////////
2 | // Hi!
3 | // You probably don't need to edit me
4 | //////////////////////////////////////////
5 |
6 | const BALL_SIZE = 16;
7 | const CANVAS_HEIGHT = 600;
8 | const CANVAS_WIDTH = 794;
9 | const PEG_X = 70;
10 | const PEG_Y = 70;
11 | const BUCKET_COLOR = '#b2ebf2';
12 | const COLORS = [
13 | '#e1f5fe',
14 | '#b3e5fc',
15 | '#81d4fa',
16 | '#4fc3f7',
17 | '#29b6f6',
18 | '#03a9f4',
19 | '#039be5',
20 | '#0288d1',
21 | '#0277bd',
22 | '#01579b'
23 | ];
24 |
25 | const Engine = Matter.Engine,
26 | Render = Matter.Render,
27 | World = Matter.World,
28 | Bodies = Matter.Bodies,
29 | Events = Matter.Events,
30 | Body = Matter.Body;
31 |
32 | const engine = Engine.create({
33 | timing: { timeScale: 2 }
34 | });
35 | const render = Render.create({
36 | element: document.querySelector('.target'),
37 | engine: engine,
38 | options: {
39 | width: CANVAS_WIDTH,
40 | height: CANVAS_HEIGHT,
41 | wireframes: false,
42 | background: '#f1f1f1'
43 | }
44 | });
45 |
46 | const ground = Bodies.rectangle(
47 | CANVAS_WIDTH / 2,
48 | CANVAS_HEIGHT,
49 | CANVAS_WIDTH * 3,
50 | 50,
51 | {
52 | id: 999,
53 | isStatic: true,
54 | collisionFilter: { group: 'ground' }
55 | }
56 | );
57 | const ground2 = Bodies.rectangle(0, CANVAS_HEIGHT, CANVAS_WIDTH * 3, 50, {
58 | id: 9999,
59 | isStatic: true,
60 | collisionFilter: { group: 'ground' }
61 | });
62 | const indicator = Bodies.circle(BALL_SIZE, BALL_SIZE, BALL_SIZE, {
63 | isStatic: true,
64 | collisionFilter: { group: 'ball' }
65 | });
66 |
67 | const pegs = [];
68 | for (let i = 1; i < CANVAS_HEIGHT / PEG_Y - 1; i++) {
69 | for (let j = 1; j < CANVAS_WIDTH / PEG_X + 1; j++) {
70 | let x = j * PEG_X - BALL_SIZE * 1.5;
71 | const y = i * PEG_Y;
72 |
73 | if (i % 2 == 0) {
74 | x -= PEG_X / 2;
75 | }
76 |
77 | const peg = Bodies.polygon(x, y, 7, BALL_SIZE / 4, {
78 | isStatic: true
79 | });
80 | pegs.push(peg);
81 | }
82 | }
83 |
84 | const leftWall = Bodies.rectangle(
85 | -1,
86 | CANVAS_HEIGHT / 2 + BALL_SIZE * 2,
87 | 1,
88 | CANVAS_HEIGHT,
89 | {
90 | isStatic: true
91 | }
92 | );
93 | const rightWall = Bodies.rectangle(
94 | CANVAS_WIDTH + 1,
95 | CANVAS_HEIGHT / 2 + BALL_SIZE * 2,
96 | 1,
97 | CANVAS_HEIGHT,
98 | {
99 | isStatic: true
100 | }
101 | );
102 |
103 | const buckets = [];
104 | const bucketIdRange = [];
105 | const bucketWidth = CANVAS_WIDTH / 10;
106 | const bucketHeight = BALL_SIZE * 3;
107 | for (let i = 0; i < 10; i++) {
108 | const bucket = Bodies.rectangle(
109 | bucketWidth * i + bucketWidth * 0.5,
110 | CANVAS_HEIGHT - bucketHeight,
111 | bucketWidth,
112 | bucketHeight,
113 | {
114 | id: i,
115 | isStatic: true,
116 | isSensor: true,
117 | render: {
118 | fillStyle: BUCKET_COLOR
119 | },
120 | collisionFilter: {
121 | group: 'bucket'
122 | }
123 | }
124 | );
125 | const divider = Bodies.rectangle(
126 | bucketWidth * i,
127 | CANVAS_HEIGHT - bucketHeight,
128 | 2,
129 | bucketHeight,
130 | {
131 | isStatic: true,
132 | collisionFilter: { group: 'bucket' }
133 | }
134 | );
135 | bucketIdRange.push(i);
136 | buckets.push(bucket);
137 | buckets.push(divider);
138 | }
139 |
140 | World.add(engine.world, [
141 | ground2,
142 | ...pegs,
143 | ...buckets,
144 | ground,
145 | indicator,
146 | leftWall,
147 | rightWall
148 | ]);
149 | Engine.run(engine);
150 | Render.run(render);
151 | let ballCount = 0;
152 | function dropBalls(position, quantity) {
153 | const balls = [];
154 |
155 | const startRes = Math.min(
156 | Math.abs(parseFloat(document.querySelector('#coef-start').value)),
157 | 1
158 | );
159 | const endRes = Math.min(
160 | Math.abs(parseFloat(document.querySelector('#coef-end').value)),
161 | 1
162 | );
163 |
164 | const startSize = parseFloat(document.querySelector('#size-start').value);
165 | const endSize = parseFloat(document.querySelector('#size-end').value);
166 | for (let i = 0; i < quantity; i++) {
167 | ballCount++;
168 | if (ballCount > 785) {
169 | ballCount--;
170 | break;
171 | }
172 | const restitution = Math.random() * (endRes - startRes) + startRes;
173 | const size = Math.random() * (endSize - startSize) + startSize;
174 | const dropX = position;
175 |
176 | const ball = Bodies.circle(dropX, size, size, {
177 | restitution,
178 | collisionFilter: { group: 'ball' },
179 | friction: 0.9
180 | });
181 | ball.size = size;
182 | ball.restitution = restitution;
183 | ball.dropX = position;
184 | balls.push(ball);
185 | }
186 |
187 | World.add(engine.world, balls);
188 | }
189 |
190 | let x = 0;
191 | const canvas = document.querySelector('canvas');
192 | const events = {
193 | mousemove(event) {
194 | x = event.offsetX;
195 |
196 | Body.setPosition(indicator, { x: x, y: BALL_SIZE });
197 | document.querySelector('.x-position').innerHTML = `Drop Position: ${x}`;
198 | },
199 | click() {
200 | const quantity = parseInt(document.querySelector('#drop-quantity').value);
201 |
202 | dropBalls(x, quantity);
203 | }
204 | };
205 | for (let event in events) {
206 | canvas.addEventListener(event, events[event]);
207 | }
208 |
209 | let _score = {};
210 | Events.on(engine, 'collisionActive', ({ pairs }) => {
211 | const filteredPairs = pairs.forEach(pair => {
212 | if (
213 | (bucketIdRange.includes(pair.bodyA.id) ||
214 | bucketIdRange.includes(pair.bodyB.id)) &&
215 | Math.abs(pair.bodyB.velocity.y) < 0.1 &&
216 | pair.bodyB.position.y > CANVAS_HEIGHT - 200
217 | ) {
218 | World.remove(engine.world, pair.bodyB);
219 | ballCount--;
220 | const bucketId = pair.bodyA.id;
221 |
222 | _score[bucketId] = (_score[bucketId] || 0) + 1;
223 |
224 | const count = parseInt(
225 | document.querySelector(`#bucket-${bucketId}`).innerHTML
226 | );
227 | document.querySelector(`#bucket-${bucketId}`).innerHTML = count + 1;
228 |
229 | onScoreUpdate(
230 | Math.round(pair.bodyB.dropX),
231 | pair.bodyB.restitution,
232 | pair.bodyB.size,
233 | bucketId + 1
234 | );
235 | updateBucketColors(_score);
236 | }
237 | });
238 | });
239 |
240 | // document.querySelector('button#export').addEventListener('click', () => {
241 | // const rows = outputs.join('\n');
242 | // const a = document.createElement('a');
243 | // mimeType = 'application/octet-stream';
244 | // a.href = URL.createObjectURL(
245 | // new Blob([rows], {
246 | // type: mimeType
247 | // })
248 | // );
249 | // a.setAttribute('download', 'data.csv');
250 | // document.body.appendChild(a);
251 | // a.click();
252 | // document.body.removeChild(a);
253 | // });
254 |
255 | document.querySelector('button#scan').addEventListener('click', () => {
256 | const quantity = parseInt(document.querySelector('#scan-quantity').value);
257 | const spacing = parseInt(document.querySelector('#scan-spacing').value);
258 |
259 | for (let i = 1; i < CANVAS_WIDTH / spacing; i++) {
260 | dropBalls(i * spacing, quantity);
261 | }
262 | });
263 |
264 | document.querySelector('button#spot').addEventListener('click', () => {
265 | const quantity = parseInt(document.querySelector('#spot-quantity').value);
266 | const spot = parseInt(document.querySelector('#spot-location').value);
267 |
268 | dropBalls(spot, quantity);
269 | });
270 |
271 | document.querySelector('button#analyze').addEventListener('click', runAnalysis);
272 |
273 | document
274 | .querySelectorAll('form')
275 | .forEach(f => f.addEventListener('submit', e => e.preventDefault()));
276 |
277 | function updateBucketColors(_score) {
278 | const counts = _.range(0, 10).map(i => _score[i] || 0);
279 |
280 | const min = _.min(counts);
281 | const max = _.max(counts);
282 |
283 | const ranks = counts.map((count, i) => ({ i, c: count }));
284 |
285 | let counter = 0;
286 | const d = _.chain(ranks)
287 | .sortBy('c')
288 | .forEach(({ i, c }, j, collection) => {
289 | if (_.get(collection, `[${j - 1}].c`) !== c) {
290 | counter++;
291 | }
292 | buckets[i * 2].render.fillStyle = COLORS[counter - 1];
293 | })
294 | .value();
295 | }
296 |
297 | document.querySelector('#reset').addEventListener('click', function() {
298 | try {
299 | while (outputs.length) {
300 | outputs.pop();
301 | }
302 | } catch (e) {}
303 |
304 | _.range(0, 10).forEach(i => {
305 | buckets[i * 2].render.fillStyle = BUCKET_COLOR;
306 | document.querySelector(`#bucket-${i}`).innerHTML = 0;
307 | });
308 |
309 | _score = {};
310 | });
311 |
--------------------------------------------------------------------------------
/diagrams/09/diagrams.xml:
--------------------------------------------------------------------------------
1 | 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
--------------------------------------------------------------------------------
/diagrams/06/diagrams.xml:
--------------------------------------------------------------------------------
1 | 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
--------------------------------------------------------------------------------
/MLKits/knn-tf/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "knn-tf",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@protobufjs/aspromise": {
8 | "version": "1.1.2",
9 | "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
10 | "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78="
11 | },
12 | "@protobufjs/base64": {
13 | "version": "1.1.2",
14 | "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
15 | "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="
16 | },
17 | "@protobufjs/codegen": {
18 | "version": "2.0.4",
19 | "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
20 | "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="
21 | },
22 | "@protobufjs/eventemitter": {
23 | "version": "1.1.0",
24 | "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
25 | "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A="
26 | },
27 | "@protobufjs/fetch": {
28 | "version": "1.1.0",
29 | "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
30 | "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=",
31 | "requires": {
32 | "@protobufjs/aspromise": "1.1.2",
33 | "@protobufjs/inquire": "1.1.0"
34 | }
35 | },
36 | "@protobufjs/float": {
37 | "version": "1.0.2",
38 | "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
39 | "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E="
40 | },
41 | "@protobufjs/inquire": {
42 | "version": "1.1.0",
43 | "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
44 | "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik="
45 | },
46 | "@protobufjs/path": {
47 | "version": "1.1.2",
48 | "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
49 | "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0="
50 | },
51 | "@protobufjs/pool": {
52 | "version": "1.1.0",
53 | "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
54 | "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q="
55 | },
56 | "@protobufjs/utf8": {
57 | "version": "1.1.0",
58 | "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
59 | "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA="
60 | },
61 | "@tensorflow/tfjs": {
62 | "version": "0.12.7",
63 | "resolved": "https://registry.npmjs.org/@tensorflow/tfjs/-/tfjs-0.12.7.tgz",
64 | "integrity": "sha512-sGqnS7+Zj4SK6ap+fdFDGgddQf7l9RJBkWJc36frwP2F4LmFQQ5ED4+Wq7cBM1LzuyNq0p3pREWBbCfab0pnyw==",
65 | "requires": {
66 | "@tensorflow/tfjs-converter": "0.5.9",
67 | "@tensorflow/tfjs-core": "0.12.17",
68 | "@tensorflow/tfjs-layers": "0.7.5"
69 | }
70 | },
71 | "@tensorflow/tfjs-converter": {
72 | "version": "0.5.9",
73 | "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-0.5.9.tgz",
74 | "integrity": "sha512-48sw17WffIoPYTN2gNZ5HWvjKLtQYXrSy+mqaZtiWaRYVjDzJdla6g7dPAL77MR2rxQAfVYMXg8GRDBmkzyBDw==",
75 | "requires": {
76 | "@types/long": "3.0.32",
77 | "protobufjs": "6.8.8"
78 | }
79 | },
80 | "@tensorflow/tfjs-core": {
81 | "version": "0.12.17",
82 | "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-0.12.17.tgz",
83 | "integrity": "sha512-CgFazQpGB21n1LRSxgyMwy0cN6WtuUPBP2W75zk6Rw+gFUXb8ZNh7fhn4nObjgKeIka36TI9MvT1FYrY+z150w==",
84 | "requires": {
85 | "@types/seedrandom": "2.4.27",
86 | "@types/webgl-ext": "0.0.29",
87 | "@types/webgl2": "0.0.4",
88 | "seedrandom": "2.4.4"
89 | }
90 | },
91 | "@tensorflow/tfjs-layers": {
92 | "version": "0.7.5",
93 | "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-0.7.5.tgz",
94 | "integrity": "sha512-JIo4l0yEIfYi+quJG71wAeCP9tgXICg/MIOstowfCVGTHKh8oBVEm39bAI/zyTYYtFVLHeQSvY2KuRCN2h0nBg=="
95 | },
96 | "@tensorflow/tfjs-node": {
97 | "version": "0.1.17",
98 | "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-node/-/tfjs-node-0.1.17.tgz",
99 | "integrity": "sha512-NCTmf87u0XhZBE4lAHGxmjQneZrkkQRZCyUmSlFo4LRfkRIrFT+QJYIonJ/tJof8NtCNLRq9yVS/d5x+FvqntA==",
100 | "requires": {
101 | "@tensorflow/tfjs": "0.12.7",
102 | "adm-zip": "0.4.11",
103 | "bindings": "1.3.0",
104 | "progress": "2.0.0",
105 | "rimraf": "2.6.2",
106 | "tar": "4.4.6"
107 | }
108 | },
109 | "@types/long": {
110 | "version": "3.0.32",
111 | "resolved": "https://registry.npmjs.org/@types/long/-/long-3.0.32.tgz",
112 | "integrity": "sha512-ZXyOOm83p7X8p3s0IYM3VeueNmHpkk/yMlP8CLeOnEcu6hIwPH7YjZBvhQkR0ZFS2DqZAxKtJ/M5fcuv3OU5BA=="
113 | },
114 | "@types/node": {
115 | "version": "10.11.0",
116 | "resolved": "https://registry.npmjs.org/@types/node/-/node-10.11.0.tgz",
117 | "integrity": "sha512-R4Dvw6KjSYn/SpvjRchBOwXr14vVVcFXCtnM3f0aLvlJS8a599rrcEoihcP2/+Z/f75E5GNPd4aWM7j1yei9og=="
118 | },
119 | "@types/seedrandom": {
120 | "version": "2.4.27",
121 | "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-2.4.27.tgz",
122 | "integrity": "sha1-nbVjk33YaRX2kJK8QyWdL0hXjkE="
123 | },
124 | "@types/webgl-ext": {
125 | "version": "0.0.29",
126 | "resolved": "https://registry.npmjs.org/@types/webgl-ext/-/webgl-ext-0.0.29.tgz",
127 | "integrity": "sha512-ZlVjDQU5Vlc9hF4LGdDldujZUf0amwlwGv1RI2bfvdrEHIl6X/7MZVpemJUjS7NxD9XaKfE8SlFrxsfXpUkt/A=="
128 | },
129 | "@types/webgl2": {
130 | "version": "0.0.4",
131 | "resolved": "https://registry.npmjs.org/@types/webgl2/-/webgl2-0.0.4.tgz",
132 | "integrity": "sha512-PACt1xdErJbMUOUweSrbVM7gSIYm1vTncW2hF6Os/EeWi6TXYAYMPp+8v6rzHmypE5gHrxaxZNXgMkJVIdZpHw=="
133 | },
134 | "adm-zip": {
135 | "version": "0.4.11",
136 | "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.11.tgz",
137 | "integrity": "sha512-L8vcjDTCOIJk7wFvmlEUN7AsSb8T+2JrdP7KINBjzr24TJ5Mwj590sLu3BC7zNZowvJWa/JtPmD8eJCzdtDWjA=="
138 | },
139 | "balanced-match": {
140 | "version": "1.0.0",
141 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
142 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
143 | },
144 | "bindings": {
145 | "version": "1.3.0",
146 | "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.0.tgz",
147 | "integrity": "sha512-DpLh5EzMR2kzvX1KIlVC0VkC3iZtHKTgdtZ0a3pglBZdaQFjt5S9g9xd1lE+YvXyfd6mtCeRnrUfOLYiTMlNSw=="
148 | },
149 | "brace-expansion": {
150 | "version": "1.1.11",
151 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
152 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
153 | "requires": {
154 | "balanced-match": "1.0.0",
155 | "concat-map": "0.0.1"
156 | }
157 | },
158 | "chownr": {
159 | "version": "1.1.1",
160 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz",
161 | "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g=="
162 | },
163 | "concat-map": {
164 | "version": "0.0.1",
165 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
166 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
167 | },
168 | "fs-minipass": {
169 | "version": "1.2.5",
170 | "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz",
171 | "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==",
172 | "requires": {
173 | "minipass": "2.3.4"
174 | }
175 | },
176 | "fs.realpath": {
177 | "version": "1.0.0",
178 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
179 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
180 | },
181 | "glob": {
182 | "version": "7.1.3",
183 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
184 | "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
185 | "requires": {
186 | "fs.realpath": "1.0.0",
187 | "inflight": "1.0.6",
188 | "inherits": "2.0.3",
189 | "minimatch": "3.0.4",
190 | "once": "1.4.0",
191 | "path-is-absolute": "1.0.1"
192 | }
193 | },
194 | "inflight": {
195 | "version": "1.0.6",
196 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
197 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
198 | "requires": {
199 | "once": "1.4.0",
200 | "wrappy": "1.0.2"
201 | }
202 | },
203 | "inherits": {
204 | "version": "2.0.3",
205 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
206 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
207 | },
208 | "lodash": {
209 | "version": "4.17.11",
210 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
211 | "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
212 | },
213 | "long": {
214 | "version": "4.0.0",
215 | "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
216 | "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
217 | },
218 | "minimatch": {
219 | "version": "3.0.4",
220 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
221 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
222 | "requires": {
223 | "brace-expansion": "1.1.11"
224 | }
225 | },
226 | "minimist": {
227 | "version": "0.0.8",
228 | "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
229 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
230 | },
231 | "minipass": {
232 | "version": "2.3.4",
233 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.4.tgz",
234 | "integrity": "sha512-mlouk1OHlaUE8Odt1drMtG1bAJA4ZA6B/ehysgV0LUIrDHdKgo1KorZq3pK0b/7Z7LJIQ12MNM6aC+Tn6lUZ5w==",
235 | "requires": {
236 | "safe-buffer": "5.1.2",
237 | "yallist": "3.0.2"
238 | }
239 | },
240 | "minizlib": {
241 | "version": "1.1.0",
242 | "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz",
243 | "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==",
244 | "requires": {
245 | "minipass": "2.3.4"
246 | }
247 | },
248 | "mkdirp": {
249 | "version": "0.5.1",
250 | "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
251 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
252 | "requires": {
253 | "minimist": "0.0.8"
254 | }
255 | },
256 | "once": {
257 | "version": "1.4.0",
258 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
259 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
260 | "requires": {
261 | "wrappy": "1.0.2"
262 | }
263 | },
264 | "path-is-absolute": {
265 | "version": "1.0.1",
266 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
267 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
268 | },
269 | "progress": {
270 | "version": "2.0.0",
271 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz",
272 | "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8="
273 | },
274 | "protobufjs": {
275 | "version": "6.8.8",
276 | "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz",
277 | "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==",
278 | "requires": {
279 | "@protobufjs/aspromise": "1.1.2",
280 | "@protobufjs/base64": "1.1.2",
281 | "@protobufjs/codegen": "2.0.4",
282 | "@protobufjs/eventemitter": "1.1.0",
283 | "@protobufjs/fetch": "1.1.0",
284 | "@protobufjs/float": "1.0.2",
285 | "@protobufjs/inquire": "1.1.0",
286 | "@protobufjs/path": "1.1.2",
287 | "@protobufjs/pool": "1.1.0",
288 | "@protobufjs/utf8": "1.1.0",
289 | "@types/long": "4.0.0",
290 | "@types/node": "10.11.0",
291 | "long": "4.0.0"
292 | },
293 | "dependencies": {
294 | "@types/long": {
295 | "version": "4.0.0",
296 | "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.0.tgz",
297 | "integrity": "sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q=="
298 | }
299 | }
300 | },
301 | "rimraf": {
302 | "version": "2.6.2",
303 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
304 | "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
305 | "requires": {
306 | "glob": "7.1.3"
307 | }
308 | },
309 | "safe-buffer": {
310 | "version": "5.1.2",
311 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
312 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
313 | },
314 | "seedrandom": {
315 | "version": "2.4.4",
316 | "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.4.tgz",
317 | "integrity": "sha512-9A+PDmgm+2du77B5i0Ip2cxOqqHjgNxnBgglxLcX78A2D6c2rTo61z4jnVABpF4cKeDMDG+cmXXvdnqse2VqMA=="
318 | },
319 | "shuffle-seed": {
320 | "version": "1.1.6",
321 | "resolved": "https://registry.npmjs.org/shuffle-seed/-/shuffle-seed-1.1.6.tgz",
322 | "integrity": "sha1-UzwSaDurO0+j6HUfxOViFGdEJgs=",
323 | "requires": {
324 | "seedrandom": "2.4.4"
325 | }
326 | },
327 | "tar": {
328 | "version": "4.4.6",
329 | "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.6.tgz",
330 | "integrity": "sha512-tMkTnh9EdzxyfW+6GK6fCahagXsnYk6kE6S9Gr9pjVdys769+laCTbodXDhPAjzVtEBazRgP0gYqOjnk9dQzLg==",
331 | "requires": {
332 | "chownr": "1.1.1",
333 | "fs-minipass": "1.2.5",
334 | "minipass": "2.3.4",
335 | "minizlib": "1.1.0",
336 | "mkdirp": "0.5.1",
337 | "safe-buffer": "5.1.2",
338 | "yallist": "3.0.2"
339 | }
340 | },
341 | "wrappy": {
342 | "version": "1.0.2",
343 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
344 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
345 | },
346 | "yallist": {
347 | "version": "3.0.2",
348 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz",
349 | "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k="
350 | }
351 | }
352 | }
353 |
--------------------------------------------------------------------------------
/diagrams/00/diagrams.xml:
--------------------------------------------------------------------------------
1 | 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
--------------------------------------------------------------------------------
/diagrams/10/diagrams.xml:
--------------------------------------------------------------------------------
1 | 7VZNc5swEP013AFhFx9jmqSXznTqQ8+KtIAmQmKEKKa/vsIsX4G0Pti9pBwY6a12pX1vteCRpDg/G1rmXzUH6YU+P3vksxeG+8PBvTug7QES7HogM4L3UDABJ/ELEPQRrQWHarHQai2tKJcg00oBswuMGqOb5bJUy+WuJc1gBZwYlWv0h+A2xyyI70+GLyCyHLeO9jG6vFD2mhldK9zQC0l6eXpzQYdgGKnKKdfNDCKPHkmM1rYfFecEZMftwFvv9/SOdTy4AWWvcQh7h59U1pj7d8gMVJXQyuEPisq2EhUe1rYDQ5cUoQvie+TY5MLCqaSsszauJByW20K6WeCGlTX6dWTS5XhMtbIoexh1cyFloqU2l+iEU4hTNnrOLHsWw0vqLHhuMBbO7+YejIy6SgVdgDWtW4IO0VBuWKXhDufNpHlwQCyfyR0jRrHMsjH0xLQbINnbxJMV8YmkjvZUMGo/IPnkX5IfrchfcewuZtkNWW1kezTuWoP9O9mTMtdRb7Tt1XYOsX8bZvdXlHV4J2J3H4nYrZK9F7H7FbHfDHDBbNV/Bq1Qta6rYcm6Z7i07VZjGK630gre9AKEqBRZx6OEtIvQUeh6lHxAuBCcd5tsKrjsVDORgmiY4xHDWwhE3lR+vNFTog2Fwhso9OlPCnFRMQMW/uuzuEB31MdNp7+oi232q0oefwM=7VY9k5swEP019IAwwWXs3F2KZCYTF6llaQHNCcSIJdj59ZFAfNlc4sJOk3PhWb3VrqT3HgKP7IvTi6ZV/lVxkF7o85NHPnlhGG+35t8C5x4gwaYHMi14DwUTcBC/wIG+QxvBoV5MRKUkimoJMlWWwHCBUa1Vu5yWKrlctaIZXAEHRuU1+kNwzN0piO9Pic8gstwtHcWJKzlS9ppp1ZRuQS8kaffr0wUdmrlOdU65amcQefLIXiuFfVSc9iAttwNvfd3zG9lx4xpKvKUg7At+UtnAsONYmtLd0QSZDb6IEqgeYNNqzJjC75BpqGuhSncePA8kdiyAXcc3c9tcIBwqymy2Na4xWI6FNKPAhDVq9TqSbWjYpapE54wwsmMh5V5JpbvuhFNIUjZWzjIxS+CYdtvrjgYa4fQmPcFIujEzqAJQn80UVxANjnRGDjdu3E62CLYOy2eOSBxGnROzsfUkhgmcHuvakBu0UZmoUbB3dTrC/qU60Yo6Fxybh7uyIWu0PO+0uRoA/072pMxt1GuFFK3EpiDx78NsfIPvwwcRu/mfiF2z7KOIja+I/aaBC4Z1/ypFUTaqqYcp9RXt5ti4djEMj3epSri4CxxEpcgsjxJS28FSKMzr9qODC8G5XWRVweVNNRMpiIax22J4D4HIhfOTlTslWlEovINCH/6kEBc104Dwrs/iAXqgPmY4fYl1udnnLnn6DQ==7VZNc5swEP013AHZhBxrN20PyaWeTM8yLKCxkBghjN1f3xWIL1sZZzpOL40PntVbdle8t1rhkW15+q5oVbzIFLgX+unJI1+9MIweH/HfAOceIMG6B3LF0h4KJmDHfoMFfYs2LIV68aCWkmtWLcFECgGJXmBUKdkuH8skX1ataA5XwC6h/Br9xVJd2Lcgvj85fgDLC1t6FcU2ZE+TQ65kI2xBLyRZ9+vdJR2S2Ux1QVPZziDy5JGtklL3VnnaAjfcDrz1cd/e8I4bVyD0ewLCPuBIeQPDjiOOoZs9GrkxXgU7UsWoBnzwmQmgCo2fkCuoaybFEIBFxhj7cvo8MNpRAqaoj+62YBp2FU2Mt8UWQqzQJcdVgGatlTyMzCMnm0wKbdskXJk143wruVRddpJSiLNkjJx5oiSGfTbu6AhKw+lNroJRAexskCVodcZHbMAomu3qcG3X7axHYosVs/YYMGrbMh9TT8qgYcVxC0VuC/XS4An5lMolFfmXUq0cUl1wjMe+MmbSKH7eKBwaoG+TPSnzPuqV1FQb2TEg9u/DbBTcPgThBxG7/p+IdbXsRxEbXRH7WuP9i0k9U/JiztRM5NxMmAyobhS4pwre2N2FdwCbp1KQsqSj7VI1ZE275sowHYQUcDFKLEQ5y40MHDKTwSjA8B7/YuGSpakp4myA5aCbaRyshrXdYngPfcnFwYmv9Q3WDoHDOwj84BLYpW1JxXlStv6U9m+kJS5pV/eRFpfT12Hnm32Ck6c/7VZNk5swDP013AEnlD026bY9dC/N7PTsgABPjM0YE5L++spgvhLvZDuT9NLNISM/Icm8J8t4ZFuevilaFS8yBe6FfnryyBcvDKOnJ/w3wLkHSLDugVyxtIeCCdix32BB36INS6FePKil5JpVSzCRQkCiFxhVSrbLxzLJl1UrmsMVsEsov0Z/sVQX9i2I70+O78DywpZeRbEN2dPkkCvZCFvQC0nW/Xp3SYdkNlNd0FS2M4g8e2SrpNS9VZ62wA23A2993Nc3vOPGFQj9noCwDzhS3sCw44hj6GaPRm6MV8GOVDGqAR/8IXNWa5ag+RNyBXXNpBhCsMwYZV9PnwdOO1LAlPXR3RZMw66iifG22ESIFbrkuArQrLWSh5F7ZGWTSaFto4Qrs2acbyWXqstOUgpxloyRM0+UxLDPxh0dQWk4vclWMGqAvQ2yBK3O+IgNGGWzfR2u7bqddUlssWLWIANGbWPmY+pJGzSsPG6pyG2pXho8Ix9iucUi/1KslUOsC47x6FfGTBrFzxuFgwP0bbInZd5HvZKaaiM7BsT+fZiNgtvHIHwQsev/iVhXyz6K2OiK2Nca72BM6pmSF5OmZiLnZsZkQHWjwD1V8NbuLr0D2DyVgpThhd2vEk5xJGUs6Ym81BF51K5JM8wLIQVcDBcLUc5yIwyHzGQwmmAR/tnCJUtTU8TZEsvRN1M9WA1ru8XwHoqTi6MUuxR3SB7eQfJPLsldapdUnCet678Tu5P2Q2+33uSBeuNy+pDsfLOvdfL8Bw==7ZdNc5swEIZ/DcfOYHAcckwcOz00l3g6nR5lWEATIVFJGLu/visQHzb4Y9o6mczEB4+00q5W+z4S4PjzbPskSZ4+iwiY47nR1vEfHc+b3d3hvzHsaoM/uakNiaRRbZp0hhX9DdboWmtBI1B7E7UQTNN83xgKziHUezYipSj3p8WC7a+akwQGhlVI2ND6g0Y6tbvwXbcb+Ao0Se3S01lgXdYkfE2kKLhd0PH8uPrVwxlpgtlIKiWRKHsmf+H4cymErlvZdg7M1LapW+23PDLaJi6B60scvNphQ1gBTcYzhq4Pa2wkpvGd0w2RlGjAid9EQpWmITZfIJGgFBW8ccFlWi+7Pb1raloVBcyyLg6XKdWwykloRkuECG2pzhj2JthUWorXtvZYlYdYcG1B8aamTxmbCyZkFd2PCARx2Hr2RmZhAOu4zWgDUsP2aLUmrQbINogMtNzhlMbh1spmufZubL/sKPGaOWkPkMDaiAUzaUN32mDDyjMulX9equcCz8inWPZQBu8oVjAQ64lugJuLLDXSDKTjRbYGiSMiNumIQqpxpVxSSVVEpgzYyoFHypp2lCeON6/2WKWDi+3GVsuJOhZemCTigQehzK6tQelRX395RY4mhiPCaMKxE+LesVhXOdP+9EJMbv8DJs0D7104aYPTzutQdXyOjUZvbX1fkhlF+VrlldiAW5ANUVzoMzwiJs2uGVH6FGkjiNdEW3oPYP2YYB7eX28L5uTfwNQ0g6NgmiiQ1SLhK5wmlKs2cClkVMf/VZi3oIfly2LR9WrtqZlP9VgeKifZqattmLioz8cRt48Jz+GtNvXeEp7hW+U+PKOsnObiQLRLQBlloHfn9SRtnIw0X0pbjnvzPm8+HfoxR67Fo1fgSNZNpMX96ue5XD9B/4tb8pqgY7f7MqvGep+//uIP1ZfBbqMwEIafhmMlwISS44Z228Nutdoc9uyYAawaGxmnJPv0O4AhEJJqD20jIiUa/+MZ298MjnBIXByeNC3znyoB4fhucnDIg+P74XqNv41w7ATirToh0zzpJO8kbPlfsKJr1T1PoJpMNEoJw8upyJSUwMxEo1qrejotVWK6akkzmAlbRsVc/cMTk9tTENc9OZ6BZ7ldOggjG7Kj7DXTai/tgo5P0vbTuQvaJ7OZqpwmqh5J5NEhsVbKdFZxiEE0bHtuXdz3K95h4xqk+Z8Avwt4o2IP/Y5DgaGbHRpZY/xQGa8MZzjtN2QaqooriYM7/G64pPqIRiwo6iln1LTeLgeuO6Sx5zXHHnJLCZp9uOiuc25gW1LWeGvsKtRyUwgceWhWRqvXoRiIaZMqaWzn+EEz5kLESijdZicJhShlQ+TIE7IIdumwozfQBg5X8XlDUbDZQRVg2vPagCCydbSN7q/suB61TT8nH3VMr1HbqdmQ+lQsNGy9LteOzGr3C4vwiZy9hjMVPJM4YIgI9MdgXLlTjOQCxksUgw+gGMwovuDD57uLZRndjuVqxhLpFEukGN6QYnilI5fK8j68Hcv7Gct4XxnMo5vEjEFplvmUn92Ygfd1TKP3mCbABJewTKjR7aCuZ1C/lSWywz+iXElYIs7zO/QrcfZLjXnKRCv0L5jo+U36iURxeHoLaX2jVz3y+A8=3ZlNc9owEIZ/DdNTO/gDsI+FJukhmXaaQ9ujsNe2GqP1yCJAf31XtvyFoJNDCOMwAyOttJL8vGuzkifearO/k6zIHjCGfOJO4/3E+zJx3XkY0q82HGqD58xqQyp5XJuczvDI/4IxTo11y2MoBx0VYq54MTRGKAREamBjUuJu2C3BfDhrwVKwDI8Ry23rTx6rzFyFN512DV+Bp5mZ2p8HxmXNoqdU4laYCSeul1SfunnDmsHMSGXGYtz1TN7NxFtJRFWXNvsV5Jptw632uz3T2i5cglAvcXBrh2eWb6FZ8Twn1+WaCqkuPGwJvMANF0x73mPKS8UjKv6AVEJZchRU+UjfqmtBFN3pKmfUkvCIqbr9W6ELZTM8LamdwaBQh4Z/BRD0EqfUvMu4gseCRbp1RwFHtkxtcqo5VCyVxKdWJyK4TFAoE1Sur+s8z1eYo6xG92IGQRK1nr2WeRTAOmlX9AxSwf4sWafVi+4DwA0oeaAuxsGfGYnNPeA29V0XUf7C2LJeMAXGxkwQp+3QnY5UMFKeltWzZL3jz6BlYPoiQJYoPpTdxO5KLyxjSo+h7YoaZBWfqNUsK5q3FxTK0UKxnKeCKhExBnkZHTx/ZungntJh/go6+Gd1IMD0K7abNWjOmGgb30A50Ej7cthpY1SJU/BIbWXVC1iU6WcsO9TyZfQc0U8Ycah76z4x1lNpE+7EO5HQd+1b6WISziwJ52NkuDi+DWb2beCfQOi/AsK5jfDTbJQQw+tBXFgQF2NEGHjXQxhawCCmvM9UUaoMU6Qs56azLodIe/hgz9WvXvm37kJh7S3/gFIHw5FtFZKpG/sesTBex7htQer16kX+nzZdE25lZHoFpwWQkFMu9jwc6hRO4/oduVCdcKF/JNxiNhxCMZmCMl5HorTLeJFOgR3q43xeBIvrBXuzl+pRdPwxQrQC7y0h2vsjp8nFxkfyOAfwvRNbkkuRtLckbpunjhBleEWU9q7CGzHK44zgTVHaqak/ZpSLK6K0/7XpOb0cMc3QuSLN0KJ55gRHH2X2j2/UodAnC9WBQpGh0JX+MUAhIdGE3sdJQGhLcrGTANfOqD4X1Wnn+EAepwKzqQ1yfqHYblbb5yhiidQ+QpKBc0WSdnp6C0wfEI6S5OKKJO309CcXsX6TNEKSofdmJKnava2q9/rdK0Hv5h8=7VZNc5swEP01TE6ZAcmm5Fi7aXtoLvWhZxkW0ERoPUIOdn99VyAwxGScg51L4xl7Vm939fHeaq2Ar6vDDyN25RNmoAIWZoeAfwsYix8e6NcBxw7g0bIDCiOzDopOwEb+BQ+GHt3LDOpJoEVUVu6mYIpaQ2onmDAGm2lYjmq66k4UcAZsUqHO0T8ys6U/BQ/Dk+MnyKL0Sy/ixKdsRfpcGNxrv2DAeN5+Oncl+sn8THUpMmxGEH8M+Nog2s6qDmtQjtuety7v+xveYeMGtH1PAusSXoTaQ7/jWFHqaktG4YxfWMjaypTCfkNhoK4l6j6KZh4C/Ynssaex5QHcSiG5m1Ja2OxE6rwN1Q1hpa0UjSIya2vweaCbiFjlqK2vDbZwY6nUGhWadnaeCUjydMgceeI0gW0+7OgFjIXDmwRFA+1UzoAVWHOkEJ8wKOVLmS39uBkVRuKxclQTPSZ8LRbD1Cc5yPCKzKvDL6vztKdrobGSWrjMT7HGYvGPFGsxI9Yrjum275yZ7o06rgz1CrCXyT4p8z7qDVphneyUkITXYTaOLl8DdiNil/8TsXMleyti4zNiV9RG2t2tlaDWkcu0OzAL7+l7B9KWYMhCc3emAXFg57pEf9c1anjVGDwklCwcqQpyN4PjkxZWXz1cySxzi8zKOW1bI8WiRT/2W2TXUIu/ugbJnFozcrEryPXlTK62+d+ns1o5akmo3L2dSuheQQobqYtP6Sb/AzeQjoanJ1zrG72T+eM/rVTJbtswEP0aoacCEpkKvsZukl6SFFCAnmlpLBGmSIWkIztf36E42pAa6ME6iMM3nH1J+K49P1nRNc+mApWwtDon/GfCWM4z/AfgEgGe/YhAbWUVoWwGCvkJBKaEnmQFbvXQG6O87NZgabSG0q8wYa3p188ORq2tdqKGL0BRCvUV/SMr31AUPE1nxi+QdUOm7/INiexFeaytOWkymDB+GL7IbsWojDS5RlSmX0D8IeE7a4yPVHvegQq5HfMW5R6vcCfHLWj/PwIsCnwIdaLYn+QH6JDHAEMjSwXfXBLU5ApVbvfBa3+hVOXvp+Dq9mC0/+6GQt7jg2zTYS9sZz5SdTj7mDXShX7tR07Cdjez0hjroDM92OuWBJboVvZA11JDaHjpOiVKaEP6VwEtHehlrIG/mQO/74vi36Gmxt7MysvrG7Kv28pF2yGh9y4coYFca2o8oJXOSaNDH5UNlMeEP1L/T86wYWog9GUactRID0WHuUSgxy0TyupbhbcMSeetOU7DySgI2iTZJphXstZ4KbEU2AfBv6HTwXo4X52WbJpB3G1gWvD2gk9IgG9obGmvsTu694stMS6xZrEgshEUtJnqSfc8nEjQfI7XeQ8MvMWy5Q9/AQ==7Zhdb5swFIZ/DfcYE0oumzRdb7pNyqReu2DAqsHImJLs1++ATQgx1aaJJMrWXET4+Ov4OS/HNg5e57svkpTZs4gpdzw33jn4wfG8EPvw3xr22uB7rjakksXahAbDlv2kxtg3q1lMq1FDJQRXrBwbI1EUNFIjG5FSNONmieDjWUuSUsuwjQi3rS8sVpm2Yuy6Q8UTZWlmpvaD0HR5JdFbKkVdmAkdDyfdT1fnpB/MjFRlJBbNkQlvHLyWQij9lO/WlLdse2663+MHtQfHJS3Un3QIdId3wmvae9z5pfY9jG41tG3vOnjVZEzRbUmitraB6IMtUzmHEoLHSknxdoAGy1klolAmwiiEMuEsLaAQgYdUtg0Y52vBheymwzGhYRIdhjqqCaKQviZQY3ymUtHdh+tGB5qgUipyquQemux6RS50F6NQzzcBaYZ4+70cs6NQo14DxGgsPYw9YIYHQ3qaOraov+gpLs1+DpILd0wysEkib4JkMANI3wL5JGRFS9HA8m4Q5uLuijAXFsxNkbKCgu2BVSUHVHm7jhvkGiyvyPXO4vpIiaol7HCnKGGFaopXnwULAeEYp0xjsqi1vBhsafemImdx3E4zGaBxCI8iAhuEKRsn0RzRQCfRQBPJdyIY3gzBCD83vPGR7CIb3tKi/v1+u708+ZmFfLr3+ROnCBSeKa0gZEH9+u0HGP4JtAG+JlrPQrvmpKpYAhlVMVF8Jm59jl1eLnEj+9BsRQFuU2X7GNWS71cS7mJU/V7tA8O/1L4USquibeDOk69D/2SPnNA/Ple6Rva5+rmG6/c7kYwoegb1c5qo2bQP7s+v/fD0aB5eUPv20fx/0v7UWeV82rc/iaxYQTr/zr4J3N5r4E/cpGZ6DaA4fAjr6o6+NuLNLw==7Vldb5swFP01eWyEbULJ45p128M2VcrDtkcXLuDWwZEx+divnwFDAJN20ijb0hIpso+/z7HvvYYZWW0OHyXdJl9ECHyGnfAwI+9nGPvE1f8FcKwAFzsVEEsWVhA6AWv2EwxYV8tZCFmnohKCK7btgoFIUwhUB6NSin23WiR4d9QtjcEC1gHlNvqNhSqpUEIc51TwCVicmKFdzzdN7mnwGEuRp2bAGSZR+VTFG1p3ZnrKEhqKfQsitzOykkKoKrU5rIAX3Na8Ve0+nCltJi4hVb/VwDfzUMd68RBqLkxWSJWIWKSU357Qm3J9UPTg6FyiNlwnkU7CganvrfSPosp8UeRSJY9F0ZUzdxCqkaoCXpIauAPJNqBAms4fQKmj2SA0V0JDpzl9FmJrRsuUFI+NWJrGm0ikyjREns5X6ywWd5YqA2Uil4Gphc3uozIGU+u6kUlvfxB6tvKoq0jgVLFdt3dqNmLc1DtpoRNGjmFpzNA7ynOoN1NPqq4Q+4QpWG9pOfe9PphdcZ6myNV5ylmc6gyHSBXFjPOV4EKWg5GQgh8FTUetEi/w4T5qON6BVHB4mmWbP9OA+OZkHOsNavL700FEnsGS1hlsjMefcE4szpkm+DB/yCbmfgwml10msTPApDvApDsCka5FJGcpUHklIZaQZUykl0GqOyGpC4vUgMpsHmS7CyBy6Jy/FJGeReQql+XMsXMnxUMRU2BnrWQeqFyCxa5ethqisLaJqUihZ0ANVBMZ6MEKJ3dTkMh05PHOFGxYGJZOdkizrqp9D1fmzSTRCBK5Ts8ULwYkwkOmeASJrl+l9/Pw894PD50K4o3AeROUThUM9uLAxT8Q8Jl4uB3wLYclGz3g8y8o+PCu/6KfXF5o8GGROqXPrMPrFqshVXRqq9zxcZaVjhbFb9BKl4/poYVXz0j6kK4+7pSbHiFLn6+wfwto2vr075ZTBjTIvltaVuntMJ0/TJNeX5F9f/1/r1p9t+FO6jaWFmGvLqZE5uLeDiqRN6zZ6FElst8aXE5Y2Vx7JtnK9msDLmKWaXd3aZGlO6mxte/6A7y++cbzvpHgl5NLZ0+fo8qy1jc/cvsL5VZNc5swEP01Ht86NrKJe43jpJ1pL/Wh7VGBNSgRWkYIg/PruxJrMEPTZqYfF3NgtE/7Ie3bxzAT26J9sLLMP2MKehYt0nYm7mZRFEcxvT1w6gCxXHdAZlXaQcsB2KsXYHDBaK1SqEaODlE7VY7BBI2BxI0waS02Y7cD6nHVUmYwAfaJ1FP0q0pdzrcQi8Ww8QFUlnPpVbzhkEeZPGcWa8MFZ5E4hKfbLuQ5GWeqcplicwGJ3UxsLaLrVkW7Be17e+5bF3f/ym5/cAvGvSVgxcdwp/PdIaVWsInW5ZihkXo3oLfheuATLMjKXaFpuaQltMp98/C7NVvfeecJnDsxz7J2SNCQ+xNiyX6Vs/jc95y6cXtA4zhwGZPdndcf8tUbM1RhbRP2iniIpM2AvUTfbZpiwAKcPZGLBS2dOo6zS56nrPcbWkoL7urPO8ylj1LXnPROpWbu/JijP1NO/czysAJ6a2VA2nCSzEJVKTT+fhaf/KRHVG+Bfjs9Z2mscj4Qa2/JULxLlZAuw/h7f0X3vp+wPeayySnVvpShbQ1Je8zv79mRWmWGjITIAOsdlNZb1HQCX06kEjaHpE91sRMnG3g89AQfwTpof03xlDwOWL1ndfHnJ9qw3Qxijm4Yyy90fPb7E77j61CUmCpq/Z8UJSaKeghCwn7wDbReCxUpppOPpO8xSQYbo1Gmvd+LKr0+FJEQhKV8VE5nG+uoksWFnD4Gn6Nf2jA6VI8+4VepLPFWZd38BWWtJ7x/gQKKR7Bn9m3tyZ6bsvBhpnLE4txXPbjgVBtivFQm66mVNsn9bF4le6t/yB6Zw19M2Lv4VRS7Hw==7Vldb5swFP01kbZJkwADCY9N1o+HVqpWaXt24AasAEbGaZL9+tlgAtjJ0g+aVWkjEZljfG2fc319DSM0yzbXDBfJHY0gHTlWtBmhHyPH8R1f/EtgWwPI9mogZiSqIbsFHsgfUKCl0BWJoOw9yClNOSn6YEjzHELewzBjdN1/bEHTfq8FjsEAHkKcmuhvEvFEzQJZVltxAyROVNeuP1FN5jhcxoyuctXhyEGL6ldXZ7gxpiyVCY7ougOhyxGaMUp5Xco2M0gltw1vdburA7W7gTPI+VMaOHWDR5yuoBlxNS6+bciAPLqQnIq7MMVlScIRmiY8SwVgi2LJGV3ueBIzmC5ozpWoti/ua5MQGaS3o7R3cxc+BTQDzrbikXXLvqcYSzq8NxiDFHPy2DePlRPEO3O7Hu4pER07lvJXN1B2to2cVt9ESVcsBNWqy6ZmaHzMEMcsBm4YEoXOtFuoEmu/cOhTOGlG43v8QuF0Q45uaDjhXEO4K8B8xUCAvyRYisKXG8pKKOga2FdDVw4bvk/JGU0pE0hOc5BikjTVIJySOJfuIOQDgU8fgXEi4t6FqshIFMlupuuEcHgocCj7XIsgL7AqrIGchnXQV6RB2DzXW5rlYweanMrLO95k267pTo512HN6Uv1DF8/Q5RbPq22tVeXu/voDyeG6BxZFRw53z+IeQo3xE8Jbmop84BA7HTlwWdRJwoJsJF9PCHyGMgPQ6Wl0upZJp72HTnsAOifnR6evhWwUnI7O4AzpdDQ6vdPR2dg4Kz4DnU/vdHza58in1+fTOaF/Pu+UpHb3s8q0jSOS+8JMe4y0daFnC8Nl2rZ5RhIJnACqspWJ65u42lRbVjlCCmtuyPs+k7zqXg2yWfOvSsC1FAXtSVH2rrIhUj7bPBndkhywlOUnxAzECZbmhjJ9ho4EsxfErq6kIwdFGCaL0NBf1PjhBOaLgaKd1xfCQXuinY9MIdAQQphHIYP1MsGFLIYrlm6nDIdL4Mfpb7V6oRiMchHFqMS+B9ZAp87AP7qzOG/l8/6HojpA7v+j2jxS/pbvXNa42p44FX8LEtcvYuiqwhJSNlUZXkIL1bspzcuEFBJlwuS73zICbcdwBlB07GuLx50Yik7eSlHzVPup6OvXqKWtUXf8VoqK2/ZLR53gtZ+T0OVf3VbBcpswEP0a7iAB8dlukh6aSz2dnhVYQBPBMkIOdr++CyxgBtJmOs6h8cGjfavdld57YHvyUJ4fraqLJ0zBeMJPz5784gkRi5i+O+AyADKIBiC3Oh2gYAaO+hcw6DN60ik0i40O0ThdL8EEqwoSt8CUtdgut2VollNrlcMKOCbKrNGfOnUF30L6/pz4CjoveHQY77jkWSUvucVTxQM9IbP+M6RLNTbjTk2hUmyvIHnvyYNFdMOqPB/AdNyOvA11D29kp4NbqNx7CsRQ8KrMie/+TVegLGHfIbfQNBorCh5RmYaP7C4jT/1FoWvle3LfFtrBsVZJl23JGIQVrjQUBbRsnMWXiU+66T7DyrH4QUyxMjqvKEjo8GC7DdqYAxq0/TiZKthlydTqKhMnO3jOxpZ8QCbjFayD85v8BBPr5GbAEpy90BYuiEbJ2cki5LidfSHuGCuuLBExptiK+dR6VoMWLMi2ONFKnAdNxmKE5PCRfOU/dWN6fP+RCoVbCt2C4nBJsQw2KJYbFMsbUByvKP7RwJ8ZpldRdz8LqaZXz1jLO0tt+rIaukcoV8b0j0+GXah6qgqdkDqfQajonULFNxDqbiVU8F9y6P/d7OEHeX23olB8Cgo3bLhF4T+4kML5p7jPXf3fkfe/AQ==3VbBkpswDP0a7oCB5px0d3voXprp9GxAGM8axBhnSfr1lcFAGNh2ZyfpTJtDYj1ZsvyeBPHYoTo/ad6Uz5iD8kI/P3vssxeGSZjQtwUuA8CCeACElvkABTNwlD/Bgb5DTzKHdrHRICojmyWYYV1DZhYY1xq75bYC1fLUhgtYAceMqzX6Q+amdLdgvj87voAUpTs6SnYuJOXZi9B4qt2BXsiK/jO4Kz4mc5nakufYXUHswWMHjWiGVXU+gLLcjrwNcY9veKfCNdTmPQHhEPDK1cnd/SsK2RqZEfoNhIa2lViT8YRcta5ocxmZ6q8KNpnvsX1XSgPHhmfW21FrEFaaSpEV0LI1Gl8mRumu+wJr4+QPErK5kqImI6PyQdsNUqkDKtT9cSznsCuyKdWVJ8l2kBZjSlego+MVtIHzmwwFE+/Uz4AVGH2hLS4gHkV3vRxGzu7mzgg/Oay8aorYYdw1o5hSz3rQwkmyLQ9byfMoqbUcQnL4SJ3lP9tjenx/T4WiLYVuQXG0pJgFGxSzDYrZDSiOVhR/b+H3DNPDyN5PQy7p4WMnLFFU0T6lhbCLRmPKU6mkuYw+KmNyj0l5T1wpMwU9XzRqtbBObR9anOJ7s63Q/kAl+1m86xD+NYnjd0qc3EDieCVx8E9y6P95TKI7TUmyojD8LyjcaMMtCj/QhWTOr/Hed/VfiT38Ag==7VjBcpswEP0aZtIbSAabY+wmzSHtZJqZ9izDGjSRkUfIsd2v78oIAwI3Tsb1wa0PHukJraT3dpcVHp0tt18UW+VfZQrCI3669ehnj5AojvHfALsKoEFYAZniaQUFDfDMf4EFfYuueQpl50EtpdB81QUTWRSQ6A7GlJKb7mMLKbqrrlgGPeA5YaKP/uSpzu0pqO83Aw/As9wuPYomdsqcJS+ZkuvCLugRutj/quElq41ZS2XOUrlpQfTOozMlpa5ay+0MhOG25q2ad39k9LBxBYU+ZQKpJrwysYZ6x/t96V1NBhTpreEUe4lgZckTj05zvRQIBNgstZIvB57wBNOFLLQVNYiwX5mEtEd6s8vgcHb0KZBL0GqHj2wa9kPLWN7ivcYUCKb5a9c8s06QHcwdVniSHBcmvvXXUWzt7Go5/a6JUq5VAnZWm03H0PgtQ5qpDHTPEDZax26gvVjDwtH/whkzDt/jDwrnGiKuofMJN+oJdw9MrxUg+MOAJTZuHqQqYSU3oD71dNWw1UNKzqSQCpFCFmDE5EI4EBM8K4w7oHyA+PQVlOaY927twJKnqVlmusm5hucVS8yaG0zyiO3TGphj+Ed9xRiE7Xu9pQ6fIHbktF7e8qYgGPXdifjHPacj1R90CXu6PLL5/rV2UMUjkTDMzxW2MtO6ecK4MiNjtO9/k9r0/yHFaEiG46atWBj/HcWiE1KgEFgzHKOnpQcrV1UhseBbQ9gJybEnzRn4DEdOQvMH+BzIp8EZ6BxfH52Rk9ZpfDk6J1dIJ3HoDC9HZ3yFdMYuneHF6KxtXBefYZdPcjn3DIIT+Gzqcft2v6pivHeLGn2wGB9TJy7cYuF8xXjQv0Y9yoyXWGIh+h0yBXhvkkVPy25l9UZ8fCAc2qWgR2jKYLJIenUjjkTJBOaLM1UfkXMLogMBNBnwIPr+CMJu85WjUq75lETvfgM=1Vddb9sgFP01kbaXyTZN2jw2ado9NNK0aNr2SO1bm5VwLYybZL9+F4O/E7XdukqNlBgOcIFzLsdkwpbb/Y3mebbGBOQkCpL9hF1Nomg2n9OvBQ4OYOHUAakWiYPCFtiI3+DBwKOlSKDodTSI0oi8D8aoFMSmh3Gtcdfvdo+yP2vOUxgBm5jLMfpdJCbzu2BB0DZ8BpFmfuqz2YUfcsfjh1RjqfyEk4jdVx/XvOV1MB+pyHiCuw7EVhO21IjGlbb7JUjLbc2bG3d9orVZuAZlnjOAuQGPXJZ+7zclFIXl0a7OcG2ESpseUYC0k2Bh22mLUbCm7wdfpEBL+2TuCSb+6DdpDjWzFTVgJw8mbLHLhIFNzmPbuqNUIiwzW0m1kIqF0fjQKEDcLO5RGZ8ulFJs4VcP2sD+JANhwyvlK+AWjD5QFz9geual8LkaTn1911H+3GNZV3SPcZ9saRO65ZsKnvLj9J+N6dc8EXbpUXAFRexKO0EriYJboYBrKnyFVJNKAtWIYCLCHGNxiRI1IQoVWCKFlAOIS5Eqqto5gfCFpVXQobj0DVuRJHaao7L1he3oFDV1v8jwFUSbhQPRQjYSLWJHRIteQbTpSLSRCqCSS+tDlk7JSan4BZldMeZCQjIyqicp6lAwPcJAjWmQ3IjHfvhjtPgZvqCocrE+NuzEsalDFFjqGPyorgM9EYgNzxV5UApmFKhSqdn2s4SbjYRbchmXxIN1tkJi3jjcerOi37Jw5serMHhXgH4k0lBZgxTKvlqAm1JXw8E0rhiXWruTS/54vajnLN6hHUbBG9rh+UigdWnf+tIu0GRdle5aSJIpKieUrqR8fyS/5TvnYuxW5DK1O6M2GaaouFy16MDdO3TBXpgfnfJP2+WTpYmo0IemyVa6bUfskcBrIevAv8CYg6edlwYJapd2i5j/q5M6f3KQv646p+l5xTM0fZmR0r75odMht75WnPbZ+SBV2PBC90T/wQWQCm4Ff+uh89ER/ZYnzkB7t8J3dwbZfzQ6qrZXekd6+7+Jrf4A1VddT9swFP01lbaXKYlpgce1FPZApWnVtO3RJJfEw/WNHIe2+/W7jp3vVMDEkECitY/t6+tzrk/SGVvtDjea59kGE5CzKEgOM3Y1i6LF5SV9WuDoABbOHZBqkTgobIGt+AMeDDxaigSK3kSDKI3I+2CMSkFsehjXGvf9afco+7vmPIURsI25HKM/RGIyfwoWBO3AFxBp5rc+W1z4JXc8fkg1lspvOIvYffXnhne8DuYjFRlPcN+B2HrGVhrRuNbusAJpua15c+uuT4w2iWtQ5jkLIrfgkcvSn/2mhKKwPNrsDNdGqLSZEQVIJwmWdpyOGAUb+v/gmxRoZb+Z+wYTf/SHNMea2YoasJsHM7bcZ8LANuexHd1TKRGWmZ2kXkjNwmh8aBQgbpb3qIwvFyoptvTZgzZwOMlA2PBK9Qq4A6OPNMUvmJ95KXythnPf33eUP/dY1hXdY9wXW9qEbvmmhqd8mn42pl/zRNjUo+AKiti19oIyiYJbTEVhREzNb5Bq0kmgGlFMVJgpHlcoUROiUIGlUkg5gLgUqaKu3RUIX1piBV2Lz35gJ5LEbjMpXF/ajlJR0/dJhq8g2yIcyBaykWwRm5AtegXZzkayjVQAlXy2TmTplJyUil9Q2xVjLiQkI6t6kqIOBfMJBmpMg+RGPPbDT9Hid/iKoqrG+uKwExenDlFgqWPwq7oe9EQgNrxZ5EIpmFGgSqXm2M8Sbj4SbsVlXBIP1tsKiXnjcZvtmj7Lwtkfr8LgXQH6kUhDZS1SKPtwAW5KXS0H0/hiXGrt7i455PWy3rN4h4YYBW9oiIuRQJvSPvelTdBkXZXuWkgC18oJpSsp3x/Jb/nUOR+7FblM7c6oTYYpKi7XLTpw9w5dcBDmZ6f9y075ZGkiKvSxGbKd7tiEPRJ4LWQd+DcYc/S089IgQW1qt4j5qzspUVJZloMuHOTMp2MfY01fZqR0bn7sTMitrxWnffZyUCps+Er3xPzBKyA1XAb/6qEXoyv6PU+cgfbeC9/dHWT/0eio277UO9LbX05s/Rc=
--------------------------------------------------------------------------------
/MLKits/regressions/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "linear_regression",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@protobufjs/aspromise": {
8 | "version": "1.1.2",
9 | "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
10 | "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78="
11 | },
12 | "@protobufjs/base64": {
13 | "version": "1.1.2",
14 | "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
15 | "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="
16 | },
17 | "@protobufjs/codegen": {
18 | "version": "2.0.4",
19 | "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
20 | "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="
21 | },
22 | "@protobufjs/eventemitter": {
23 | "version": "1.1.0",
24 | "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
25 | "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A="
26 | },
27 | "@protobufjs/fetch": {
28 | "version": "1.1.0",
29 | "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
30 | "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=",
31 | "requires": {
32 | "@protobufjs/aspromise": "1.1.2",
33 | "@protobufjs/inquire": "1.1.0"
34 | }
35 | },
36 | "@protobufjs/float": {
37 | "version": "1.0.2",
38 | "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
39 | "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E="
40 | },
41 | "@protobufjs/inquire": {
42 | "version": "1.1.0",
43 | "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
44 | "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik="
45 | },
46 | "@protobufjs/path": {
47 | "version": "1.1.2",
48 | "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
49 | "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0="
50 | },
51 | "@protobufjs/pool": {
52 | "version": "1.1.0",
53 | "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
54 | "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q="
55 | },
56 | "@protobufjs/utf8": {
57 | "version": "1.1.0",
58 | "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
59 | "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA="
60 | },
61 | "@tensorflow/tfjs": {
62 | "version": "0.12.7",
63 | "resolved": "https://registry.npmjs.org/@tensorflow/tfjs/-/tfjs-0.12.7.tgz",
64 | "integrity": "sha512-sGqnS7+Zj4SK6ap+fdFDGgddQf7l9RJBkWJc36frwP2F4LmFQQ5ED4+Wq7cBM1LzuyNq0p3pREWBbCfab0pnyw==",
65 | "requires": {
66 | "@tensorflow/tfjs-converter": "0.5.9",
67 | "@tensorflow/tfjs-core": "0.12.17",
68 | "@tensorflow/tfjs-layers": "0.7.5"
69 | }
70 | },
71 | "@tensorflow/tfjs-converter": {
72 | "version": "0.5.9",
73 | "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-0.5.9.tgz",
74 | "integrity": "sha512-48sw17WffIoPYTN2gNZ5HWvjKLtQYXrSy+mqaZtiWaRYVjDzJdla6g7dPAL77MR2rxQAfVYMXg8GRDBmkzyBDw==",
75 | "requires": {
76 | "@types/long": "3.0.32",
77 | "protobufjs": "6.8.8"
78 | }
79 | },
80 | "@tensorflow/tfjs-core": {
81 | "version": "0.12.17",
82 | "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-0.12.17.tgz",
83 | "integrity": "sha512-CgFazQpGB21n1LRSxgyMwy0cN6WtuUPBP2W75zk6Rw+gFUXb8ZNh7fhn4nObjgKeIka36TI9MvT1FYrY+z150w==",
84 | "requires": {
85 | "@types/seedrandom": "2.4.27",
86 | "@types/webgl-ext": "0.0.29",
87 | "@types/webgl2": "0.0.4",
88 | "seedrandom": "2.4.4"
89 | }
90 | },
91 | "@tensorflow/tfjs-layers": {
92 | "version": "0.7.5",
93 | "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-0.7.5.tgz",
94 | "integrity": "sha512-JIo4l0yEIfYi+quJG71wAeCP9tgXICg/MIOstowfCVGTHKh8oBVEm39bAI/zyTYYtFVLHeQSvY2KuRCN2h0nBg=="
95 | },
96 | "@tensorflow/tfjs-node": {
97 | "version": "0.1.17",
98 | "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-node/-/tfjs-node-0.1.17.tgz",
99 | "integrity": "sha512-NCTmf87u0XhZBE4lAHGxmjQneZrkkQRZCyUmSlFo4LRfkRIrFT+QJYIonJ/tJof8NtCNLRq9yVS/d5x+FvqntA==",
100 | "requires": {
101 | "@tensorflow/tfjs": "0.12.7",
102 | "adm-zip": "0.4.11",
103 | "bindings": "1.3.0",
104 | "progress": "2.0.0",
105 | "rimraf": "2.6.2",
106 | "tar": "4.4.6"
107 | }
108 | },
109 | "@types/long": {
110 | "version": "3.0.32",
111 | "resolved": "https://registry.npmjs.org/@types/long/-/long-3.0.32.tgz",
112 | "integrity": "sha512-ZXyOOm83p7X8p3s0IYM3VeueNmHpkk/yMlP8CLeOnEcu6hIwPH7YjZBvhQkR0ZFS2DqZAxKtJ/M5fcuv3OU5BA=="
113 | },
114 | "@types/node": {
115 | "version": "10.11.2",
116 | "resolved": "https://registry.npmjs.org/@types/node/-/node-10.11.2.tgz",
117 | "integrity": "sha512-XubfQDIg88PGJ7netQPf3QOKHF7Xht4WXGtg5W7cGBeQs9ETbYKwfchR9o+tRRA9iLTQ7nAre85M205JbYsjJA=="
118 | },
119 | "@types/seedrandom": {
120 | "version": "2.4.27",
121 | "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-2.4.27.tgz",
122 | "integrity": "sha1-nbVjk33YaRX2kJK8QyWdL0hXjkE="
123 | },
124 | "@types/webgl-ext": {
125 | "version": "0.0.29",
126 | "resolved": "https://registry.npmjs.org/@types/webgl-ext/-/webgl-ext-0.0.29.tgz",
127 | "integrity": "sha512-ZlVjDQU5Vlc9hF4LGdDldujZUf0amwlwGv1RI2bfvdrEHIl6X/7MZVpemJUjS7NxD9XaKfE8SlFrxsfXpUkt/A=="
128 | },
129 | "@types/webgl2": {
130 | "version": "0.0.4",
131 | "resolved": "https://registry.npmjs.org/@types/webgl2/-/webgl2-0.0.4.tgz",
132 | "integrity": "sha512-PACt1xdErJbMUOUweSrbVM7gSIYm1vTncW2hF6Os/EeWi6TXYAYMPp+8v6rzHmypE5gHrxaxZNXgMkJVIdZpHw=="
133 | },
134 | "adm-zip": {
135 | "version": "0.4.11",
136 | "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.11.tgz",
137 | "integrity": "sha512-L8vcjDTCOIJk7wFvmlEUN7AsSb8T+2JrdP7KINBjzr24TJ5Mwj590sLu3BC7zNZowvJWa/JtPmD8eJCzdtDWjA=="
138 | },
139 | "axios": {
140 | "version": "0.18.0",
141 | "resolved": "http://registry.npmjs.org/axios/-/axios-0.18.0.tgz",
142 | "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=",
143 | "requires": {
144 | "follow-redirects": "1.5.8",
145 | "is-buffer": "1.1.6"
146 | }
147 | },
148 | "balanced-match": {
149 | "version": "1.0.0",
150 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
151 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
152 | },
153 | "bindings": {
154 | "version": "1.3.0",
155 | "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.0.tgz",
156 | "integrity": "sha512-DpLh5EzMR2kzvX1KIlVC0VkC3iZtHKTgdtZ0a3pglBZdaQFjt5S9g9xd1lE+YvXyfd6mtCeRnrUfOLYiTMlNSw=="
157 | },
158 | "brace-expansion": {
159 | "version": "1.1.11",
160 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
161 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
162 | "requires": {
163 | "balanced-match": "1.0.0",
164 | "concat-map": "0.0.1"
165 | }
166 | },
167 | "chownr": {
168 | "version": "1.1.1",
169 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz",
170 | "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g=="
171 | },
172 | "concat-map": {
173 | "version": "0.0.1",
174 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
175 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
176 | },
177 | "debug": {
178 | "version": "3.1.0",
179 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
180 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
181 | "requires": {
182 | "ms": "2.0.0"
183 | }
184 | },
185 | "follow-redirects": {
186 | "version": "1.5.8",
187 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.8.tgz",
188 | "integrity": "sha512-sy1mXPmv7kLAMKW/8XofG7o9T+6gAjzdZK4AJF6ryqQYUa/hnzgiypoeUecZ53x7XiqKNEpNqLtS97MshW2nxg==",
189 | "requires": {
190 | "debug": "3.1.0"
191 | }
192 | },
193 | "fs-minipass": {
194 | "version": "1.2.5",
195 | "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz",
196 | "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==",
197 | "requires": {
198 | "minipass": "2.3.4"
199 | }
200 | },
201 | "fs.realpath": {
202 | "version": "1.0.0",
203 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
204 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
205 | },
206 | "glob": {
207 | "version": "7.1.3",
208 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
209 | "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
210 | "requires": {
211 | "fs.realpath": "1.0.0",
212 | "inflight": "1.0.6",
213 | "inherits": "2.0.3",
214 | "minimatch": "3.0.4",
215 | "once": "1.4.0",
216 | "path-is-absolute": "1.0.1"
217 | }
218 | },
219 | "inflight": {
220 | "version": "1.0.6",
221 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
222 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
223 | "requires": {
224 | "once": "1.4.0",
225 | "wrappy": "1.0.2"
226 | }
227 | },
228 | "inherits": {
229 | "version": "2.0.3",
230 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
231 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
232 | },
233 | "is-buffer": {
234 | "version": "1.1.6",
235 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
236 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
237 | },
238 | "lodash": {
239 | "version": "4.17.11",
240 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
241 | "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
242 | },
243 | "long": {
244 | "version": "4.0.0",
245 | "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
246 | "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
247 | },
248 | "memoize": {
249 | "version": "0.1.1",
250 | "resolved": "https://registry.npmjs.org/memoize/-/memoize-0.1.1.tgz",
251 | "integrity": "sha1-0mWjRYvlzjvyVJmLMKmVq5FmiiQ=",
252 | "requires": {
253 | "tosource": "1.0.0"
254 | }
255 | },
256 | "minimatch": {
257 | "version": "3.0.4",
258 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
259 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
260 | "requires": {
261 | "brace-expansion": "1.1.11"
262 | }
263 | },
264 | "minimist": {
265 | "version": "0.0.8",
266 | "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
267 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
268 | },
269 | "minipass": {
270 | "version": "2.3.4",
271 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.4.tgz",
272 | "integrity": "sha512-mlouk1OHlaUE8Odt1drMtG1bAJA4ZA6B/ehysgV0LUIrDHdKgo1KorZq3pK0b/7Z7LJIQ12MNM6aC+Tn6lUZ5w==",
273 | "requires": {
274 | "safe-buffer": "5.1.2",
275 | "yallist": "3.0.2"
276 | }
277 | },
278 | "minizlib": {
279 | "version": "1.1.0",
280 | "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz",
281 | "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==",
282 | "requires": {
283 | "minipass": "2.3.4"
284 | }
285 | },
286 | "mkdirp": {
287 | "version": "0.5.1",
288 | "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
289 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
290 | "requires": {
291 | "minimist": "0.0.8"
292 | }
293 | },
294 | "mnist-data": {
295 | "version": "1.2.6",
296 | "resolved": "https://registry.npmjs.org/mnist-data/-/mnist-data-1.2.6.tgz",
297 | "integrity": "sha1-poZd4XCdCsCJp93uc5jCvX6EJAQ=",
298 | "requires": {
299 | "underscore": "1.9.1"
300 | }
301 | },
302 | "ms": {
303 | "version": "2.0.0",
304 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
305 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
306 | },
307 | "node-remote-plot": {
308 | "version": "1.2.0",
309 | "resolved": "https://registry.npmjs.org/node-remote-plot/-/node-remote-plot-1.2.0.tgz",
310 | "integrity": "sha512-92hjrWiusikN/Eem+LSJ/gqmraJ6QIEUlk+ZRz12o8IkrqsFros5TPqxVHM530ahDZm4t6vm1KnIZFWgNZYWsQ==",
311 | "requires": {
312 | "axios": "0.18.0"
313 | }
314 | },
315 | "once": {
316 | "version": "1.4.0",
317 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
318 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
319 | "requires": {
320 | "wrappy": "1.0.2"
321 | }
322 | },
323 | "path-is-absolute": {
324 | "version": "1.0.1",
325 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
326 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
327 | },
328 | "progress": {
329 | "version": "2.0.0",
330 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz",
331 | "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8="
332 | },
333 | "protobufjs": {
334 | "version": "6.8.8",
335 | "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz",
336 | "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==",
337 | "requires": {
338 | "@protobufjs/aspromise": "1.1.2",
339 | "@protobufjs/base64": "1.1.2",
340 | "@protobufjs/codegen": "2.0.4",
341 | "@protobufjs/eventemitter": "1.1.0",
342 | "@protobufjs/fetch": "1.1.0",
343 | "@protobufjs/float": "1.0.2",
344 | "@protobufjs/inquire": "1.1.0",
345 | "@protobufjs/path": "1.1.2",
346 | "@protobufjs/pool": "1.1.0",
347 | "@protobufjs/utf8": "1.1.0",
348 | "@types/long": "4.0.0",
349 | "@types/node": "10.11.2",
350 | "long": "4.0.0"
351 | },
352 | "dependencies": {
353 | "@types/long": {
354 | "version": "4.0.0",
355 | "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.0.tgz",
356 | "integrity": "sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q=="
357 | }
358 | }
359 | },
360 | "rimraf": {
361 | "version": "2.6.2",
362 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
363 | "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
364 | "requires": {
365 | "glob": "7.1.3"
366 | }
367 | },
368 | "safe-buffer": {
369 | "version": "5.1.2",
370 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
371 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
372 | },
373 | "seedrandom": {
374 | "version": "2.4.4",
375 | "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.4.tgz",
376 | "integrity": "sha512-9A+PDmgm+2du77B5i0Ip2cxOqqHjgNxnBgglxLcX78A2D6c2rTo61z4jnVABpF4cKeDMDG+cmXXvdnqse2VqMA=="
377 | },
378 | "shuffle-seed": {
379 | "version": "1.1.6",
380 | "resolved": "https://registry.npmjs.org/shuffle-seed/-/shuffle-seed-1.1.6.tgz",
381 | "integrity": "sha1-UzwSaDurO0+j6HUfxOViFGdEJgs=",
382 | "requires": {
383 | "seedrandom": "2.4.4"
384 | }
385 | },
386 | "tar": {
387 | "version": "4.4.6",
388 | "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.6.tgz",
389 | "integrity": "sha512-tMkTnh9EdzxyfW+6GK6fCahagXsnYk6kE6S9Gr9pjVdys769+laCTbodXDhPAjzVtEBazRgP0gYqOjnk9dQzLg==",
390 | "requires": {
391 | "chownr": "1.1.1",
392 | "fs-minipass": "1.2.5",
393 | "minipass": "2.3.4",
394 | "minizlib": "1.1.0",
395 | "mkdirp": "0.5.1",
396 | "safe-buffer": "5.1.2",
397 | "yallist": "3.0.2"
398 | }
399 | },
400 | "tosource": {
401 | "version": "1.0.0",
402 | "resolved": "https://registry.npmjs.org/tosource/-/tosource-1.0.0.tgz",
403 | "integrity": "sha1-QtiN0RZhi88A1hBt1URvNCeQL/E="
404 | },
405 | "underscore": {
406 | "version": "1.9.1",
407 | "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz",
408 | "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg=="
409 | },
410 | "wrappy": {
411 | "version": "1.0.2",
412 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
413 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
414 | },
415 | "yallist": {
416 | "version": "3.0.2",
417 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz",
418 | "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k="
419 | }
420 | }
421 | }
422 |
--------------------------------------------------------------------------------
/MLKits/regressions/data/cars.csv:
--------------------------------------------------------------------------------
1 | passedemissions,mpg,cylinders,displacement,horsepower,weight,acceleration,modelyear,carname
2 | FALSE,18,8,307,130,1.752,12,70,chevrolet chevelle malibu
3 | FALSE,15,8,350,165,1.8465,11.5,70,buick skylark 320
4 | FALSE,18,8,318,150,1.718,11,70,plymouth satellite
5 | FALSE,16,8,304,150,1.7165,12,70,amc rebel sst
6 | FALSE,17,8,302,140,1.7245,10.5,70,ford torino
7 | FALSE,15,8,429,198,2.1705,10,70,ford galaxie 500
8 | FALSE,14,8,454,220,2.177,9,70,chevrolet impala
9 | FALSE,14,8,440,215,2.156,8.5,70,plymouth fury iii
10 | FALSE,14,8,455,225,2.2125,10,70,pontiac catalina
11 | FALSE,15,8,390,190,1.925,8.5,70,amc ambassador dpl
12 | FALSE,15,8,383,170,1.7815,10,70,dodge challenger se
13 | FALSE,14,8,340,160,1.8045,8,70,plymouth 'cuda 340
14 | FALSE,15,8,400,150,1.8805,9.5,70,chevrolet monte carlo
15 | FALSE,14,8,455,225,1.543,10,70,buick estate wagon (sw)
16 | TRUE,24,4,113,95,1.186,15,70,toyota corona mark ii
17 | TRUE,22,6,198,95,1.4165,15.5,70,plymouth duster
18 | FALSE,18,6,199,97,1.387,15.5,70,amc hornet
19 | TRUE,21,6,200,85,1.2935,16,70,ford maverick
20 | TRUE,27,4,97,88,1.065,14.5,70,datsun pl510
21 | TRUE,26,4,97,46,0.9175,20.5,70,volkswagen 1131 deluxe sedan
22 | TRUE,25,4,110,87,1.336,17.5,70,peugeot 504
23 | TRUE,24,4,107,90,1.215,14.5,70,audi 100 ls
24 | TRUE,25,4,104,95,1.1875,17.5,70,saab 99e
25 | TRUE,26,4,121,113,1.117,12.5,70,bmw 2002
26 | TRUE,21,6,199,90,1.324,15,70,amc gremlin
27 | FALSE,10,8,360,215,2.3075,14,70,ford f250
28 | FALSE,10,8,307,200,2.188,15,70,chevy c20
29 | FALSE,11,8,318,210,2.191,13.5,70,dodge d200
30 | FALSE,9,8,304,193,2.366,18.5,70,hi 1200d
31 | TRUE,27,4,97,88,1.065,14.5,71,datsun pl510
32 | TRUE,28,4,140,90,1.132,15.5,71,chevrolet vega 2300
33 | TRUE,25,4,113,95,1.114,14,71,toyota corona
34 | TRUE,19,6,232,100,1.317,13,71,amc gremlin
35 | FALSE,16,6,225,105,1.7195,15.5,71,plymouth satellite custom
36 | FALSE,17,6,250,100,1.6645,15.5,71,chevrolet chevelle malibu
37 | TRUE,19,6,250,88,1.651,15.5,71,ford torino 500
38 | FALSE,18,6,232,100,1.644,15.5,71,amc matador
39 | FALSE,14,8,350,165,2.1045,12,71,chevrolet impala
40 | FALSE,14,8,400,175,2.232,11.5,71,pontiac catalina brougham
41 | FALSE,14,8,351,153,2.077,13.5,71,ford galaxie 500
42 | FALSE,14,8,318,150,2.048,13,71,plymouth fury iii
43 | FALSE,12,8,383,180,2.4775,11.5,71,dodge monaco (sw)
44 | FALSE,13,8,400,170,2.373,12,71,ford country squire (sw)
45 | FALSE,13,8,400,175,2.57,12,71,pontiac safari (sw)
46 | FALSE,18,6,258,110,1.481,13.5,71,amc hornet sportabout (sw)
47 | TRUE,22,4,140,72,1.204,19,71,chevrolet vega (sw)
48 | TRUE,19,6,250,100,1.641,15,71,pontiac firebird
49 | FALSE,18,6,250,88,1.5695,14.5,71,ford mustang
50 | TRUE,23,4,122,86,1.11,14,71,mercury capri 2000
51 | TRUE,28,4,116,90,1.0615,14,71,opel 1900
52 | TRUE,30,4,79,70,1.037,19.5,71,peugeot 304
53 | TRUE,30,4,88,76,1.0325,14.5,71,fiat 124b
54 | TRUE,31,4,71,65,0.8865,19,71,toyota corolla 1200
55 | TRUE,35,4,72,69,0.8065,18,71,datsun 1200
56 | TRUE,27,4,97,60,0.917,19,71,volkswagen model 111
57 | TRUE,26,4,91,70,0.9775,20.5,71,plymouth cricket
58 | TRUE,24,4,113,95,1.139,15.5,72,toyota corona hardtop
59 | TRUE,25,4,97.5,80,1.063,17,72,dodge colt hardtop
60 | TRUE,23,4,97,54,1.127,23.5,72,volkswagen type 3
61 | TRUE,20,4,140,90,1.204,19.5,72,chevrolet vega
62 | TRUE,21,4,122,86,1.113,16.5,72,ford pinto runabout
63 | FALSE,13,8,350,165,2.137,12,72,chevrolet impala
64 | FALSE,14,8,400,175,2.1925,12,72,pontiac catalina
65 | FALSE,15,8,318,150,2.0675,13.5,72,plymouth fury iii
66 | FALSE,14,8,351,153,2.0645,13,72,ford galaxie 500
67 | FALSE,17,8,304,150,1.836,11.5,72,amc ambassador sst
68 | FALSE,11,8,429,208,2.3165,11,72,mercury marquis
69 | FALSE,13,8,350,155,2.251,13.5,72,buick lesabre custom
70 | FALSE,12,8,350,160,2.228,13.5,72,oldsmobile delta 88 royale
71 | FALSE,13,8,400,190,2.211,12.5,72,chrysler newport royal
72 | TRUE,19,3,70,97,1.165,13.5,72,mazda rx2 coupe
73 | FALSE,15,8,304,150,1.946,12.5,72,amc matador (sw)
74 | FALSE,13,8,307,130,2.049,14,72,chevrolet chevelle concours (sw)
75 | FALSE,13,8,302,140,2.147,16,72,ford gran torino (sw)
76 | FALSE,14,8,318,150,2.0385,14,72,plymouth satellite custom (sw)
77 | FALSE,18,4,121,112,1.4665,14.5,72,volvo 145e (sw)
78 | TRUE,22,4,121,76,1.2555,18,72,volkswagen 411 (sw)
79 | TRUE,21,4,120,87,1.4895,19.5,72,peugeot 504 (sw)
80 | TRUE,26,4,96,69,1.0945,18,72,renault 12 (sw)
81 | TRUE,22,4,122,86,1.1975,16,72,ford pinto (sw)
82 | TRUE,28,4,97,92,1.144,17,72,datsun 510 (sw)
83 | TRUE,23,4,120,97,1.253,14.5,72,toyouta corona mark ii (sw)
84 | TRUE,28,4,98,80,1.082,15,72,dodge colt (sw)
85 | TRUE,27,4,97,88,1.05,16.5,72,toyota corolla 1600 (sw)
86 | FALSE,13,8,350,175,2.05,13,73,buick century 350
87 | FALSE,14,8,304,150,1.836,11.5,73,amc matador
88 | FALSE,13,8,350,145,1.994,13,73,chevrolet malibu
89 | FALSE,14,8,302,137,2.021,14.5,73,ford gran torino
90 | FALSE,15,8,318,150,1.8885,12.5,73,dodge coronet custom
91 | FALSE,12,8,429,198,2.476,11.5,73,mercury marquis brougham
92 | FALSE,13,8,400,150,2.232,12,73,chevrolet caprice classic
93 | FALSE,13,8,351,158,2.1815,13,73,ford ltd
94 | FALSE,14,8,318,150,2.1185,14.5,73,plymouth fury gran sedan
95 | FALSE,13,8,440,215,2.3675,11,73,chrysler new yorker brougham
96 | FALSE,12,8,455,225,2.4755,11,73,buick electra 225 custom
97 | FALSE,13,8,360,175,1.9105,11,73,amc ambassador brougham
98 | FALSE,18,6,225,105,1.5605,16.5,73,plymouth valiant
99 | FALSE,16,6,250,100,1.639,18,73,chevrolet nova custom
100 | FALSE,18,6,232,100,1.4725,16,73,amc hornet
101 | FALSE,18,6,250,88,1.5105,16.5,73,ford maverick
102 | TRUE,23,6,198,95,1.452,16,73,plymouth duster
103 | TRUE,26,4,97,46,0.975,21,73,volkswagen super beetle
104 | FALSE,11,8,400,150,2.4985,14,73,chevrolet impala
105 | FALSE,12,8,400,167,2.453,12.5,73,ford country
106 | FALSE,13,8,360,170,2.327,13,73,plymouth custom suburb
107 | FALSE,12,8,350,180,2.2495,12.5,73,oldsmobile vista cruiser
108 | FALSE,18,6,232,100,1.3945,15,73,amc gremlin
109 | TRUE,20,4,97,88,1.1395,19,73,toyota carina
110 | TRUE,21,4,140,72,1.2005,19.5,73,chevrolet vega
111 | TRUE,22,4,108,94,1.1895,16.5,73,datsun 610
112 | FALSE,18,3,70,90,1.062,13.5,73,maxda rx3
113 | TRUE,19,4,122,85,1.155,18.5,73,ford pinto
114 | TRUE,21,6,155,107,1.236,14,73,mercury capri v6
115 | TRUE,26,4,98,90,1.1325,15.5,73,fiat 124 sport coupe
116 | FALSE,15,8,350,145,2.041,13,73,chevrolet monte carlo s
117 | FALSE,16,8,400,230,2.139,9.5,73,pontiac grand prix
118 | TRUE,29,4,68,49,0.9335,19.5,73,fiat 128
119 | TRUE,24,4,116,75,1.079,15.5,73,opel manta
120 | TRUE,20,4,114,91,1.291,14,73,audi 100ls
121 | TRUE,19,4,121,112,1.434,15.5,73,volvo 144ea
122 | FALSE,15,8,318,150,1.6995,11,73,dodge dart custom
123 | TRUE,24,4,121,110,1.33,14,73,saab 99le
124 | TRUE,20,6,156,122,1.4035,13.5,73,toyota mark ii
125 | FALSE,11,8,350,180,1.832,11,73,oldsmobile omega
126 | TRUE,20,6,198,95,1.551,16.5,74,plymouth duster
127 | TRUE,19,6,232,100,1.4505,16,74,amc hornet
128 | FALSE,15,6,250,100,1.668,17,74,chevrolet nova
129 | TRUE,31,4,79,67,0.975,19,74,datsun b210
130 | TRUE,26,4,122,80,1.2255,16.5,74,ford pinto
131 | TRUE,32,4,71,65,0.918,21,74,toyota corolla 1200
132 | TRUE,25,4,140,75,1.271,17,74,chevrolet vega
133 | FALSE,16,6,250,100,1.8905,17,74,chevrolet chevelle malibu classic
134 | FALSE,16,6,258,110,1.816,18,74,amc matador
135 | FALSE,18,6,225,105,1.8065,16.5,74,plymouth satellite sebring
136 | FALSE,16,8,302,140,2.0705,14,74,ford gran torino
137 | FALSE,13,8,350,150,2.3495,14.5,74,buick century luxus (sw)
138 | FALSE,14,8,318,150,2.2285,13.5,74,dodge coronet custom (sw)
139 | FALSE,14,8,302,140,2.319,16,74,ford gran torino (sw)
140 | FALSE,14,8,304,150,2.1285,15.5,74,amc matador (sw)
141 | TRUE,29,4,98,83,1.1095,16.5,74,audi fox
142 | TRUE,26,4,79,67,0.9815,15.5,74,volkswagen dasher
143 | TRUE,26,4,97,78,1.15,14.5,74,opel manta
144 | TRUE,31,4,76,52,0.8245,16.5,74,toyota corona
145 | TRUE,32,4,83,61,1.0015,19,74,datsun 710
146 | TRUE,28,4,90,75,1.0625,14.5,74,dodge colt
147 | TRUE,24,4,90,75,1.054,15.5,74,fiat 128
148 | TRUE,26,4,116,75,1.123,14,74,fiat 124 tc
149 | TRUE,24,4,120,97,1.2445,15,74,honda civic
150 | TRUE,26,4,108,93,1.1955,15.5,74,subaru
151 | TRUE,31,4,79,67,1,16,74,fiat x1.9
152 | TRUE,19,6,225,95,1.632,16,75,plymouth valiant custom
153 | FALSE,18,6,250,105,1.7295,16,75,chevrolet nova
154 | FALSE,15,6,250,72,1.716,21,75,mercury monarch
155 | FALSE,15,6,250,72,1.579,19.5,75,ford maverick
156 | FALSE,16,8,400,170,2.334,11.5,75,pontiac catalina
157 | FALSE,15,8,350,145,2.22,14,75,chevrolet bel air
158 | FALSE,16,8,318,150,2.249,14.5,75,plymouth grand fury
159 | FALSE,14,8,351,148,2.3285,13.5,75,ford ltd
160 | FALSE,17,6,231,110,1.9535,21,75,buick century
161 | FALSE,16,6,250,105,1.9485,18.5,75,chevroelt chevelle malibu
162 | FALSE,15,6,258,110,1.865,19,75,amc matador
163 | FALSE,18,6,225,95,1.8925,19,75,plymouth fury
164 | TRUE,21,6,231,110,1.5195,15,75,buick skyhawk
165 | TRUE,20,8,262,110,1.6105,13.5,75,chevrolet monza 2+2
166 | FALSE,13,8,302,129,1.5845,12,75,ford mustang ii
167 | TRUE,29,4,97,75,1.0855,16,75,toyota corolla
168 | TRUE,23,4,140,83,1.3195,17,75,ford pinto
169 | TRUE,20,6,232,100,1.457,16,75,amc gremlin
170 | TRUE,23,4,140,78,1.296,18.5,75,pontiac astro
171 | TRUE,24,4,134,96,1.351,13.5,75,toyota corona
172 | TRUE,25,4,90,71,1.1115,16.5,75,volkswagen dasher
173 | TRUE,24,4,119,97,1.2725,17,75,datsun 710
174 | FALSE,18,6,171,97,1.492,14.5,75,ford pinto
175 | TRUE,29,4,90,70,0.9685,14,75,volkswagen rabbit
176 | TRUE,19,6,232,90,1.6055,17,75,amc pacer
177 | TRUE,23,4,115,95,1.347,15,75,audi 100ls
178 | TRUE,23,4,120,88,1.4785,17,75,peugeot 504
179 | TRUE,22,4,121,98,1.4725,14.5,75,volvo 244dl
180 | TRUE,25,4,121,115,1.3355,13.5,75,saab 99le
181 | TRUE,33,4,91,53,0.8975,17.5,75,honda civic cvcc
182 | TRUE,28,4,107,86,1.232,15.5,76,fiat 131
183 | TRUE,25,4,116,81,1.11,16.9,76,opel 1900
184 | TRUE,25,4,140,92,1.286,14.9,76,capri ii
185 | TRUE,26,4,98,79,1.1275,17.7,76,dodge colt
186 | TRUE,27,4,101,83,1.101,15.3,76,renault 12tl
187 | FALSE,17.5,8,305,140,2.1075,13,76,chevrolet chevelle malibu classic
188 | FALSE,16,8,318,150,2.095,13,76,dodge coronet brougham
189 | FALSE,15.5,8,304,120,1.981,13.9,76,amc matador
190 | FALSE,14.5,8,351,152,2.1075,12.8,76,ford gran torino
191 | TRUE,22,6,225,100,1.6165,15.4,76,plymouth valiant
192 | TRUE,22,6,250,105,1.6765,14.5,76,chevrolet nova
193 | TRUE,24,6,200,81,1.506,17.6,76,ford maverick
194 | TRUE,22.5,6,232,90,1.5425,17.6,76,amc hornet
195 | TRUE,29,4,85,52,1.0175,22.2,76,chevrolet chevette
196 | TRUE,24.5,4,98,60,1.082,22.1,76,chevrolet woody
197 | TRUE,29,4,90,70,0.9685,14.2,76,vw rabbit
198 | TRUE,33,4,91,53,0.8975,17.4,76,honda civic
199 | TRUE,20,6,225,100,1.8255,17.7,76,dodge aspen se
200 | FALSE,18,6,250,78,1.787,21,76,ford granada ghia
201 | TRUE,18.5,6,250,110,1.8225,16.2,76,pontiac ventura sj
202 | FALSE,17.5,6,258,95,1.5965,17.8,76,amc pacer d/l
203 | TRUE,29.5,4,97,71,0.9125,12.2,76,volkswagen rabbit
204 | TRUE,32,4,85,70,0.995,17,76,datsun b-210
205 | TRUE,28,4,97,75,1.0775,16.4,76,toyota corolla
206 | TRUE,26.5,4,140,72,1.2825,13.6,76,ford pinto
207 | TRUE,20,4,130,102,1.575,15.7,76,volvo 245
208 | FALSE,13,8,318,150,1.97,13.2,76,plymouth volare premier v8
209 | TRUE,19,4,120,88,1.635,21.9,76,peugeot 504
210 | TRUE,19,6,156,108,1.465,15.5,76,toyota mark ii
211 | FALSE,16.5,6,168,120,1.91,16.7,76,mercedes-benz 280s
212 | FALSE,16.5,8,350,180,2.19,12.1,76,cadillac seville
213 | FALSE,13,8,350,145,2.0275,12,76,chevy c10
214 | FALSE,13,8,302,130,1.935,15,76,ford f108
215 | FALSE,13,8,318,150,1.8775,14,76,dodge d100
216 | TRUE,31.5,4,98,68,1.0225,18.5,77,honda accord cvcc
217 | TRUE,30,4,111,80,1.0775,14.8,77,buick opel isuzu deluxe
218 | TRUE,36,4,79,58,0.9125,18.6,77,renault 5 gtl
219 | TRUE,25.5,4,122,96,1.15,15.5,77,plymouth arrow gs
220 | TRUE,33.5,4,85,70,0.9725,16.8,77,datsun f-10 hatchback
221 | FALSE,17.5,8,305,145,1.94,12.5,77,chevrolet caprice classic
222 | FALSE,17,8,260,110,2.03,19,77,oldsmobile cutlass supreme
223 | FALSE,15.5,8,318,145,2.07,13.7,77,dodge monaco brougham
224 | FALSE,15,8,302,130,2.1475,14.9,77,mercury cougar brougham
225 | FALSE,17.5,6,250,110,1.76,16.4,77,chevrolet concours
226 | TRUE,20.5,6,231,105,1.7125,16.9,77,buick skylark
227 | TRUE,19,6,225,100,1.815,17.7,77,plymouth volare custom
228 | TRUE,18.5,6,250,98,1.7625,19,77,ford granada
229 | FALSE,16,8,400,180,2.11,11.1,77,pontiac grand prix lj
230 | FALSE,15.5,8,350,170,2.0825,11.4,77,chevrolet monte carlo landau
231 | FALSE,15.5,8,400,190,2.1625,12.2,77,chrysler cordoba
232 | FALSE,16,8,351,149,2.1675,14.5,77,ford thunderbird
233 | TRUE,29,4,97,78,0.97,14.5,77,volkswagen rabbit custom
234 | TRUE,24.5,4,151,88,1.37,16,77,pontiac sunbird coupe
235 | TRUE,26,4,97,75,1.1325,18.2,77,toyota corolla liftback
236 | TRUE,25.5,4,140,89,1.3775,15.8,77,ford mustang ii 2+2
237 | TRUE,30.5,4,98,63,1.0255,17,77,chevrolet chevette
238 | TRUE,33.5,4,98,83,1.0375,15.9,77,dodge colt m/m
239 | TRUE,30,4,97,67,0.9925,16.4,77,subaru dl
240 | TRUE,30.5,4,97,78,1.095,14.1,77,volkswagen dasher
241 | TRUE,22,6,146,97,1.4075,14.5,77,datsun 810
242 | TRUE,21.5,4,121,110,1.3,12.8,77,bmw 320i
243 | TRUE,21.5,3,80,110,1.36,13.5,77,mazda rx-4
244 | TRUE,43.1,4,90,48,0.9925,21.5,78,volkswagen rabbit custom diesel
245 | TRUE,36.1,4,98,66,0.9,14.4,78,ford fiesta
246 | TRUE,32.8,4,78,52,0.9925,19.4,78,mazda glc deluxe
247 | TRUE,39.4,4,85,70,1.035,18.6,78,datsun b210 gx
248 | TRUE,36.1,4,91,60,0.9,16.4,78,honda civic cvcc
249 | TRUE,19.9,8,260,110,1.6825,15.5,78,oldsmobile cutlass salon brougham
250 | TRUE,19.4,8,318,140,1.8675,13.2,78,dodge diplomat
251 | TRUE,20.2,8,302,139,1.785,12.8,78,mercury monarch ghia
252 | TRUE,19.2,6,231,105,1.7675,19.2,78,pontiac phoenix lj
253 | TRUE,20.5,6,200,95,1.5775,18.2,78,chevrolet malibu
254 | TRUE,20.2,6,200,85,1.4825,15.8,78,ford fairmont (auto)
255 | TRUE,25.1,4,140,88,1.36,15.4,78,ford fairmont (man)
256 | TRUE,20.5,6,225,100,1.715,17.2,78,plymouth volare
257 | TRUE,19.4,6,232,90,1.605,17.2,78,amc concord
258 | TRUE,20.6,6,231,105,1.69,15.8,78,buick century special
259 | TRUE,20.8,6,200,85,1.535,16.7,78,mercury zephyr
260 | TRUE,18.6,6,225,110,1.81,18.7,78,dodge aspen
261 | TRUE,18.1,6,258,120,1.705,15.1,78,amc concord d/l
262 | TRUE,19.2,8,305,145,1.7125,13.2,78,chevrolet monte carlo landau
263 | FALSE,17.7,6,231,165,1.7225,13.4,78,buick regal sport coupe (turbo)
264 | TRUE,18.1,8,302,139,1.6025,11.2,78,ford futura
265 | FALSE,17.5,8,318,140,2.04,13.7,78,dodge magnum xe
266 | TRUE,30,4,98,68,1.0775,16.5,78,chevrolet chevette
267 | TRUE,27.5,4,134,95,1.28,14.2,78,toyota corona
268 | TRUE,27.2,4,119,97,1.15,14.7,78,datsun 510
269 | TRUE,30.9,4,105,75,1.115,14.5,78,dodge omni
270 | TRUE,21.1,4,134,95,1.2575,14.8,78,toyota celica gt liftback
271 | TRUE,23.2,4,156,105,1.3725,16.7,78,plymouth sapporo
272 | TRUE,23.8,4,151,85,1.4275,17.6,78,oldsmobile starfire sx
273 | TRUE,23.9,4,119,97,1.2025,14.9,78,datsun 200-sx
274 | TRUE,20.3,5,131,103,1.415,15.9,78,audi 5000
275 | FALSE,17,6,163,125,1.57,13.6,78,volvo 264gl
276 | TRUE,21.6,4,121,115,1.3975,15.7,78,saab 99gle
277 | FALSE,16.2,6,163,133,1.705,15.8,78,peugeot 604sl
278 | TRUE,31.5,4,89,71,0.995,14.9,78,volkswagen scirocco
279 | TRUE,29.5,4,98,68,1.0675,16.6,78,honda accord lx
280 | TRUE,21.5,6,231,115,1.6225,15.4,79,pontiac lemans v6
281 | TRUE,19.8,6,200,85,1.495,18.2,79,mercury zephyr 6
282 | TRUE,22.3,4,140,88,1.445,17.3,79,ford fairmont 4
283 | TRUE,20.2,6,232,90,1.6325,18.2,79,amc concord dl 6
284 | TRUE,20.6,6,225,110,1.68,16.6,79,dodge aspen 6
285 | FALSE,17,8,305,130,1.92,15.4,79,chevrolet caprice classic
286 | FALSE,17.6,8,302,129,1.8625,13.4,79,ford ltd landau
287 | FALSE,16.5,8,351,138,1.9775,13.2,79,mercury grand marquis
288 | TRUE,18.2,8,318,135,1.915,15.2,79,dodge st. regis
289 | FALSE,16.9,8,350,155,2.18,14.9,79,buick estate wagon (sw)
290 | FALSE,15.5,8,351,142,2.027,14.3,79,ford country squire (sw)
291 | TRUE,19.2,8,267,125,1.8025,15,79,chevrolet malibu classic (sw)
292 | TRUE,18.5,8,360,150,1.97,13,79,chrysler lebaron town @ country (sw)
293 | TRUE,31.9,4,89,71,0.9625,14,79,vw rabbit custom
294 | TRUE,34.1,4,86,65,0.9875,15.2,79,maxda glc deluxe
295 | TRUE,35.7,4,98,80,0.9575,14.4,79,dodge colt hatchback custom
296 | TRUE,27.4,4,121,80,1.335,15,79,amc spirit dl
297 | TRUE,25.4,5,183,77,1.765,20.1,79,mercedes benz 300d
298 | TRUE,23,8,350,125,1.95,17.4,79,cadillac eldorado
299 | TRUE,27.2,4,141,71,1.595,24.8,79,peugeot 504
300 | TRUE,23.9,8,260,90,1.71,22.2,79,oldsmobile cutlass salon brougham
301 | TRUE,34.2,4,105,70,1.1,13.2,79,plymouth horizon
302 | TRUE,34.5,4,105,70,1.075,14.9,79,plymouth horizon tc3
303 | TRUE,31.8,4,85,65,1.01,19.2,79,datsun 210
304 | TRUE,37.3,4,91,69,1.065,14.7,79,fiat strada custom
305 | TRUE,28.4,4,151,90,1.335,16,79,buick skylark limited
306 | TRUE,28.8,6,173,115,1.2975,11.3,79,chevrolet citation
307 | TRUE,26.8,6,173,115,1.35,12.9,79,oldsmobile omega brougham
308 | TRUE,33.5,4,151,90,1.278,13.2,79,pontiac phoenix
309 | TRUE,41.5,4,98,76,1.072,14.7,80,vw rabbit
310 | TRUE,38.1,4,89,60,0.984,18.8,80,toyota corolla tercel
311 | TRUE,32.1,4,98,70,1.06,15.5,80,chevrolet chevette
312 | TRUE,37.2,4,86,65,1.0095,16.4,80,datsun 310
313 | TRUE,28,4,151,90,1.339,16.5,80,chevrolet citation
314 | TRUE,26.4,4,140,88,1.435,18.1,80,ford fairmont
315 | TRUE,24.3,4,151,90,1.5015,20.1,80,amc concord
316 | TRUE,19.1,6,225,90,1.6905,18.7,80,dodge aspen
317 | TRUE,34.3,4,97,78,1.094,15.8,80,audi 4000
318 | TRUE,29.8,4,134,90,1.3555,15.5,80,toyota corona liftback
319 | TRUE,31.3,4,120,75,1.271,17.5,80,mazda 626
320 | TRUE,37,4,119,92,1.217,15,80,datsun 510 hatchback
321 | TRUE,32.2,4,108,75,1.1325,15.2,80,toyota corolla
322 | TRUE,46.6,4,86,65,1.055,17.9,80,mazda glc
323 | TRUE,27.9,4,156,105,1.4,14.4,80,dodge colt
324 | TRUE,40.8,4,85,65,1.055,19.2,80,datsun 210
325 | TRUE,44.3,4,90,48,1.0425,21.7,80,vw rabbit c (diesel)
326 | TRUE,43.4,4,90,48,1.1675,23.7,80,vw dasher (diesel)
327 | TRUE,36.4,5,121,67,1.475,19.9,80,audi 5000s (diesel)
328 | TRUE,30,4,146,67,1.625,21.8,80,mercedes-benz 240d
329 | TRUE,44.6,4,91,67,0.925,13.8,80,honda civic 1500 gl
330 | TRUE,33.8,4,97,67,1.0725,18,80,subaru dl
331 | TRUE,29.8,4,89,62,0.9225,15.3,80,vokswagen rabbit
332 | TRUE,32.7,6,168,132,1.455,11.4,80,datsun 280-zx
333 | TRUE,23.7,3,70,100,1.21,12.5,80,mazda rx-7 gs
334 | TRUE,35,4,122,88,1.25,15.1,80,triumph tr7 coupe
335 | TRUE,32.4,4,107,72,1.145,17,80,honda accord
336 | TRUE,27.2,4,135,84,1.245,15.7,81,plymouth reliant
337 | TRUE,26.6,4,151,84,1.3175,16.4,81,buick skylark
338 | TRUE,25.8,4,156,92,1.31,14.4,81,dodge aries wagon (sw)
339 | TRUE,23.5,6,173,110,1.3625,12.6,81,chevrolet citation
340 | TRUE,30,4,135,84,1.1925,12.9,81,plymouth reliant
341 | TRUE,39.1,4,79,58,0.8775,16.9,81,toyota starlet
342 | TRUE,39,4,86,64,0.9375,16.4,81,plymouth champ
343 | TRUE,35.1,4,81,60,0.88,16.1,81,honda civic 1300
344 | TRUE,32.3,4,97,67,1.0325,17.8,81,subaru
345 | TRUE,37,4,85,65,0.9875,19.4,81,datsun 210 mpg
346 | TRUE,37.7,4,89,62,1.025,17.3,81,toyota tercel
347 | TRUE,34.1,4,91,68,0.9925,16,81,mazda glc 4
348 | TRUE,34.7,4,105,63,1.1075,14.9,81,plymouth horizon 4
349 | TRUE,34.4,4,98,65,1.0225,16.2,81,ford escort 4w
350 | TRUE,29.9,4,98,65,1.19,20.7,81,ford escort 2h
351 | TRUE,33,4,105,74,1.095,14.2,81,volkswagen jetta
352 | TRUE,33.7,4,107,75,1.105,14.4,81,honda prelude
353 | TRUE,32.4,4,108,75,1.175,16.8,81,toyota corolla
354 | TRUE,32.9,4,119,100,1.3075,14.8,81,datsun 200sx
355 | TRUE,31.6,4,120,74,1.3175,18.3,81,mazda 626
356 | TRUE,28.1,4,141,80,1.615,20.4,81,peugeot 505s turbo diesel
357 | TRUE,30.7,6,145,76,1.58,19.6,81,volvo diesel
358 | TRUE,25.4,6,168,116,1.45,12.6,81,toyota cressida
359 | TRUE,24.2,6,146,120,1.465,13.8,81,datsun 810 maxima
360 | TRUE,22.4,6,231,110,1.7075,15.8,81,buick century
361 | TRUE,26.6,8,350,105,1.8625,19,81,oldsmobile cutlass ls
362 | TRUE,20.2,6,200,88,1.53,17.1,81,ford granada gl
363 | FALSE,17.6,6,225,85,1.7325,16.6,81,chrysler lebaron salon
364 | TRUE,28,4,112,88,1.3025,19.6,82,chevrolet cavalier
365 | TRUE,27,4,112,88,1.32,18.6,82,chevrolet cavalier wagon
366 | TRUE,34,4,112,88,1.1975,18,82,chevrolet cavalier 2-door
367 | TRUE,31,4,112,85,1.2875,16.2,82,pontiac j2000 se hatchback
368 | TRUE,29,4,135,84,1.2625,16,82,dodge aries se
369 | TRUE,27,4,151,90,1.3675,18,82,pontiac phoenix
370 | TRUE,24,4,140,92,1.4325,16.4,82,ford fairmont futura
371 | TRUE,36,4,105,74,0.99,15.3,82,volkswagen rabbit l
372 | TRUE,37,4,91,68,1.0125,18.2,82,mazda glc custom l
373 | TRUE,31,4,91,68,0.985,17.6,82,mazda glc custom
374 | TRUE,38,4,105,63,1.0625,14.7,82,plymouth horizon miser
375 | TRUE,36,4,98,70,1.0625,17.3,82,mercury lynx l
376 | TRUE,36,4,120,88,1.08,14.5,82,nissan stanza xe
377 | TRUE,36,4,107,75,1.1025,14.5,82,honda accord
378 | TRUE,34,4,108,70,1.1225,16.9,82,toyota corolla
379 | TRUE,38,4,91,67,0.9825,15,82,honda civic
380 | TRUE,32,4,91,67,0.9825,15.7,82,honda civic (auto)
381 | TRUE,38,4,91,67,0.9975,16.2,82,datsun 310 gx
382 | TRUE,25,6,181,110,1.4725,16.4,82,buick century limited
383 | TRUE,38,6,262,85,1.5075,17,82,oldsmobile cutlass ciera (diesel)
384 | TRUE,26,4,156,92,1.2925,14.5,82,chrysler lebaron medallion
385 | TRUE,22,6,232,112,1.4175,14.7,82,ford granada l
386 | TRUE,32,4,144,96,1.3325,13.9,82,toyota celica gt
387 | TRUE,36,4,135,84,1.185,13,82,dodge charger 2.2
388 | TRUE,27,4,151,90,1.475,17.3,82,chevrolet camaro
389 | TRUE,27,4,140,86,1.395,15.6,82,ford mustang gl
390 | TRUE,44,4,97,52,1.065,24.6,82,vw pickup
391 | TRUE,32,4,135,84,1.1475,11.6,82,dodge rampage
392 | TRUE,28,4,120,79,1.3125,18.6,82,ford ranger
393 | TRUE,31,4,119,82,1.36,19.4,82,chevy s-10
--------------------------------------------------------------------------------
/diagrams/01/diagrams.xml:
--------------------------------------------------------------------------------
1 | 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
--------------------------------------------------------------------------------
/diagrams/03/diagrams.xml:
--------------------------------------------------------------------------------
1 | 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
--------------------------------------------------------------------------------